微信公众号开发之回复文本消息
2023-09-11 14:19:18 时间
这一节我们主要参照官网文档点击
注意事项
- 相关的注意事项官网中已经写好,我们还需要注意,在返回相应类型的消息的时候,xml的尖括号不能有空格
- 注意消息的发送者和接收者不要写反了
代码
我们接着在auth.js
点击下写代码,代码如下
源码
const sha1 = require("sha1")
const config = require("../config")
const { getUserDataAsync, parseXmlData, formatMsg } = require("../libs/utils")
module.exports = () => {
return async (req, res, next) => {
const { signature, echostr, timestamp, nonce } = req.query
const { token } = config
const str = [token, timestamp, nonce].sort().join("")
const sha1str = sha1(str)
if (req.method === "GET") {
// GET请求用于验证服务器的有效性
if (sha1str == signature) {
res.set("Content-Type", "text/plain");
res.send(echostr);
} else {
res.send(false)
}
} else if (req.method === "POST") {
// POST用于接收用户发送的消息
if (sha1str != signature) {
// post请求不是来源于微信
res.send("error")
return
}
// 获取微信发送的消息
const xml_data = await getUserDataAsync(req)
let user_data = await parseXmlData(xml_data)
user_data = formatMsg(user_data)
console.log(user_data);
// 恢复用户消息
let content = "what are you talking about?"
const {MsgType,Content,FromUserName,ToUserName} = user_data
console.log(Content);
if (MsgType === "text"){
// 文本类型的消息
if(Content === "1"){
content = "三打白骨精"
} else if(Content === "2"){
content = "七擒孟获"
}else if(Content.match("水")){
content = "武松打虎"
}
}
// 注意发送者和接受者
let replyMessage = `<xml>
<ToUserName><![CDATA[${FromUserName}]]></ToUserName>
<FromUserName><![CDATA[${ToUserName}]]></FromUserName>
<CreateTime>${Date.now()}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${content}]]></Content>
</xml>`
console.log(replyMessage);
// 将消息结构发送到微信服务器
res.send(replyMessage)
}
}
}
对于代码的解释
- 微信服务器向我们的服务器发动post的请求的时候还会携带
query
参数,这一块,主要用于判断post请求是否来源于微信,所以我们在接收post请求的要判断是不是来源于微信 - 使用我们写好的流式数据读取的函数对微信的请求参数进行解析,得到用户发送的消息
- 拿到用户发送的消息,我们进行对于消息的处理(不同的消息回复什么内容),就是代码中if语句
- 根据官网,回复不同类型的消息,需要不同的模板,这里只回复了文本消息,所以只写了回复文本消息的模板
replyMessage
- 最后向微信服务器发送我们的模板
测试
扫一扫测试号,我们进行测试
相关文章
- [sip]SIP多方会话消息之实例讲解
- msmq 不能正常发送消息
- 微信公众平台向特定用户推送消息
- android 消息推送
- 微信java开发之实现微信主动推送消息
- SAP Fiori Launchpad上的错误消息 - User Parameter /UI2/WD_TRKORR_CUST is not maintained
- SAP系统和微信集成的系列教程之十:如何在SAP C4C系统里直接回复消息给微信用户
- 如何打通 SAP Cloud for Customer 系统和微信公众号的双向消息通信功能
- CRM pricing的一个错误消息 Pricing error Mandatory condition Price 0PR0 is missing
- yarn install 遇到的错误消息 - Error EPERM operation not permitted, open .yarnrc
- RocketMQ学习(八):事务消息
- 使用 Angular Universal 进行服务器端渲染避免 window is not defined 的错误消息
- Angular 服务器端渲染的一个错误消息 - No provider for InjectionToken REQUEST
- Flutter 制作类似微信的消息小红点
- python之自动发送微信消息
- Python发送微信消息(文字、图片、文件)给指定好友和微信群,零基础可看懂(附源码和教程)
- Python微信公众号教程基础篇——收发文本消息
- 消息id重复引发的内存读取异常问题