nodejs 微信开发相关,抓取相关

来源:互联网 发布:ubuntu挂起 编辑:程序博客网 时间:2024/05/21 06:29


真正项目中用到的模块:

1.https://github.com/scottkiss/nodegrass nodejs的抓取插件,解决了gbk编码问题

2.https://github.com/LearnBoost/mongoose nodejs的monggodb的orm框架。

3.http://olado.github.io/doT/ 项目中前端和后端都是用的一个前端数据绑定模板

4.我们参考的是 通过《nodeclub项目源码来讲解如何做一个nodejs + express + mongodb项目》 

    http://segmentfault.com/blog/6174/1190000000478457 

.网络资源

 Heroku 支持部署nodejs  MongoHQ是一个托管MongoDB的第三方平台


nodejs开源项目: 

 关于微信开放平台的申请过程,请查看官方地址:http://mp.weixin.qq.com/cgi-bin/indexpage?t=wxm-callbackapi-doc&lang=zh_CN

现在贴出来如何处理消息的,XML的解析使用了node-xml这个模块 ,使用命令:npm install node-xml 安装.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
varcrypto=require("crypto");
varxml=require("./node-xml/lib/node-xml.js");
varmessageSender=require("./messageSender.js");
functionisLegel(signature,timestamp,nonce,token){
    vararray=newArray();
    array[0]=timestamp;
    array[1]=nonce;
    array[2]=token;
    array.sort();
    varhasher=crypto.createHash("sha1");
    varmsg=array[0]+array[1]+array[2];
    hasher.update(msg);
    varmsg=hasher.digest('hex');
    if(msg==signature){
        returntrue;
    }else{
        returnfalse;
    }
}
 
functionprocessMessage(data,response){
varToUserName="";
varFromUserName="";
varCreateTime="";
varMsgType="";
varContent="";
varLocation_X="";
varLocation_Y="";
varScale=1;
varLabel="";
varPicUrl="";
varFuncFlag="";
 
vartempName="";
varparse=newxml.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;
        }elseif(tempName=="Location_X"){
            Location_X=cdata;
        }elseif(tempName=="Location_Y"){
            Location_Y=cdata;
        }elseif(tempName=="Scale"){
            Scale=cdata;
        }
         
         
    });
     
    cb.onCdata(function(cdata){
         
        if(tempName=="ToUserName"){
            ToUserName=cdata;
        }elseif(tempName=="FromUserName"){
            FromUserName=cdata;
        }elseif(tempName=="MsgType"){
            MsgType=cdata;
        }elseif(tempName=="Content"){
            Content=cdata;
        }elseif(tempName=="PicUrl"){
            PicUrl=cdata;
        }elseif(tempName=="Label"){
            Label=cdata;
        }
        console.log("cdata:"+cdata);
    });
     
    cb.onEndElementNS(function(elem,prefix,uri){
        tempName="";
    });
     
    cb.onEndDocument(function(){
        console.log("onEndDocument");
        tempName="";
        vardate=newDate();
        varyy=date.getYear();
        varMM=date.getMonth() + 1;
        vardd=date.getDay();
        varhh=date.getHours();
        varmm=date.getMinutes();
        varss=date.getSeconds();
        varsss=date.getMilliseconds(); 
        varresult=Date.UTC(yy,MM,dd,hh,mm,ss,sss);
        varmsg="";
        if(MsgType=="text"){
            msg="谢谢关注,你说的是:"+Content;
        }elseif(MsgType="location"){
            msg="你所在的位置: 经度:"+Location_X+"纬度:"+Location_Y;
        }elseif(MsgType="image"){
            msg="你发的图片是:"+PicUrl;
        }
        messageSender.sendTextMessage(FromUserName,ToUserName,CreateTime,msg,FuncFlag,response);
         
    });
});
    parse.parseString(data);
}
module.exports.isLegel=isLegel;
module.exports.processMessage=processMessage;
调用过程:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
varapp=require("express").createServer();
varwx=require('./lib/wx');
varfs=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){
 varsignature=req.query.signature;
 vartimestamp=req.query.timestamp;
 varnonce=req.query.nonce;
 varechostr=req.query.echostr;
 varcheck=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){
 varresponse=res;
 varformData="";
 req.on("data",function(data){
 formData+=data;
 });
 req.on("end",function(){
 wx.processMessage(formData,response);
 });
});
app.listen(3000);
 
 <div>
 
 
 </div>

要是想玩一下的话,可以打开关注,添加我这个账号:http://wxtest.cloudfoundry.com/

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


0 0
原创粉丝点击