1.首先需要在公眾號的開發(fā)者中心啟用服務(wù)器配置
exports.wechat = function (req, res) {
var echostr, nonce, signature, timestamp;
signature = req.query.signature;
timestamp = req.query.timestamp;
nonce = req.query.nonce;
echostr = req.query.echostr;
if(check(timestamp,nonce,signature,"weixin")){
return res.send(echostr);
}else{
return res.end();
}
};
function check(timestamp, nonce, signature ,token) {
var currSign, tmp;
tmp = [token, timestamp, nonce].sort().join("");
currSign = crypto.createHash("sha1").update(tmp).digest("hex");
return currSign === signature;
};
2.如果有用戶發(fā)送消息給公眾號体箕,微信服務(wù)器就會發(fā)送一個post請求到服務(wù)器配置里的URL,只要接收post過來的xml內(nèi)容再以xml格式返回就可以實(shí)現(xiàn)消息的接收和回復(fù)
exports.wechatdo = function (req, res) {
var _da;
req.on("data",function(data){
/*微信服務(wù)器傳過來的是xml格式的香到,是buffer類型,因?yàn)閖s本身只有字符串?dāng)?shù)據(jù)類型序六,所以需要通過toString把xml轉(zhuǎn)換為字符串*/
_da = data.toString("utf-8");
});
req.on("end",function(){
//console.log("end");
var ToUserName = getXMLNodeValue('ToUserName',_da);
var FromUserName = getXMLNodeValue('FromUserName',_da);
var CreateTime = getXMLNodeValue('CreateTime',_da);
var MsgType = getXMLNodeValue('MsgType',_da);
var Content = getXMLNodeValue('Content',_da);
var MsgId = getXMLNodeValue('MsgId',_da);
console.log(ToUserName);
console.log(FromUserName);
console.log(CreateTime);
console.log(MsgType);
console.log(Content);
console.log(MsgId);
var xml = '<xml><ToUserName>'+FromUserName+'</ToUserName><FromUserName>'+ToUserName+'</FromUserName><CreateTime>'+CreateTime+'</CreateTime><MsgType>'+MsgType+'</MsgType><Content>'+Content+'</Content></xml>';
res.send(xml);
});
};
function getXMLNodeValue(node_name,xml){
var tmp = xml.split("<"+node_name+">");
var _tmp = tmp[1].split("</"+node_name+">");
return _tmp[0];
}