美文网首页
微信公众号开发之处理用户消息方法一(二)

微信公众号开发之处理用户消息方法一(二)

作者: Tme_2439 | 来源:发表于2019-08-23 10:21 被阅读0次
在公众号对话页面与用户进行消息交互是必不可少的操作,学习一波。在上文进行了 开发者验证 后,我们在后台已经可以通过验证的接口拿到用户发送过来的消息了(post请求)。
get it

接收消息的代码如下:

router.post('/', (req, res) => {
    let xml = ''
    // req.on监听data事件,收集微信传送过来的每一个数据包
    req.on('data', chunk => xml += chunk)
    // 接收完成即触发end事件
    req.on('end', () => {
        console.log(xml)
        
        res.send('')
    })
})

//xml打印信息:
<xml>
    <ToUserName><![CDATA[gh_51541af0b45e]]></ToUserName>
    <FromUserName><![CDATA[oIQtJ1LKg4JkVnW_CACOIGazXWRw]]></FromUserName>
    <CreateTime>1566468745</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[1]]></Content>
    <MsgId>22426441405010976</MsgId>
    <Encrypt><![CDATA[2l887J/bJzaZMywNPazFYMzeMw7iKf1Z+HkHYys7raO1YCeasW13sZCRIu56vxb8X4rKjVa9sySUvSudTFRN63mZYl64cjDreeJXPGthAiGO15+ckZLBTtQT1d5S02tVZKKSHU6hxVU0oSc3qmCevWpMIOXifG+vmuAlw4SIC4b5jME9fxT3Nzh8UdtxhY88lVD97RYh4t0qc8hV0f1dQfjdscNpS7+ilqRumgEkkwFmuTh0iCw2Pha5BqOhKMQ25wAoO0pAbYSaDJ5aYkEWwZgkA23nQMt3Ivigl0AwUXe8KhyOCfIeIifVE60HnkBuMvIq8f1abBaBhA9jChoZ1PrwHcJfR5Xxk08RVoEDbZ1y7ik4gK7YjIG4KY3vN8muaXSFZdrUOdP/4WSX5dUCHWvzTOUhpNFW+mwWzMG5+vY=]]></Encrypt>
</xml>

使用xml2js库将xml文本转换为js对象

router.post('/', (req, res) => {
    let xml = ''
    // req.on监听data事件,收集微信传送过来的每一个数据包
    req.on('data', chunk => xml += chunk)
    // 接收完成即触发end事件
    req.on('end', () => {
        console.log(xml)
        xml2js(xml, (err, xmlInfo) => {
            if(err) return res.send('')
            console.log(xmlInfo)
            res.send('')
        })
    })
})

// xml打印信息:
{ xml:
   { ToUserName: [ 'gh_51541af0b45e' ],
     FromUserName: [ 'oIQtJ1LKg4JkVnW_CACOIGazXWRw' ],
     CreateTime: [ '1566469267' ],
     MsgType: [ 'text' ],
     Content: [ '1' ],
     MsgId: [ '22426448456329148' ],
     Encrypt:
      [ 'FngV/F+uel+fiFmkw7hXCiEpHgFwMq/lAx/urkCbwkgGEMJsALECIpRJ1G9HY4HEoHEqE7yZbG5qPN4oobBgrSderAE1wntmXQGNULoviY4XJFzLhyR+wBKLrqKaxyXIT3WsN2LSXPSsmrgV0cJ0VlflgIuBVjbr/2MMuHnxS3J3u1GHj2fS/9RX9PJ1jGNyKxEl5XgH2XNxsMMtDwKQ1kuxE15UJLchRsHz913v1LDsdbgzxgFtybsnaD6pQOCexYlhHgDztK5bC7UmcGPUOjM/74wOr7SMRPb1dZt/C8hSEPpbzfow6WzdwMqJVONBmYhsqWEYNvSSz/g+jlvefiiIfYNnATuEQDqzNbLt5Vh3obsPqpDTRu3P5vZWRVQFRuIXgQ+fM9ndmlQxQQz+U36aYyhQIp6IG0Y2xthk3mM=' ] } }

进一步改进,回复用户消息:

这里有一个巨坑要注意一下:ToUserName与FromUserName这两个字段注意使用场景,在我们后端开发ToUserName是接收到的FromUserName,反之FromUserName填写的是ToUserName!!!
其他坑参考链接:https://blog.csdn.net/fanrenxiang/article/details/80877600

router.post('/', (req, res) => {
    let xml = ''
    // req.on监听data事件,收集微信传送过来的每一个数据包
    req.on('data', chunk => xml += chunk)
    // 接收完成即触发end事件
    req.on('end', () => {
        xml2js(xml, (err, xmlInfo) => {
            if(err) return res.send('')
            console.log(xmlInfo)
            let {ToUserName, FromUserName, CreateTime, MsgType} = xmlInfo.xml
            console.log(ToUserName[0], FromUserName[0], parseInt(CreateTime[0]), MsgType[0])

            res.send(`
                <xml>
                    <ToUserName><![CDATA[${FromUserName[0]}]]></ToUserName>  // 巨坑
                    <FromUserName><![CDATA[${ToUserName[0]}]]></FromUserName>  // 巨坑
                    <CreateTime>${parseInt(CreateTime[0])}</CreateTime>
                    <MsgType><![CDATA[${MsgType[0]}]]></MsgType>
                    <Content><![CDATA[你好]]></Content>
                </xml>
            `)
        })
    })
})

相关文章

网友评论

      本文标题:微信公众号开发之处理用户消息方法一(二)

      本文链接:https://www.haomeiwen.com/subject/fcjosctx.html