当前位置:首页 > node技术文章 > 详解nodejs微信公众号开发—素材管理接口

nodejs微信公众号开发素材管理接口浅析

  • 发布时间:
  • 作者:码农之家原创
  • 点击:105

这篇文章主要知识点是关于nodejs、上传微信素材、微信素材管理接口、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Node.js实战
Node.js实战超清扫描版
  • 类型:大小:6.25 MB格式:PDF作者:吴中骅
立即下载

详解nodejs微信公众号开发—素材管理接口

上一篇文章: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,封装到回复消息里面去。同样的方法适用于语音,视频等:

详解nodejs微信公众号开发——5.素材管理接口

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.其他

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

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

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

推荐内容

idea2020注册激活码(激活到2100年)

实例分析Java实现的zip压缩及解压缩工具类

python3 pandas 如何读取MySQL数据和插入

ThinkPHP3.2.3框架如何实现分页功能

深入理解JS函数stack size计算方法

展开 +

收起 -

nodejs 相关电子书
学习笔记
网友NO.582712

node.js微信公众平台开发教程

用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理。 微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。 具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。 平台注册 要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下: 打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“立即注册”。 然后根据提示,填写基本信息,邮……

网友NO.334887

nodejs微信开发之自动回复的实现

上一篇:接入指南 这部分是实现简单的自动回复,当然也是很大一部分功能的实现基础,这里使用了图灵机器人的接口。 效果图如下: 当然,这个机器人的效果如何不是我能管得了的事情了,类似图灵机器人,我们还可以实现段子推送,快递查询等一系列功能,这里不一一实现了。 微信的消息处理 对于公众平台,每一次发消息相当于发出一个post请求,但是需要注意的是不管是发出的请求还是收到的回复,他的数据格式都是xml,但是nodejs本身无法处理xml,所以需要对xml数据进行处理。 仍然使用的是body-parser这个库,但是需要引入body-parser-xml: //解析xmlapp.use(bodyParser.xml({ limit: '1MB', // Reject payload bigger than 1 MB xmlParseOptions: { normalize: true, // Trim whitespace inside text nodes normalizeTags: true, // Transform tags to lowercase explicitArray: false // Only put nodes in array if 1 }})); 这样……

网友NO.200749

node.js实现微信开发之获取用户授权

本篇主要讲述,如何在微信中打开自家页面后,弹窗请求用户授权,以便拿到用户的微信信息。 首先说一下,完成自定义分享信息的,从无到有的流程: 基础硬件服务: 需要一个公网可以访问的有效域名: 购买域名,并备案,我是在阿里云购买的,备案需要十几个工作日。 购买ip,然后设置上面的域名,解析到该ip,这个时间可以快到忽略。 拥有自己的服务器,来存放自己页面项目: 我还是在阿里云购买购买服务器,这个花费最大,几百元一年的使用权。 而且这个服务器,本质就是一台电脑,是电脑就有配置,我目前只是自己学习使用,配置几乎是最低的,而且购买的套餐自带公网ip,这么一来我连上面购买ip的钱也省了。 综上所述,最终我只购买了域名和一个套餐自带公网ip的服务器,服务器用来放置前端项目和后台项目。 阿里云ECS:https://……

网友NO.240112

基于nodejs的微信JS-SDK简单应用实现

2015 是 Hybrid App 崛起之年 ,Web App 和 Native App 各有其强大之处,也有着致命的缺点,人们一边追求native流畅的用户体验,一边同时期望产品能够快速的迭代更新,Hybrid 成为必然的趋势。 鹅厂一马当先,发布了业内震惊一时的 JS-SDK , 这对于基于微信的h5开发者来说简直是如降甘露,从此开发者们告别了用箭头来提示右上角可以分享,并且随时可以使用微信的原生能力,微信变成了一个超级浏览器。 一、准备工作 1.在微信公众平台申请测试账号,并设置好好 JS 接口安全域名 (注:域名必须可以外网访问) 2.查看微信开发者文档 二、开始编码 使用微信 sdk 必须自己实现微信的签名算法。 大概需要4个步骤: 1.获取access_token; 2.根据access_token 获取jsapi_ticket 3. 根据 appId(公众号唯一id)、noncestr(随机字符串)、timestamp(时间戳)、url(当前页面完整url,不包括#aaa=……

网友NO.762990

详解nodejs微信jssdk后端接口

写过了两个微信的页面,遇到了挺多不会的问题,当时也是自己边查资料,边实践完成了简单的需求,刚好现在有空,把之前的东西整理一遍。 与普通的手机页面不同的是,微信页面提供给你了调用微信APP内置功能的接口,可以实现更复杂的功能。 jssdk的前端使用 前端页面调用jssdk首先要通绑定“公众号设置”的“功能设置”里填写“JS接口安全域名” 然后在页面中引入http://res.wx.qq.com/open/js/... 调用 wx.config({...}) 来验证权限配置 然后可根据需要 调用微信所提供的接口 后端返回接口 在前端调用时wx.config({...})中需要的参数需要我们自己进行返回 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 tim……

<
1
>

电子书 编程教程 文档 软件 源码 视频

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757