微信公众号 - 消息管理
公众号可以接收用户发送的各类消息,并进行自动回复。消息以XML格式在微信服务器与开发者服务器间传递。
消息类型
| 类型 | MsgType | 说明 |
|---|---|---|
| 文本消息 | text | 用户发送的文字内容 |
| 图片消息 | image | 用户发送的图片,包含PicUrl和MediaId |
| 语音消息 | voice | 用户发送的语音,开启识别后含Recognition字段 |
| 视频消息 | video | 用户发送的视频,包含MediaId和ThumbMediaId |
| 位置消息 | location | 用户发送的地理位置,包含经纬度 |
| 事件推送 | event | 关注/取关、菜单点击、扫码等事件 |
被动回复消息 - 处理示例
const xml2js = require('xml2js')
app.post('/wechat', async (req, res) => {
const xmlData = await getRawBody(req)
const { xml } = await xml2js.parseStringPromise(xmlData)
const msgType = xml.MsgType[0]
const fromUser = xml.FromUserName[0]
const toUser = xml.ToUserName[0]
let replyContent = '感谢您的消息!'
if (msgType === 'text') {
const content = xml.Content[0]
if (content.includes('帮助')) {
replyContent = '回复以下关键词获取信息:\n1. 天气\n2. 新闻\n3. 签到'
}
} else if (msgType === 'event') {
const event = xml.Event[0]
if (event === 'subscribe') {
replyContent = '欢迎关注!回复"帮助"查看功能列表'
}
}
const reply = `<xml>
<ToUserName><![CDATA[${fromUser}]]></ToUserName>
<FromUserName><![CDATA[${toUser}]]></FromUserName>
<CreateTime>${Math.floor(Date.now() / 1000)}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${replyContent}]]></Content>
</xml>`
res.type('application/xml')
res.send(reply)
})