国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解nodejs微信公眾號開發――5.素材管理接口

2019-11-19 16:51:24
字體:
來源:轉載
供稿:網友

上一篇文章:nodejs微信公眾號開發――4.自動回復各種消息,我們實現了被動回復文字和圖文,回復圖片失敗,因為需要先獲取通過素材管理接口上傳多媒體文件而得到的MediaId,這一節們就來實現素材管理的接口。可參看:公眾平臺開發者文檔

1. 新增臨時素材

臨時素材顧名思義是臨時的,上傳后一定時間就被清理掉,適用于一些有時效性的圖文鏈接。關于臨時素材需要注意的點:

  1. 對于臨時素材,每個素材(media_id)會在開發者上傳或粉絲發送到微信服務器3天后自動刪除(所以用戶發送給開發者的素材,若開發者需要,應盡快下載到本地),以節省服務器資源。
  2. media_id是可復用的。
  3. 素材的格式大小等要求與公眾平臺官網一致。具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過5M,長度不超過60秒,支持mp3/wma/wav/amr格式
  4. 需使用https調用本接口。

請求地址:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

1.1 實現uploadTempMaterial方法

uploadTempMaterial是用來上傳臨時素材,直接在Wechat的原型鏈上添加:

Wechat.prototype.uploadTempMaterial = function(type,filepath){  var that = this;  var form = { //構造表單    media:fs.createReadStream(filepath)  }  return new Promise(function(resolve,reject){    that.fetchAccessToken().then(function(data){      var url = api.uploadMaterial + 'access_token=' + data.access_token + '&type=' + type;      request({url:url,method:'POST',formData:form,json:true}).then(function(response){        var _data = response.body;        if(_data){          resolve(_data)        }else{          throw new Error('upload material failed!');        }      }).catch(function(err){        reject(err);      });    });  });}

代碼中的fetchAccessToken用以獲取access_token,修改回復數字2的代碼:

else if(content === '2'){  var data = yield wechatApi.uploadTempMaterial('image',__dirname+'/public/king.jpg');  reply = {    type:'image',    mediaId:data.media_id  }}

先將本地的一張圖片上傳到臨時素材接口,獲取media_id,封裝到回復消息里面去。同樣的方法適用于語音,視頻等:

2. 新增永久素材

永久素材回永遠存儲在微信后臺服務器上,永不失效。關于永久素材有一下幾個特點:

  1. 新增的永久素材也可以在公眾平臺官網素材管理模塊中看到
  2. 永久素材的數量是有上限的,請謹慎新增。圖文消息素材和圖片素材的上限為5000,其他類型為1000
  3. 素材的格式大小等要求與公眾平臺官網一致。具體是,圖片大小不超過2M,支持bmp/png/jpeg/jpg/gif格式,語音大小不超過5M,長度不超過60秒,支持mp3/wma/wav/amr格式
  4. 調用該接口需https協議

新增永久圖文素材請求地址:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN

新增永久圖片請求地址:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

新增其他類型永久素材請求地址:https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN

2.1 實現uploadPermMaterial方法

uploadPermMaterialuploadTempMaterial方法基本是類似的,只是永久素材的的上傳分為三類,需要判斷一下傳入的類型。

Wechat.prototype.uploadPermMaterial = function(type,material){  var that = this;  var form = {}  var uploadUrl = '';  if(type === 'pic') uploadUrl = api.uploadPermPics;  if(type === 'other') uploadUrl = api.uploadPermOther;  if(type === 'news'){    uploadUrl = api.uploadPermNews;    form = material  }else{    form.media = fs.createReadStream(material);  }  return new Promise(function(resolve,reject){    that.fetchAccessToken().then(function(data){      var url = uploadUrl + 'access_token=' + data.access_token;      var opts = {        method:'POST',        url:url,        json:true      }      (type == 'news') ? (opts.body = form) : (opts.formData = form); //上傳數據的方式不同      request(opts).then(function(response){        var _data = response.body;        if(_data){          resolve(_data)        }else{          throw new Error('upload permanent material failed!');        }      }).catch(function(err){        reject(err);      });    });  });}

:雖然實現了永久素材上傳,但是測試賬號也不是每一次都能測試成功,未經過認證的訂閱號也不支持永久素材的上傳。

3. 獲取素材鏈接

由于獲取臨時素材和獲取永久素材的差異性不大,直接放在一個函數里完成。

Wechat.prototype.getMaterial = function(mediaId,permanent){  var that = this;  var getUrl = permanent ? api.getPermMaterial : api.getTempMaterial;  return new Promise(function(resolve,reject){    that.fetchAccessToken().then(function(data){      var url = getUrl + 'access_token=' + data.access_token;      if(!permanent) url += '&media_id=' + mediaId;      resolve(url)    });  });}

4. 刪除永久素材

刪除永久素材就比較簡單了,只需傳入一個mediaId即可:

Wechat.prototype.delMaterial = function(mediaId){  var that = this;  return new Promise(function(resolve,reject){    that.fetchAccessToken().then(function(data){      var url = api.delPermMaterial + 'access_token=' + data.access_token;      var form = {media_id:mediaId}      request({url:url,method:'POST',formData:form,json:true}).then(function(response){        var _data = response.body;        if(_data.errcode === '0'){          resolve();        }else{          throw new Error('delete permanent material failed!');        }      }).catch(function(err){        reject(err);      });    });  });}

5.其他

還有修改永久圖文素材、獲取素材總數、獲取素材列表功能由于本項目中不會用到,就不一一實現了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 伊春市| 资源县| 德安县| 阳原县| 临潭县| 新闻| 商南县| 桑日县| 平定县| 九江市| 聂拉木县| 凌源市| 宜都市| 酉阳| 平顶山市| 舞钢市| 易门县| 连江县| 龙陵县| 托克托县| 醴陵市| 威海市| 正安县| 民勤县| 久治县| 武定县| 安阳市| 马尔康县| 万宁市| 和田市| 弥渡县| 广昌县| 始兴县| 林口县| 奇台县| 龙游县| 藁城市| 桐梓县| 万源市| 龙里县| 鲁山县|