微信公众平台NodeJs开发之路--消息处理

    悲剧!写了半小时的博文,没有自动保存的功能,手冻僵了,具体过程不写了,有问题给我留言吧!杭州的冬天太冷了。@红薯,强烈建议自动保存功能啊!

    关于微信开放平台的申请过程,请查看官方地址: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/

或者用微信扫描这个二维码:

转载于:https://my.oschina.net/fengcunhan/blog/97367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值