用node.js进行微信公众平台的开发

基本原理

  用nodejs怎样来实现对微信公众平台的开发呢?html

  别的就很少说了,先来简单介绍微信公众平台的基本原理。node

  微信服务器就至关于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,而后将请求转发给自定义服务(这里就是咱们的具体实现)。服务处理完毕,而后转发给微信服务器,微信服务器再将具体响应回复到终端;通讯协议为:HTTP;数据格式为:XML。   具体的流程以下图所示:express

hubwiz

  其实,咱们须要作的事情,就是对HTTP请求,作出响应。具体的请求内容,咱们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。npm

平台注册

  要想完成对微信公众平台的开发,咱们须要注册一个微信公众平台账号。注册步骤以下:   打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“当即注册”。数组

  而后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。服务器

  在注册完成之后,咱们要对公众号进行一些基本的设置。登陆公众号,找到【公众号设置】,而后设置头像以及其它信息。微信

nodejs环境搭建

  咱们须要在公网上找一台服务器,以即可以启动咱们的nodejs的环境,启动环境后经过设置访问地址,咱们就能够接收微信服务器发送的消息了,而且咱们也能够向微信服务器发送消息了。app

  在公网的服务器中安装完成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').Server(app);
app.set('views',__dirname);    // 设置视图 
app.set('view engine', 'html'); 
app.engine( '.html', require( 'ejs' ).__express );
require('./index')(app);      //路由配置文件
server.listen(80,function(){
console.log('App start,port 80.');
});

而后再添加一个名为test.html的文件。写入如下内容

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>汇智网</title>
</head>
<body>
<div><%=issuccess%></div>
</body>
</html>

  咱们还要添加一个名为index.js的文件,来实现咱们的路由。点击编辑环境中的添加文件按钮,添加文件,而后咱们写入如下代码,其中GET请求用来验证配置的URL合法性,POST请求用来处理微信消息。

module.exports = function(app){
app.get('/',function(req,res){
res.render('test',{issuccess:"success"})
});
app.get('/interface',function(req,res){});
app.post('/interface',function(req,res){});
}

这样咱们须要的express框架就完成了,固然咱们还能够添加public公共文件夹以及咱们要用到的中间件。保存文件,点击【提交运行】,而后点击【访问测试】,去试试吧。记下访问测试的地址,咱们将在下一节中会用到该地址。

微信服务器配置##

  咱们登陆微信公众平台,在开发者模式下面找到基本配置,而后修改服务器配置。如图所示:

hubwiz

  首先URL要填写公网上咱们安装nodejs接收与发送数据的路径。咱们能够填写上节中【访问测试】的地址,而后加上对应的路由就能够了。

http://724515db515222a9efffd6b092aa955d.me.hubwiz.com/interface

上面代码是个人访问测试的地址,而后加上前面课程中的路由,同窗们要根据本身的访问测试地址与路由来填写。

  Token要与咱们自定义服务器端的token一致。填写完成之后,就能够点击提交了,在提交之前,咱们启动app.js(点击【提交运行】)。这样根据咱们的路由匹配就能够验证签名是否有效了。

  当配置完成之后,必定要启用配置。

hubwiz

网址接入

  公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,而且带上四个参数:

参数	                 描述
  signature	           微信加密签名
  timestamp	           时间戳
  nonce	               随机数
  echostr	           随机字符串

  开发者经过检验signature对请求进行校验(下面有校验方式)。若确认这次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,不然接入失败。

  signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

  加密/校验流程:

  1. 将token、timestamp、nonce三个参数进行字典序排序;
  2. 将三个参数字符串拼接成一个字符串进行sha1加密;
  3. 开发者得到加密后的字符串可与signature对比,标识该请求来源于微信。

参数排序

  首先咱们确认请求是来自微信服务器的get请求,那么就能够在index.js文件中进行添加代码了。而后在app.get('/interface',function(req,res){});的function中进行添加。

  先来获取各个参数的值,以下代码:

var token="weixin";
var signature = req.query.signature;
var timestamp = req.query.timestamp;
var echostr   = req.query.echostr;
var nonce     = req.query.nonce;

咱们在这里对token进行设置,让其与微信服务器中设置的token一致。

  而后对其中的token、timestamp、nonce进行排序,以下代码:

var oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = token;
oriArray.sort();

这样咱们就完成了排序。

参数加密##

  在上节中咱们已经对参数进行了排序,而后咱们在这一节中要将参数组成一个字符串,进行SH-1加密。在加密之前要用到jssha模块,在咱们的文件中要引用该模块。

var jsSHA = require('jssha');

在上一节课中咱们已经对参数排序完成,并存放在数组中,咱们能够经过join方法来生成一个字符串,以下代码:

var original = oriArray.join('');

最后对该数据进行加密,以下代码:

var jsSHA = require('jssha');
var shaObj = new jsSHA(original, 'TEXT');
var scyptoString=shaObj.getHash('SHA-1', 'HEX');

好了这样就生成了咱们须要的签名字符串scyptoString。

签名对比

  咱们已经获得了咱们想要的签名字符串scyptoString,而后咱们就能够与来自微信服务器的签名进行对比了,对比经过,则咱们就能够接收与发送消息了。

if(signature == scyptoString){
 //验证成功
 } else {
 //验证失败
 }

本参考了以下网站,更多内容也请访问: http://www.hubwiz.com/course/569dc7fdacf9a45a69b051cd/

相关文章
相关标签/搜索