微信公众号自动回复用户信息

首先实现这个功能有2种方法:

1、微信公众号管理员直接在后台设置自动回复(这个只能设置固定的回复);

2、如果我们需要根据用户发送的消息查询动态的数据并回复,就只能通过代码实现自定义的回复了;

测试:我们首先需要一个测试微信测试账号(微信测试账号看开通请看:申请微信测试账号

其次我们需要有个能让外网访问的地址(我这边使用的是内网穿透工具,natapp,详细请点击这边

1、我们已经通过natapp将地址进行了如下映射:http://g5awc9.natappfree.cc -> 127.0.0.1:8084

2、配置服务器地址

接下来我们需要在微信管理平台中配置这个域名(官网教程https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html):

node代码实现如下:

import sha1 from 'node-sha1';

let token = 'wechat';
const {signature, timestamp, nonce, echostr} = req.query;
// 将token、timestamp、nonce三个参数进行字典序排序
const arrSort = [token, timestamp, nonce];
arrSort.sort();

// 将三个参数字符串拼接成一个字符串进行sha1加密,npm install --save sha1
const str = arrSort.join('');
const shaStr = sha1(str);

// 获得加密后的字符串可与signature对比,验证标识该请求来源于微信服务器
if (shaStr === signature) {
// 确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效
   res.send(echostr);
} else {
 // 否则接入失败。
   res.send('no');
}

3、定义自定义回复

当客户跟微信公众号交互时我们,微信会将消息转发到我们上面配置的服务器上,用户消息(post请求,认证:get请求)官网说明:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html

我们要解析微信的数据,我们需要安装这个包npm install xml2js

let dataStr = '';
req.on('data', function (str) {
dataStr = dataStr + str;
}).on('end', function () {
    xml2js.parseString(dataStr, {trim: true}, (err, content) => {
         res.send(JsonToXml(content.xml));
     });
});

 收到的文本消息示例(content.xml)

图片消息表示例(content.xml):

 这边暂时做的一个自动回复,直接回复用户发送的信息:(只处理了文本信息与图片信息,其他的类似)

let JsonToXml = function (json) {
    if (json.MsgType.join('') === 'text') { // 文本
        return `<xml>
  <ToUserName><![CDATA[${json.FromUserName[0]}]]></ToUserName>
  <FromUserName><![CDATA[${json.ToUserName[0]}]]></FromUserName>
  <CreateTime>${json.CreateTime[0]}</CreateTime>
  <MsgType><![CDATA[${json.MsgType}]]></MsgType>
  <Content><![CDATA[${json.Content.join(',')}]]></Content>
</xml>`;
    } else if (json.MsgType.join('') === 'image') { // 图片
        return `<xml>
  <ToUserName><![CDATA[${json.FromUserName[0]}]]></ToUserName>
  <FromUserName><![CDATA[${json.ToUserName[0]}]]></FromUserName>
  <CreateTime>${json.CreateTime[0]}</CreateTime>
  <MsgType><![CDATA[${json.MsgType}]]></MsgType>
  <Image>
    <MediaId><![CDATA[${json.MediaId.join('')}]]></MediaId>
  </Image>
</xml>`;
    }
};

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值