上一篇记录了一下我开始用node搭建微信平台的时候服务器遇到的问题。因为昨天弄得比较晚,没有来的及写代码是如何接入的所以今天就写写这部分。
首先写一下在服务器配置好的情况下是如何在微信公众平台配置接入服务器地址的。
我们先从思路上来理一下这个接入是如何配置的。
首先我们要知道我们的appID, appsecret, token 这三个信息。因为我是从微信测试号上面做的实验,我就只能给大家看看微信测试号上的这三个信息在哪儿。
接下来我们就可以进行下一步了。现在我们说一下它的认证原理,当我们配置这个这个的时候,微信服务器就会把你的APPID,APPsecret,token,signature,发送到你的服务器进行匹配,看在你的服务器上这几个配置文件是否是你本人公众平台的信息。这个你的APPID,APPsecret,token很容易获取到(当然如果真的是你的),还有一个就是签名验证,这个需要根据你的信息来进行生成,如果一样,那么你的配置就通过了。(这里啰嗦一句,如果你看你的这几个参数都匹配正确的话,也有可能第一次是不成功的,这种情况你可以多点几次试试,我就被这个坑了好几次了)
我们就仔细说一下在你服务器上这个签名是如何生成的。首先它需要timestamp,token, nonce(随机字符串)这三个信息,timestamp,nonce是你可以从微信服务器获取到的,token是你自己的,接下来就需要你讲这三个字段来进行排序,排序完成之后再用sha1来进行加密,这样你得到的signature就和你微信服务器上获取到的是一致的。那么你的配置就可以通过了。下面是我我用node 来写的代码
其中这些是我们配置微信服务器用到的代码(app.js):
var Koa = require('koa')
var wechat = require('./wechat/g')
var config = {
wechat: {
appID: 'wx5aaasdsa6c3571a1a',
appSecret: '3a6e13093a6casdadsade70ba2a32fe1b0',
token: 'vhmakedsadsad',
}
}
var app = new Koa() //因为我用的koa框架,所以实例化一个对象
//这个调用的是中间件,里面是将参数穿进去,因为我需要将逻辑和微信功能实现分离开所以又新建里一个文件夹wechat,在里面新建了一个g.js文件
app.use(wechat(config.wechat))
app.listen(8080) //这个是开启服务需要监听的8080端口
wechat/g.js文件:
var sha1 = require('sha1'); //引入sha1加密模块
module.exports = function (opts) {
return function *(next) {
console.log(this.query) //这个显示从微信服务器收到的信息
var token = opts.token;
var signature = this.query.signature;
var nonce = this.query.nonce;
var timestamp = this.query.timestamp;
var echostr = this.query.echostr;
var str = [token, timestamp, nonce].sort().join('');
var sha = sha1(str);
//将你自己生成的signature和服务器传过来的signature来进行比较,如果成功则验证通过。
if (sha === signature) {
this.body = echostr + '';
}
else {
this.body = 'wrong';
}
}
}