在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ nodejs微信公眾號開發(fā),無法自動(dòng)回復(fù)消息的問題

nodejs微信公眾號開發(fā),無法自動(dòng)回復(fù)消息的問題

能拿到用戶發(fā)送給公眾號的消息,但通過res.end()發(fā)送回復(fù)的xml數(shù)據(jù)時(shí)失敗,即用戶無法收到后臺回復(fù)的消息。公眾號顯示出現(xiàn)故障。如果將代碼中的res.setHeader一行注釋取消,會(huì)出現(xiàn) Can't set headers after they are sent.的錯(cuò)誤?

req.on('end', function(){
    util.parseXMLAsync(postData)
    .then(result => {
        console.log(result)
        var now = new Date().getTime()
        if(result.MsgType === 'event'){
            if(result.Event === 'subscribe'){
                result.Content = '終于等到你的訂閱~'
            }
        }
        // res.setHeader('Content-Type', 'text/xml')
        var response = `<xml>
                        <ToUserName>< ![CDATA[${result.FromUserName}] ]></ToUserName>
                        <FromUserName>< ![CDATA[${result.ToUserName}] ]></FromUserName>
                        <CreateTime>${now}</CreateTime>
                        <MsgType>< ![CDATA[text] ]></MsgType>
                        <Content>< ![CDATA[${result.Content}] ]></Content>
                    </xml>`
        res.end(response)
    })
})

result將接收到的xml轉(zhuǎn)為json后的結(jié)果

回答
編輯回答
青瓷

關(guān)于上一個(gè)回答里說的要用writeHead,我這樣試過,并沒遇到問題

const http = require('http');

let server = http.createServer(function (req, res) {
    let result = {
        FromUserName: 'weixin',
        ToUserName: 'segment',
        Content: 'xxxx'
    }, now = Date.now();

    res.setHeader('Content-Type', 'text/xml')
    var response = `<xml>
            <ToUserName><![CDATA[${result.FromUserName}]]></ToUserName>
            <FromUserName><![CDATA[${result.ToUserName}]]></FromUserName>
            <CreateTime>${now}</CreateTime>
            <MsgType><![CDATA[text]]></MsgType>
            <Content><![CDATA[${result.Content}]]></Content>
        </xml>`
    res.end(response)
}).listen(3001);
2017年12月9日 06:54
編輯回答
避風(fēng)港

感謝各位的回答,問題已經(jīng)解決。
這個(gè)問題實(shí)際上是由于response這個(gè)xml字符串中含有空格,就是< !] ],把這些空格全部去除掉可以正?;貜?fù)。
然而這個(gè)xml字符串是從官方文檔中拷貝下來的,也就是說官方文檔中的xml字符串是含有空格的。
再關(guān)于res.end(response)這個(gè)問題,實(shí)際上已經(jīng)把xml字符串發(fā)送給微信服務(wù)器了,但由于存在空格,微信服務(wù)器認(rèn)為這不是一個(gè)正確的回復(fù),所以會(huì)出錯(cuò)。

2018年1月22日 11:38
編輯回答
墨小羽

老生常談的問題,node異步編程,修改header請使用writeheader

2017年3月8日 03:14