上一篇記錄了一下我開始用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';
}
}
}