微信开发的特点:
1.post请求 (一定要注意,这里和配置域名的时候不一样,配置域名是get请求)
2.数据包是xml格式的
3.你给微信返回的数据也是xml格式的
var parseString = require('xml2js').parseString;//引入xml2js包
/**
* 处理微信post消息请求
*/
router.post('/', function (req, res) {
try{
var buffer = [];
//监听 data 事件 用于接收数据
req.on('data', function (data) {
buffer.push(data);
});
//监听 end 事件 用于处理接收完成的数据
req.on('end', function () {
//输出接收完成的数据
parseString(Buffer.concat(buffer).toString('utf-8'),{explicitArray : false},function(err,result){
if(err){
//打印错误信息
console.log(err);
}else{
//打印解析结果
console.log(result);
result = result.xml;
var toUser = result.ToUserName; //接收方微信
var fromUser = result.FromUserName;//发送仿微信
if(result.Event==='subscribe'){
//回复消息
var xml=this.returntext(fromUser,toUser,'欢迎关注公众号,hahhh');
console.log(xml)
res.send(xml)
}else{
var xml=this.returntext(fromUser,toUser,'您好');
console.log(xml)
res.send(xml)
} }
})
});
}catch(err){
console.log(err)
}
})
//回复文本消息
function returntext(toUser, fromUser, content){
var xmlContent = "<xml><ToUserName><![CDATA["+ toUser +"]]></ToUserName>";
xmlContent += "<FromUserName><![CDATA["+ fromUser +"]]></FromUserName>";
xmlContent += "<CreateTime>"+ new Date().getTime() +"</CreateTime>";
xmlContent += "<MsgType><![CDATA[text]]></MsgType>";
xmlContent += "<Content><![CDATA["+ content +"]]></Content></xml>";
return xmlContent;
}