悲剧!写了半小时的博文,没有自动保存的功能,手冻僵了,具体过程不写了,有问题给我留言吧!杭州的冬天太冷了。@红薯,强烈建议自动保存功能啊!
关于微信开放平台的申请过程,请查看官方地址: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/
或者用微信扫描这个二维码: