我们需要写一个解析XML的异步函数,返回一个Promise对象
function parseXML(xml) {
return new Promise((resolve, reject) => {
xml2js.parseString(xml, { trim: true, explicitArray: false, ignoreAttrs: true }, function (err, result) {
if (err) {
return reject(err)
}
resolve(result.xml)
})
})
}接着调用parseXML方法,并打印出结果
...
const formatted = await parseXML(xml)
console.log(formatted)
return ctx.body = 'success'
一切正常的话*(实际开发中你可能会遇到各种问题)*,命令行将打印出如下JSON数据
{ ToUserName: 'gh_9d2d49e7e006',
FromUserName: 'oBp2T0wK8lM4vIkmMTJfFpk6Owlo',
CreateTime: '1516941086',
MsgType: 'text',
Content: 'JavaScript之禅',
MsgId: '6515212354839473910' }
到此,我们就能处理微信接收到的消息了,你可以自己测试关注、取消关注、发送各种类型的消息看看这个类型的消息所对应的XML数据格式都是怎么样的
三、回复消息
当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。严格来说,发送被动响应消息其实并不是一种接口,而是对微信服务器发过来消息的一次回复。
3.1 被动回复用户消息数据格式
前面说了交互的数据格式为XML,接收消息是XML的,我们回复回去也应该是XML。
微信公众账号回复用户文本消息时的XML数据格式如下所示:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA
]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>
微信公众账号回复用户图片消息时的XML数据格式如下所示:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA
]></MsgType>
<Image><MediaId><![CDATA[media_id]]></MediaId></Image>
</xml>
篇幅所限就不一一列举了,请查阅【微信公众平台开发文档】









