验证消息的确来自微信服务器
配置提交前,需要把验证消息来自微信服务器的接口写好 。
server.js
/*
* https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html
* 验证消息的确来自微信服务器
* 开发者通过检验 signature 对请求进行校验(下面有校验方式) 。
* 若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,
* 则接入生效,成为开发者成功,否则接入失败 。加密/校验流程如下:
* 将token、timestamp、nonce三个参数进行字典序排序
* 将三个参数字符串拼接成一个字符串进行sha1加密
* 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
*/
const crypto = require(\'crypto\');
async wxCallbackAction(){
const ctx = this.ctx;
const method = ctx.method;
//微信服务器签名验证,确认请求来自微信
if(method === \'GET\') {
// 1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr
const {
signature,
timestamp,
nonce,
echostr
} = ctx.query;
// 2.将token、timestamp、nonce三个参数进行字典序排序
let array = [\'yourToken\', timestamp, nonce];
array.sort();
// 3.将三个参数字符串拼接成一个字符串进行sha1加密
const tempStr = array.join(\'\');
const hashCode = crypto.createHash(\'sha1\'); //创建加密类型
const resultCode = hashCode.update(tempStr, \'utf8\').digest(\'hex\');
// 4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
if (resultCode === signature) {
console.log(\'验证成功,消息是从微信服务器转发过来\');
return this.json(echostr);
}else {
console.log(\'验证失败!!!\');
return this.json({
status: -1,
message: \"验证失败\"
});
}
}
}
复制代码
验证接口开发完毕,后台配置可以去点提交了 。配置成功会提示如下:
接收消息和推送消息
【小程序客服怎么设置自动回复,小程序自动回复功能设置教程】当用户在客服会话发送消息、或由某些特定的用户操作引发事件推送时,微信服务器会将消息或事件的数据包发送到开发者填写的 URL 。开发者收到请求后可以使用 发送客服消息 接口进行异步回复 。本文以接收文本消息为例开发:
server.js
const WXDecryptContact = require(\'./WXDecryptContact\');
async wxCallbackAction(){
const ctx = this.ctx;
const method = ctx.method;
//接收信息时为POST请求;(完整代码自行与上面验证时的合并即可)
if(method === \'POST\'){
const { Encrypt } = ctx.request.body;
//配置时选的安全模式 因此需要解密
if(!Encrypt){
return this.json(\'success\');
}
const decryptData = https://www.shwenmu.com/wenda/WXDecryptContact(Encrypt);
await this._handleWxMsg(decryptData);
return this.json(\'success\');
}
}
//处理微信回调消息的总入口 (只处理了文本类型,其他类型自行添加)
async _handleWxMsg(msgJson){
if(!msgJson){
return ;
}
const { MsgType } = msgJson;
if(MsgType === \'text\'){
await this._sendTextMessage(msgJson);
}
}
//微信文本信息关键字自动回复
async _sendTextMessage(msgJson){
//获取CMS客服关键词回复配置
const result = await this.callService(\'cms.getDataByName\', \'wxApplet.contact\');
let keyWordObj = result.data || {};
//默认回复default
let options = keyWordObj.default;
for(let key in keyWordObj){
//查看是否命中配置的关键词
if(msgJson.Content === key){
//CMS配置项
options = keyWordObj[key];
}
}
}
//获取access_token
推荐阅读
- 小额理财哪个好,个人小额投资理财方法
- 农村中小学现代远程教育资源网,农村中小学现代远程教育资源网
- 如何训练小狗游泳
- 事业单位工资调整,事业单位职工调工资的程序
- 长窄小卧室怎么放床
- 小编教你在优酷视频播放器中上传视频的图文讲解。
- 小编分享在vivoy83中调节音量大小的详细步骤。
- 小编教你易信APP邀请好友的详细步骤。
- 2015小米旗舰新品发布会,小米Note顶配版怎么样
- 小编教你在最美证件照中进行美白的教程。