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

首頁 > 熱點 > 微信 > 正文

NodeJS實現微信公眾號關注后自動回復功能

2024-07-22 01:17:04
字體:
來源:轉載
供稿:網友

一 實先自動回復功能的邏輯步驟

  1 處理POST類型的控制邏輯,接收XML的數據包;

  2 解析XML數據包(獲得數據包的消息類型或者是事件類型);

  3 拼裝我們定義好的消息;

  4 包裝成XML格式;

  5 在5秒內返回回去

二 代碼實操

  本節代碼參照上節課繼續修改和完善,目錄結構跟之前相同,新引入的模塊raw-body使用npm install安裝一下即可,app.js啟動文件和util.js不做變動,主要修改一下generator.js文件,以及在generator.js同級目錄下新建wechat.js文件和tools.js文件。

  wechat.js文件是將前一節generator.js文件中票據部分的代碼抽離出來單獨放在一個文件中,具體代碼如下:

'use strict';// 引入模塊var Promise = require('bluebird');var request = Promise.promisify(require('request'));//增加url配置項var prefix = 'https://api.weixin.qq.com/cgi-bin/';var api = {  accessToken: prefix + 'token?grant_type=client_credential'};//利用構造函數生成實例 完成票據存儲邏輯function weChat(opts) {  var that = this;  this.appID = opts.appID;  this.appSecret = opts.appSecret;  this.getAccessToken = opts.getAccessToken;  this.saveAccessToken = opts.saveAccessToken;  //獲取票據的方法  this.getAccessToken()    .then(function(data) {      //從靜態文件獲取票據,JSON化數據,如果有異常,則嘗試更新票據      try {        data = JSON.parse(data);      } catch (e) {        return that.updateAccessToken();      }      //判斷票據是否在有效期內,如果合法,向下傳遞票據,如果不合法,更新票據      if (that.isValidAccessToken(data)) {        Promise.resolve(data);      } else {        return that.updateAccessToken();      }    })    //將拿到的票據信息和有效期信息存儲起來    .then(function(data) {      //console.log(data);      that.access_token = data.access_token;      that.expires_in = data.expires_in;      that.saveAccessToken(data);    })};//在weChat的原型鏈上增加驗證有效期的方法weChat.prototype.isValidAccessToken = function(data) {  //進行判斷,如果票據不合法,返回false  if (!data || !data.access_token || !data.expires_in) {    return false;  }  //拿到票據和過期時間的數據  var access_token = data.access_token;  var expires_in = data.expires_in;  //獲取當前時間  var now = (new Date().getTime());  //如果當前時間小于票據過期時間,返回true,否則返回false  if (now < expires_in) {    return true;  } else {    return false;  };};//在weChat的原型鏈上增加更新票據的方法weChat.prototype.updateAccessToken = function() {  var appID = this.appID;  var appSecret = this.appSecret;  var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;  return new Promise(function(resolve, reject) {    //使用request發起請求    request({      url: url,      json: true    }).then(function(response) {      var data = response.body;      var now = (new Date().getTime());      var expires_in = now + (data.expires_in - 20) * 1000;      //把新票據的有效時間賦值給data      data.expires_in = expires_in;      resolve(data);    })  })};//向外暴露weChatmodule.exports = weChat;            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 监利县| 宾阳县| 辽宁省| 宁晋县| 中宁县| 延吉市| 新郑市| 宝鸡市| 阳高县| 苗栗县| 鄂托克前旗| 茶陵县| 宁德市| 洞头县| 多伦县| 沛县| 二连浩特市| 霍山县| 微山县| 宁晋县| 道孚县| 绥宁县| 枣阳市| 梨树县| 黄平县| 达日县| 赤城县| 萍乡市| 海南省| 永泰县| 长汀县| 大兴区| 嘉义县| 扶风县| 磐安县| 紫阳县| 东乡| 高安市| 潜江市| 永仁县| 荆州市|