手机版

nodejs微信微信官方账号开发——5详解 材料管理界面

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

最后一篇:nodejs微信微信官方账号开发——4。自动回复各种消息,我们实现了对文字和图片的被动回复,但是对图片的回复失败,因为我们需要先通过素材管理界面获取上传多媒体文件得到的MediaId,所以我们会在这一节实现素材管理界面。请参阅:公共平台开发人员文档

1.添加临时材料

临时素材,顾名思义就是临时的,上传后一定时间内会清理干净。它适用于一些时间敏感的图形链接。关于临时材料的注意事项:

对于临时素材,每个素材(media_id)都会在开发者上传或粉丝发送到微信服务器三天后自动删除(所以用户发送给开发者的素材,如果开发者需要,应该尽快下载到本地),节省服务器资源。Media_id是可重用的。材料的格式和大小与公共平台的官方网站一致。具体来说,图像尺寸小于2M,支持bmp/png/jpeg/jpg/gif格式;语音大小小于5M,长度小于60秒;如果支持mp3/wma/wav/amr格式,则需要通过https调用这个接口。请求的地址:https://api.weixin.qq.com/cgi-bin/media/upload?访问令牌=访问令牌类型=类型

1.1实现uploadTempMaterial方法

UploadTempMaterial用于上传临时素材,直接添加到微信原型链:

微信. prototype . uploadtempmaterial=function(type,file path){ var that=this;Var form={//构造form media:fs。createreadstream (filepath)}返回新的承诺(函数(解析,拒绝){ that.fetchAccessToken()。然后(函数(数据){ var URL=API . uploadmaterial ' access _ token=' data . access _ token ' type=' type;请求({url:url,method:'POST ',formData:form,json:true })。然后(function(response){ var _ data=response . body;if(_data){ resolve(_data) }else{抛出新错误('上传素材失败!');} }).catch(function(err)){ reject(err);});});});}代码中的fetchAccessToken用于获取access_token并修改回复号2的代码:

else if(content==' 2 '){ var data=yield微信tApi.uploadTempMaterial('image ',_ _ dirname '/public/king . jpg ');回复={type:' image ',mediaid:data。media_id}}首先上传一张本地图片到临时素材界面,获取media_id,封装在回复消息中。同样的方法也适用于语音、视频等。

2.添加永久材料

永久资料会一直保存在微信后台服务器上,永远不会过期。永久材料有几个特点:

新的永久材料也可以在公共平台官网的材料管理模块中看到。永久材料的数量是有上限的。请仔细添加。图文消息素材和图片素材上限5000,其他类型1000素材格式和大小与公众平台官网一致。具体来说,图像大小不超过2M,支持bmp/png/jpeg/jpg/gif格式,语音大小不超过5M,长度不超过60秒。以mp3/wma/wav/amr格式调用此接口需要https协议来添加永久图形材料。请求地址:https://api.weixin.qq.com/cgi-bin/material/add_news?接入令牌=接入令牌

添加永久图片请求地址:https://api.weixin.qq.com/cgi-bin/media/uploadimg?访问令牌=访问令牌

添加其他类型的永久材料请求地址:https://api.weixin.qq.com/cgi-bin/material/add_material?访问令牌=访问令牌

2.1实现uploadPermMaterial方法

UploadPermMaterial和uploadTempMaterial方法基本相似,只是永久素材的上传分为三类,所以需要判断传入类型。

微信。原型。uploadpermaterial=函数(类型,材料){ var=this;var form={ } var uploadUrl=if(type==' pic ')uploadUrl=API。uploadperpicsif(type===' other ')uploadUrl=API。uploadpermoteif(type===' news '){ uploadUrl=API。uploadpernewsform=material } else { form。媒体=fs。createreadstream(材料);}返回新的承诺(函数(解析,拒绝){ that.fetchAccessToken().然后(函数(数据){ var URL=uploadUrl ' access _ token='数据。access _ tokenvar opts={ method:'POST ',url:url,js : true }(type==' news ')?(opts。body=form):表单数据=表单);//上传数据的方式不同请求。然后(函数(响应){ var _ data=response。身体;if(_data){ resolve(_data) }else{抛出新错误('上传永久素材失败!');} }).catch(function(err)){ reject(err);});});});}注:虽然实现了永久素材上传,但是测试账号也不是每一次都能测试成功,未经过认证的订阅号也不支持永久素材的上传。

3.获取素材链接

由于获取临时素材和获取永久素材的差异性不大,直接放在一个函数里完成。

微信。原型。getmaterial=function(mediaId,permanent){ var那=thisvar getUrl=永久?API。getpermaterial : API。gettempmaterial返回新的承诺(函数(解析,拒绝){ that.fetchAccessToken().然后(函数(数据){ var URL=GetURl ' access _ token='数据。access _ tokenif(!永久)URL=' media _ id=' mediaIdresolve(URL)});});}4.删除永久素材

删除永久素材就比较简单了,只需传入一个mediaId即可:

微信。原型。delmaterial=function(mediaId){ var那=这个返回新的承诺(函数(解析,拒绝){ that.fetchAccessToken().然后(函数(数据){ var URL=API。delpermaterial“access _ token=”数据。access _ tokenvar form={media_id:mediaId}请求({url:url,method:'POST ',formData:form,json:true }).然后(函数(响应){ var _ data=response。身体;if(_ data。errcode===' 0 '){ resolve();}否则{抛出新错误('删除永久材料失败!');} }).catch(function(err)){ reject(err);});});});}5.其他

还有修改永久图文素材、获取素材总数、获取素材列表功能由于本项目中不会用到,就不一一实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:nodejs微信微信官方账号开发——5详解 材料管理界面是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。