Node开发微信公众号(4)——素材上传

对于与微信公众号,我们可能不仅仅只是发文本,我们还需要发语音,视频之类的各种素材。所以,今天来说说素材上传。

Node开发微信公众号(4)——素材上传_第1张图片

从微信文档上可以看出,依旧是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的时候,把图片上传上去,并发送给用户。

Node开发微信公众号(4)——素材上传_第2张图片

Node开发微信公众号(4)——素材上传_第3张图片

至此上传素材完成。素材上传的过程中主要有一点需要注意一下,一个是post请求的时候,需要给微信服务发送一个流文件,发送成功之后,服务器会返回一个media_id。

这个mdedia_id就是该素材的id,后面如果我们需要对素材进行其他操作,都是这个id。

如果xml是直接从开发文档复制的,一定要小心,可以在线格式化一下。


源码地址:https://github.com/yeshaojun/wechatBase
如果喜欢就给我点个小星星吧!

你可能感兴趣的:(node)