Koa2微信公众号开发之消息管理(5)
现在就可以使用我们写好的模板回复XML消息了
... const formatted = await parseXML(xml) console.log(formatted) let info = {} let type = 'text' info.msgType = type info.createTime = new Date().getTime() info.toUsername = formatted.FromUserName info.fromUsername = formatted.ToUserName info.content = 'JavaScript之禅' return ctx.body = compiled(info)
我们可以把这个回复消息的功能写成一个函数
function reply (content, fromUsername, toUsername) { var info = {} var type = 'text' info.content = content || '' // 判断消息类型 if (Array.isArray(content)) { type = 'news' } else if (typeof content === 'object') { if (content.hasOwnProperty('type')) { type = content.type info.content = content.content } else { type = 'music' } } info.msgType = type info.createTime = new Date().getTime() info.toUsername = toUsername info.fromUsername = fromUsername return compiled(info) }
在回复消息的时候直接调用这个方法即可
... const formatted = await parseXML(xml) console.log(formatted) const content = 'JavaScript之禅' const replyMessageXml = reply(content, formatted.ToUserName, formatted.FromUserName) return ctx.body = replyMessageXml
现在为了测试我们所写的这个功能,来实现一个【学我说话】的功能:
回复音乐将返回一个音乐类型的消息,回复文本图片,语音,公众号将返回同样的内容,当然了你可以在这个基础上进行各种发挥。
.... const formatted = await parseXML(xml) console.log(formatted) let content = '' if (formatted.Content === '音乐') { content = { type: 'music', content: { title: 'Lemon Tree', description: 'Lemon Tree', musicUrl: 'http://mp3.com/xx.mp3' }, } } else if (formatted.MsgType === 'text') { content = formatted.Content } else if (formatted.MsgType === 'image') { content = { type: 'image', content: { mediaId: formatted.MediaId }, } } else if (formatted.MsgType === 'voice') { content = { type: 'voice', content: { mediaId: formatted.MediaId }, } } else { content = 'JavaScript之禅' } const replyMessageXml = reply(content, formatted.ToUserName, formatted.FromUserName) console.log(replyMessageXml) ctx.type = 'application/xml' return ctx.body = replyMessageXml
nice,到此时我们的测试号已经能够根据我们的消息做出相应的回应了
本篇再上一节的代码基础上做了一些优化,并重点讲解微信公众号的消息交互,最后实现了个【学我说话】的小功能。下一篇,我们将继续补充消息管理相关的知识。最后再说一句:看文档 😉