文章目录
代码代码对于代码的解释事件的消息模板使用恢复函数因为我们需要回复不同类型的消息,这里我们在专栏目录请点击
wechat
文件夹下,新建一个reply.js
,他专门用于消息的自动回复reply.js
暴露出一个函数,这个函数接收一个参数message
,就是我们需要发送的消息,函数返回对应的模板,并发送给微信服务器代码
代码
const template = require('./template');module.exports = async message => {//定义options let options = {toUserName: message.FromUserName,fromUserName: message.ToUserName,createTime: Date.now(),msgType: 'text'}//设置回复用户消息的具体内容let content = '';// 判断用户发送消息的类型和内容,决定返回什么消息给用户if (message.MsgType === 'text') {if (message.Content === '1') {content = '大吉大利,今晚吃鸡'} else if (message.Content === '2') {content = '落地成盒'} else if (message.Content === '3') {// 回复图文消息content = [{title: 'Nodejs开发',description: '微信公众号开发',picUrl: '/6ONXsjip0QIZ8tyhnq/it/u=1841004364,244945169&fm=58&bpow=121&bpoh=75',url: '/'}, {title: 'web前端',description: '这里有最新、最强的技术',picUrl: '/6ONWsjip0QIZ8tyhnq/it/u=1981851186,1061&fm=58&s=6183FE1ECDA569015C69A554030010F3&bpow=121&bpoh=75',url: '/'}];options.msgType = 'news'} else if (message.Content.match('爱')) {//模糊匹配,只要包含爱content = '我爱你~'} else {content = '您在说啥,我听不懂'}} else if (message.MsgType === 'image') {content = '您的图片地址为:' + message.PicUrl} else if (message.MsgType === 'voice') {content = '语音识别结果:' + message.Recognition} else if (message.MsgType === 'video') {content = '接受了视频消息'} else if (message.MsgType === 'shortvideo') {content = '接受了小视频消息'} else if (message.MsgType === 'location') {content = '纬度:' + message.Location_X + '经度:' + message.Location_Y + '缩放大小:' + message.Scale + '详情:' + message.Label} else if (message.MsgType === 'link') {content = '标题:' + message.Title + '描述:' + message.Description + '网址:' + message.Url} else if (message.MsgType === 'event') {if (message.Event === 'subscribe') {//用户订阅事件content = '欢迎您的订阅~';if (message.EventKey) {//扫描带参数的二维码的订阅事件content = '欢迎您扫二维码的关注'}} else if (message.Event === 'SCAN') {//已经关注了公众号,在扫描带参数二维码进入公众号content = '已经关注了公众号,在扫描带参数二维码进入公众号'} else if (message.Event === 'unsubscribe') {// 用户取消关注console.log('无情取关~')} else if (message.Event === 'LOCATION') {// 用户进行会话时,上报一次地理位置消息content = '纬度:' + message.Latitude + '经度:' + message.Longitude + '精度:' + message.Precision} else if (message.Event === 'CLICK') {content = '点击了菜单~~~'} else if (message.Event === 'VIEW') {// 用户点击菜单,跳转到其他链接console.log('用户点击菜单,跳转到其他链接')}}//将最终回复消息内容添加到options中options.content = content;//将最终的xml数据返回出去return template(options)}
对于代码的解释
这里我们使用了引入的模板template
,点击 定义了options
变量,这个变量就是所有种类的回复消息的共同内容不同的内容,用if判断语句来进行判断了他是一个函数,会根据不同的类型的消息返回不同的模板事件的消息模板
因为触发事件回复的消息模板与自动回复的消息模板差不多,我就一起写了出来使用恢复函数
这里就是使用
reply.js
暴露出的函数
我们打卡auth.js
这个文件,删除不需要的结构,写上如下的代码
user_data = formatMsg(user_data)// 使用reply.jsconst replyMessage = await reply(user_data)console.log(replyMessage)// 将消息结构发送到微信服务器res.send(replyMessage)
这个时候,我们再测试一下,就会发现,成功了