对于与微信公众号,我们可能不仅仅只是发文本,我们还需要发语音,视频之类的各种素材。所以,今天来说说素材上传。
从微信文档上可以看出,依旧是post请求,然后传递文档流给微信服务器。
所以,我们照例先配置config文件。
{
"appID": "wxd27649727105b6d2",
"appScrect": "a3f2eb9f5819b0bf4b2a92a81f99baf4",
"token": "wechat",
"prefix": "https://api.weixin.qq.com/",
"diyApi": {
"getAccessToken": "%scgi-bin/token?grant_type=client_credential&appid=%s&secret=%s",
"createMenu": "%scgi-bin/menu/create?access_token=%s",
"uploadFile": "%scgi-bin/media/upload?access_token=%s&type=%s"
}
}
然后给WeChat添加一个素材上传的方法。
// 素材上传
WeChat.prototype.uploadFile = function(urlPath, type) {
var that = this;
return new Promise(function(resolve, reject) {
that.getAccessToken().then(function(data){
var form = { //构造表单
media: fs.createReadStream(urlPath)
}
var url = util.format(that.diyApi.uploadFile, that.prefix, data, type);
that.requestPost(url, form).then(function(result) {
resolve(JSON.parse(result).media_id);
})
})
})
}
当我们回复3的时候,把图片上传上去,并发送给用户。
至此上传素材完成。素材上传的过程中主要有一点需要注意一下,一个是post请求的时候,需要给微信服务发送一个流文件,发送成功之后,服务器会返回一个media_id。
这个mdedia_id就是该素材的id,后面如果我们需要对素材进行其他操作,都是这个id。
如果xml是直接从开发文档复制的,一定要小心,可以在线格式化一下。
源码地址:https://github.com/yeshaojun/wechatBase
如果喜欢就给我点个小星星吧!
网友评论