二:得到域名后,接下来我们要做的就是使用该域名完成微信安全域名绑定啦,我们可以去微信公众平台申请一个测试号,不过这时候填写时无法通过的,因为微信认证需要拥有一个自己的服务器正确响应配置请求
测试号申请的时候填写配置信息的url,微信服务器会发送一个get请求到这个地址上,get请求会携带一些参数,我们需要用这些参数生成一个签名和微信参数的签名进行对比,对比成功接口才会配置成功。
因为微信认证需要拥有一个自己的服务器 ,所以这里我们就需要用到express搭建一个简单的服务器,用来完成微信的token认证和生成signature(签名),搭建的过程也很简单,参照express中文文档,下面就贴一下官网的步骤:
安装完成过后,进入myapp目录,创建一个app.js的文件 ,
var express = require('express'); var crypto = require('crypto') //使用npm安装后引入,用来生成签名 var http = require('request') //express的中间件,使用npm安装,用来发出请求 var jsSHA = require('jssha')//jssha是微信官网提供的nodejs版本签名算法,可以去官网下载官网的sample包 var app = express(); app.use(express.static('./review')) app.get('/weixin',function (req, res) {//这个get接口就是测试号填写的接口,用来响应微信服务器的请求 var token = 'weixin' //注意这里填写token,与微信测试号申请时候填写的token要保持一致 var signature = req.query.signature; var timestamp = req.query.timestamp; var nonce = req.query.nonce; var echostr = req.query.echostr; /* 加密/校验流程如下: */ //1. 将token、timestamp、nonce三个参数进行字典序排序 var array = new Array(token,timestamp,nonce); array.sort(); var str = array.toString().replace(/,/g,""); //2. 将三个参数字符串拼接成一个字符串进行sha1加密 var sha1Code = crypto.createHash("sha1"); var code = sha1Code.update(str,'utf-8').digest("hex"); //3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if(code===signature){ res.send(echostr) }else{ res.send("error"); } }); var server = app.listen(80, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); });
创建完成后,运行
node app.js
服务器就开启好了,上面要注意的几点就是:
1:jssha不能用npm安装,因为npm安装的运行时候会报 Chosen SHA variant is not supported
,必须使用官网提供的sample包,下载解压后,选择node版本,打开后将node_module里面jssha文件复制到项目内的node_module里面即可;