node.js微信公众平台开发教程
如何利用nodejs实现微信公众平台的开发?
别的不多,简单介绍一下微信公众平台的基本原理。
微信服务器相当于转发服务器,终端(手机、Pad等。)向微信服务器发起请求,然后将请求转发给定制服务(下面是我们的具体实现)。服务处理完毕后,转发给微信服务器,微信服务器将具体响应回复给终端;通信协议:HTTP;数据格式为:XML。具体流程如下图所示:
事实上,我们需要做的是响应HTTP请求。对于具体的请求内容,要按照具体的XML格式进行解析,处理后按照具体的XML格式返回。
平台注册
要完成微信公众平台的开发,需要注册一个微信公众平台账号。注册步骤如下:在官网和https://mp.weixin.qq.com/,打开微信公众平台,点击“立即注册”。
然后根据提示,填写基本信息,激活邮箱,选择类型,注册信息和微信官方账号信息,完成注册。
注册完成后,我们会对微信官方账号进行一些基本设置。登录微信官方账号,找到【微信官方账号设置】,然后设置头像等信息。
Nodejs环境建设。
我们需要在公共网络上找到一个服务器,这样我们就可以启动nodejs环境。启动环境后,我们可以通过设置访问地址来接收微信服务器发送的消息,也可以向微信服务器发送消息。
nodejs安装在公网的服务器上之后,我们需要安装nodejs使用的一些模块,比如express、node-xml、jssha等等。它可以通过npm命令安装。
我们使用nodejs向微信服务器发送和接收消息,并向微信服务器验证签名。
Nodejs环境已经在我们右边的编辑环境中为学生安装了。在接下来的内容中,我们将为学生实现微信服务器的签名认证。
创建express框架。
我们在前面的课程中安装了express模块,并在正确的环境中创建了一个名为app.js的文件。现在我们在这个文件中完成了express框架。以下代码:
var express=require(' express ');var path=require(' path ');var app=express();server=require('http ')。服务器(app);app . set(' view ',_ _ dirname);//设置viewapp.set ('viewengine ',' html ');app.engine('。“html”,必选(‘ejs’)。_ _快递);要求('。/index ')(app);//路由配置文件server.listen (80,function(){ console . log(' app start,port 80,'));});然后添加一个名为test.html的文件。写下以下内容。
!键入html headlang=' en ' metacarset=' utf-8 ' title王徽之/title/headsdydiv %=issueccess %/div/body/html我们将添加一个名为index.js的文件来实现我们的路径。在编辑环境中点击添加文件按钮,添加一个文件,然后我们编写如下代码,其中GET请求用于验证配置的URL的有效性,POST请求用于处理微信消息。
module . exports=function(app){ app . get('/',function(req,res){res.render('test ',{ issucess: ' success ' })});app.get('/interface ',function(req,RES){ });app.post('/interface ',function(req,RES){ });}这就完成了我们需要的express框架。当然,我们也可以添加我们需要的公共文件夹和中间件。保存文件,单击[提交运行],然后单击[访问测试]进行尝试。写下访问测试的地址,我们将在下一节中使用。
微信服务器配置。
我们登录微信公众平台,找到开发者模式下的基本配置,然后修改服务器配置。如图所示:
首先,URL要填写我们在公网上安装的nodejs的数据收发路径。我们可以在上一节填写【准入测试】的地址,然后添加对应的路由。
令牌应该与我们的自定义服务器令牌一致。完成后,您可以单击提交。在提交之前,我们启动app.js(点击提交运行)。这样,我们就可以根据我们的路由匹配来验证签名是否有效。
配置完成后,请确保启用配置。
网站访问
公众平台用户提交信息后,微信服务器会向填写好的网址发送GET请求,其中有四个参数:
参数签名微信加密签名时间戳随机数echostr随机字符串。
开发人员通过验证签名来验证请求(下面有一些验证方法)。如果确认GET请求来自微信服务器,请原样返回echostr参数内容,访问才会生效,否则访问失败。
Signature将开发人员填写的令牌参数与请求中的时间戳参数和nonce参数相结合。
加密/验证过程:
1.按照字典顺序对令牌、时间戳和随机数进行排序;2.将三个参数字符串拼接成一个字符串进行sha1加密;3.开发者得到的加密字符串可以和签名进行比对,表示请求来自微信。参数排序
首先,我们确认请求是来自微信服务器的get请求,这样我们就可以在index.js文件中添加代码。然后在app.get ('/interface ',function (req,RES){ });加入的功能。
要获取每个参数的值,请执行以下代码:
var token=' weixinvar signature=req . query . signature;var时间戳=req . query . timestamp;var echostr=req . query . echostr;var nonce=req . query . nonce;这里,我们将令牌设置为与微信服务器中设置的令牌一致。
然后对令牌、时间戳和随机数进行排序,如下所示:
var oriArray=new Array();oriArray[0]=nonce;oriArray[1]=时间戳;oriArray[2]=token;oriarray . sort();这就完成了排序。
参数加密
在前一节中,我们已经对参数进行了排序,然后在这一节中,我们将参数组成一个字符串用于SH-1加密。jssha模块是在加密之前使用的,应该在我们的文件中引用。
var jsSHA=require(' jsSHA ');在上一课中,我们对参数进行了排序,并将它们存储在一个数组中。我们可以通过连接方法生成一个字符串,如下面的代码所示:
var original=oriarray . join(');最后,按如下方式加密数据:
var jsSHA=require(' jsSHA ');var shaObj=new jsSHA(原文,‘TEXT’);var SCyptString=shaobj . Gethash(' SHA-1 ',' HEX ');好了,我们已经生成了我们需要的签名字符串scyptoString。
签名比较
我们已经得到了我们想要的签名字符串scyptoString,然后我们可以将其与来自微信服务器的签名进行比较。如果比较通过,我们可以接收和发送消息。
If(signature==scyptoString){ //验证成功} else {//验证失败}本文已整理成《JavaScript微信开发技巧汇总》,欢迎大家学习阅读。
想推荐一个现在备受关注的微信小程序教程:《微信小程序开发教程》边肖为大家精心安排,希望喜欢。
以上就是本文的全部内容,希望对大家的学习有所帮助。
版权声明:node.js微信公众平台开发教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。