悲剧!写了半小时的博文,没有自动保存的功能,手冻僵了,具体过程不写了,有问题给我留言吧!杭州的冬天太冷了。@红薯,强烈建议自动保存功能啊!
关于微信开放平台的申请过程,请查看官方地址:http://mp.weixin.qq.com/cgi-bin/indexpage?t=wxm-callbackapi-doc&lang=zh_CN
现在贴出来如何处理消息的,XML的解析使用了node-xml这个模块 ,使用命令:npm install node-xml 安装.
var crypto=require("crypto");
var xml=require("./node-xml/lib/node-xml.js");
var messageSender=require("./messageSender.js");
function isLegel(signature,timestamp,nonce,token){
var array=new Array();
array[0]=timestamp;
array[1]=nonce;
array[2]=token;
array.sort();
var hasher=crypto.createHash("sha1");
var msg=array[0]+array[1]+array[2];
hasher.update(msg);
var msg=hasher.digest('hex');
if(msg==signature){
return true;
}else{
return false;
}
}
function processMessage(data,response){
var ToUserName="";
var FromUserName="";
var CreateTime="";
var MsgType="";
var Content="";
var Location_X="";
var Location_Y="";
var Scale=1;
var Label="";
var PicUrl="";
var FuncFlag="";
var tempName="";
var parse=new xml.SaxParser(function(cb){
cb.onStartElementNS(function(elem,attra,prefix,uri,namespaces){
tempName=elem;
});
cb.onCharacters(function(chars){
chars=chars.replace(/(^\s*)|(\s*$)/g, "");
if(tempName=="CreateTime"){
CreateTime=chars;
}else if(tempName=="Location_X"){
Location_X=cdata;
}else if(tempName=="Location_Y"){
Location_Y=cdata;
}else if(tempName=="Scale"){
Scale=cdata;
}
});
cb.onCdata(function(cdata){
if(tempName=="ToUserName"){
ToUserName=cdata;
}else if(tempName=="FromUserName"){
FromUserName=cdata;
}else if(tempName=="MsgType"){
MsgType=cdata;
}else if(tempName=="Content"){
Content=cdata;
}else if(tempName=="PicUrl"){
PicUrl=cdata;
}else if(tempName=="Label"){
Label=cdata;
}
console.log("cdata:"+cdata);
});
cb.onEndElementNS(function(elem,prefix,uri){
tempName="";
});
cb.onEndDocument(function(){
console.log("onEndDocument");
tempName="";
var date=new Date();
var yy=date.getYear();
var MM=date.getMonth() + 1;
var dd=date.getDay();
var hh=date.getHours();
var mm=date.getMinutes();
var ss=date.getSeconds();
var sss=date.getMilliseconds();
var result=Date.UTC(yy,MM,dd,hh,mm,ss,sss);
var msg="";
if(MsgType=="text"){
msg="谢谢关注,你说的是:"+Content;
}else if (MsgType="location"){
msg="你所在的位置: 经度:"+Location_X+"纬度:"+Location_Y;
}else if (MsgType="image"){
msg="你发的图片是:"+PicUrl;
}
messageSender.sendTextMessage(FromUserName,ToUserName,CreateTime,msg,FuncFlag,response);
});
});
parse.parseString(data);
}
module.exports.isLegel=isLegel;
module.exports.processMessage=processMessage;
调用过程:
var app=require("express").createServer();
var wx=require('./lib/wx');
var fs=require("fs");
app.get('/',function(req,response){
fs.readFile("./qrCode.jpg","binary",function(err,file){
if(err){
response.writeHead(500,{"Content-Type":"text/plain"});
response.write(err+"\n");
}else{
response.writeHead(200,{"Content-Type":"image/jpg"});
response.write(file,"binary");
}
response.end();
});
});
app.get('/wx',function(req,res){
var signature=req.query.signature;
var timestamp=req.query.timestamp;
var nonce=req.query.nonce;
var echostr=req.query.echostr;
var check=false;
check=wx.isLegel(signature,timestamp,nonce,token);//替换成你的token
if(check){
res.write(echostr);
}else{
res.write("error data");
}
res.end();
});
app.post('/wx',function(req,res){
var response=res;
var formData="";
req.on("data",function(data){
formData+=data;
});
req.on("end",function(){
wx.processMessage(formData,response);
});
});
app.listen(3000);
要是想玩一下的话,可以打开关注,添加我这个账号:http://wxtest.cloudfoundry.com/
或者用微信扫描这个二维码: