手机版

用NodeJs开发微信微信官方账号(3)微信事件互动示例

时间:2021-09-17 来源:互联网 编辑:宝哥软件园 浏览:

微信微信官方账号有个规定。一旦打开开发人员模式,其他常规功能必须通过接口调用来完成。例如,自定义菜单功能必须通过发送帖子请求来生成。本章讨论nodejs如何通过关注取消关注的全过程来与微信互动。这些功能的入口点是你在测试微信官方账号中填写的URL(替换为下面的/log in/微信)。

事件交互

关注微信微信官方账号后,微信会用一条xml信息调用你的界面/登录/微信。首先,你需要获取一些签名,通过加密和排序来比较它们与你填写的TOKEN是否一致。如果它们一致,分析xml。解析xml时,节点必须首先引用该模块。因此,首先介绍了xml解析模块。

//xml解析模块var XMLJS=require(' xml2js ');//parse,将xml解析成jsonvar parser=new XMLJS。parser();//将json重新组织成xmlvar builder=new XMLJS。builder();通过收听req的数据获取微信发送的xml包。以下是新用户关注微信官方账号后,微信发送到你后台界面的xml包数据(/yourapi在上一篇文章中提到过)。解析后,他的结构如下:

Tousername:收件人[这里是公共微信号]。

from username:sender[这是用户openid]。

CreateTime:发送时间。

Msgtype:消息类型[事件、文本、图像等。].

事件:消息的名称[注意这里]。

Eventkey:用户定义的键,可以在设置网页时自定义。

以上是用户关注后微信发送到你界面的数据包。在过去,对我们有用的是用户名,也就是相关人员的公开id。当我们关注的时候,可以获得微信(https://api.weixin.qq.com/cgi-bin/user/info提供的具体界面?).access _ token=access _ token OpenID=OpenID lang=zh _ cn)获取用户的头像、性别、昵称等信息,为你的app构建一个可靠的数据库。

代码实现

//微信事件推送的入口app.post('/yourapi ',函数(请求,资源,下一个){//获取参数var查询=req.query//签名定义变量签名=query.signature//输出的字符,你填写的query.echostr//时间戳var时间戳=查询['时间戳'];//随机字符串var nonce=query . nonce var oriArray=new Array();oriArray[]=nonce;oriArray[]=时间戳;oriArray[]=appconfig。令牌;//排序参数奥瑞瑞。sort();var original=oriArray[]oriArray[]oriArray[];//加密var scyptoString=sha(原文);//判断是否与你填写代币相等if(signature==SCYPTString){//获取可扩展标记语言数据req.on('data ',function(data) {//将可扩展标记语言解析解析器。ParseString(数据。ToString()),函数(err,result){ var body=result。XMLvar messageType=body .MsgType[];//用户点击菜单响应事件if(messageType==' event '){ var event name=body .事件[];(事件函数[事件名]| |函数(){ })(body,req,RES);//自动回复消息} else if(messageType==' text '){ event函数。回应消息(正文、RES);//第一次填写统一资源定位器时确认接口是否有效} else { RES . send(echostr);}});});} else { //认证失败,非法操作res.send('坏令牌!');}});//微信客户端各类回调用接口var EventFunction={//关注订阅:函数(结果、请求、res) {//存入openid通过微信的接口获取用户的信息同时存入数据库。},//注销取消订阅:函数(openid,req,res) {//删除对应id},//打开某个网页视图:函数(){//根据需求,处理不同的业务},//自动回复响应ws:函数(正文,res) {//组装微信需要的jsonvar XML={ XML : { Tousername : }正文。来自用户名,来自用户名:正文。使用用户名,创建时间:新日期(),MsgType: '文本,内容: '编辑@您想说的话,我们可以收到'}};var reciviMessage=body .Content[]if(/^\@.*/.测试(recvimessage)){ XML。XML。内容='已经收到您的建议,会及时处理!'}br/将json转为XML=构建器。BuildObject(XML);br/发送给微信发送(可扩展标记语言);}}此处,适合采用射流研究…设计模式中的策略模式,在订阅方法里面写上你自己的业务,通过发送带openid参数的请求,可以在用户关注微信号的时候将其几本资料存入数据库,并且建立会话。这样在用户接下来打开你的网页的时候就无需再次认证,只需要比对openid然后查询数据库就行了。

版权声明:用NodeJs开发微信微信官方账号(3)微信事件互动示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。