总体思路是:在微信下选好图片后将图片上传到微信服务器,在后端使用微信服务器返回的图片 serverId 加上调用接口的 ApiTicket 通过七牛的 fetch 接口向微信服务器下载多媒体文件的接口请求图片的二进制流,然后保存至自己七牛账号内的特定 bucket。
大致过程如下:
1.调用微信 chooseImage 接口,成功后调用 uploadImage 接口
wx.chooseImage({ count: 1, sizeType: [‘original‘, ‘compressed‘], sourceType: [‘album‘, ‘camera‘], success: function(res) { $scope.localIds = res.localIds; //存储localId供本地预览 wx.uploadImage({ localId: res.localIds[0], isShowProgressTips: 1, success: function(res) { WishData.mediaId = res.serverId; //图片上传成功后保存serverId然后发给后台,让后台根据serverId去微信服务器下载对应的图片 } }); } });
2.在后台使用七牛的 fetch 接口向微信服务器请求文件并存入自己的七牛仓库
var client = new qiniu.rs.Client(); var random_key = Math.random().toString(36).substr(2, 15); //生成一个随机字符串来给图片命名 //调用七牛 fetch 接口,具体用法参照文档 client.fetch(‘http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=‘ + req.session.apptoken + ‘&media_id=‘ + req.body.mediaId, ‘gdutgirl‘, random_key, function(err, ret) { if (err) { console.log(err.error); next(); } else { console.log(‘图片请求成功‘); var url = qiniu.rs.makeBaseUrl(‘7xnxuw.com1.z0.glb.clouddn.com‘, random_key); //生成图片的可访问url req.body.imgurl = url; next(); } });
其中需要特别注意的地方是,通过微信返回的 serverId
去微信服务器下载图片的接口微信公众号
和微信企业号
是不一样的(微信企业号开发文档没有提供媒体下载接口以为是同公众号下载接口一样,结果总是提示 aceess_token
)
-
微信公众号上传下载媒体接口,官方文档
-
微信企业号上传下载媒体接口,上传接口官方文档
下载接口:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
- 本文转载自https://shijianwen.github.io/2015/11/05/%E4%BD%BF%E7%94%A8%E5%BE%AE%E4%BF%A1%20SDK%20%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87%E5%88%B0%E4%B8%83%E7%89%9B/