教程: nodejs 做微信公众号开发,回复 xml 消息
首先需要你的后台跟服务器已经可以建立连接,这个不再冗述看官方教程就好 接入指南 。此篇介绍的是如何获取用户发来的信息,并回复它。
一、接收 xml 信息内容
我用的是 nodejs 的 express
后台框架,这个用什么都无所谓哈。
我要说的是,它的 xml 信息内容既不在 req.body
中,也不在 req.query
中,也不在 req.params
中,这个看了别人的文章才知道它在这:
let xmlData = ''
req
.on('data', data => {
xmlData += data.toString()
/* xmlData =
`<xml><ToUserName><![CDATA[gh_44543146fe48]]></ToUserName>
<FromUserName><![CDATA[oU9gc6M5bCiuL5rSfsCRn5djrtm0]]></FromUserName>
<CreateTime>1673838891</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[这]]></Content>
<MsgId>23963610449099327</MsgId>
</xml>`*/
})
.on('end', () => {
let receiveMsg = JSON.parse(xml2json.toJson(xmlData))
})
你要做的判断逻辑放到 req.on('end')
中即可。
这里需要再提一点,需要使用 xml2json
插件,用于将 xml 转成 json 数据,好获取其内容,具体用法看这 xml2json usage。之后从微信服务器获取到数据就是这样:
二、回复消息
在向微信服务器回复信息的时候需要严格按照它的格式来,所以这里就只能使用 模板语法了。发送的时候将接收和发送者的位置调换即可。
.on('end', () => {
let receiveMsg = JSON.parse(xml2json.toJson(xmlData))
console.log('received msg: ',receiveMsg)
let responseMsg = `<xml>
<ToUserName><![CDATA[${receiveMsg.xml.FromUserName}]]></ToUserName>
<FromUserName><![CDATA[${receiveMsg.xml.ToUserName}]]></FromUserName>
<CreateTime>${new Date().getTime()}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[这是后台回复的内容]]></Content>
</xml>`
console.log(responseMsg)
res.send (responseMsg)
})
结果就是: