node.js微信小程序配置消息推送的实现
开发微信小程序时,有消息推送,其说明如下。
消息推送的具体内容是下面的URL:https://developers . weixin . QQ.com/mini program/dev/framework/server-ability/message-push . html,他介绍的是OK,也就是我在这里改成了节点代码。
消息推送
启用并设置消息推送配置后,用户发送给小程序的消息和开发者需要的事件推送会通过微信转发到服务器地址。
在微信小程序的首页开发中,在开发设置中,在微信的官网中,介绍还可以,php代码几乎可以理解是什么意思,但是没有告诉我们在界面中返回echostr参数,导致我测试了很久Token验证失败。
写下学习记录,方便以后的人遇到同样的问题,以后再咨询。
这个里面的url服务器地址是你自己的地址(上面那个是我随便写的),后面是你自己的接口,比如我的是/token。当您单击提交时,您将在服务器中找到以下get请求。
万一有人看不清楚,我这里用代码重写一下。
GET /checkPushMsg?signature=db6e0c 25 b 7743d 8 DD 7 ebfd a1db 6 c 742 a 762 a 2 f 37 echostr=1712804002525306855 timestamp=1549949926 nonce=982754662 200 1.321 ms-46
微信官网的每个参数也很详细。
开发人员通过验证签名来验证请求(下面有一些验证方法)。如果确认GET请求来自微信服务器,请原样返回echostr参数内容,那么访问就会生效,成为开发者成功,否则访问就会失败。加密/验证过程如下:
按照字典顺序对令牌、时间戳和随机数进行排序,将三个参数的字符串拼接成一个字符串,进行sha1加密。开发者得到的加密字符串可以和签名进行比对,表示请求来自微信,然后就会被访问,成为开发者。
用于验证签名的node.js示例代码:
/*验证服务器推送开发者提交的url地址信息后,微信服务器会向填写的服务器URL发送GET请求。GET请求携带以下参数:@params signature微信加密签名,结合开发者填写的令牌参数和请求中的时间戳参数。Nonce参数@ params timestamp timestamp @ params nonce随机数@ params echostar随机字符串*/exports.check _ push=(req,RES)={ console . log(req . query);让signature=req.query.signature,timestamp=req.query.timestamp,nonce=req.query.nonce,echostr=req . query . echostr;让a=crypto.createHash('sha1 ')。更新([pushToken,时间戳,nonce]。排序()。连接(“”)。摘要(' hex ');//这里的pushToken是上面配置的token if(a==signature){//如果验证成功,将原封不动地返回RES . send(echostr);}else{ res.send({ status: 400,data : ' check msg error ' })} };上面已经提到了遇到的两个问题,我们在这里再来说说。
其中之一是按照字典顺序对令牌、时间戳和随机数这三个参数进行排序。当时我想自己写一个方法。写了很久,发现有点不舒服。于是我在网上找了点东西,发现那个数组的排序方式没有传递参数,是默认的字符编码和排序,所以很简单。加密直接用于加密模块。
另一个是微信没有告诉我们退回echostr,尽管他是这个意思。这样配置就成功了。
如果你遇到这个问题,看完我的文章,解决了,我会很开心的。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:node.js微信小程序配置消息推送的实现是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。