總體思路是:在微信下選好圖片后將圖片上傳到微信服務器,在后端使用微信服務器返回的圖片 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/