1. 您得從微信官方平台注冊一個微信訂閱号: https://mp.weixin.qq.com 2. 這個教程使用nodejs開發微信訂閱号對應的消息伺服器,是以需要具備基本的nodejs開發技能。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SZ2ADNxITO0kDOhFTZ0YmYwQGO0ATNkZTNhBjZ5QmZh9CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
當您的微信訂閱号的粉絲通過微信App同您的訂閱号互動,比如發消息,或者使用您的微信訂閱号自定義菜單時,這些請求就會通過微信App轉發到您的nodejs消息伺服器上。
但是當您配置的消息伺服器要真正起作用,還得先通過一個驗證。驗證流程在微信官網上:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5我們在微信訂閱号的控制台點了Submit按鈕之後,微信架構會發送一個HTTP請求到你的微信伺服器去,請求明細如下:
https:///?signature=096abd439b41f9610aeabe2d7534084fd8dafa20&echostr=16168327802220428137×tamp=1512810825&nonce=384289189
您的微信伺服器的職責就是:按照上面流程圖定義的規範,計算根據您微信訂閱号的token(令牌),時間戳和nonce字段,計算出一個簽名值,然後同發到消息伺服器的簽名值做對比。如果對比發現兩者不一緻,會收到錯誤消息“Token authentication failed”。
下面是如何用nodejs開發使得消息伺服器通過驗證流程。
1. 建立一個新的nodejs工程,下列package.json檔案裡高亮部分是用于消息伺服器通信的重要部分。
主要的邏輯位于server.js裡。
var express = require('express');
var routesEngine = require('./index.js');
var app = express();
routesEngine(app);
app.listen(process.env.PORT || 3000, function () {
console.log('Listening on port, process.cwd(): ' + process.cwd() );
});
In implementation of index.js, now we need to implement verification process:
var request = require('request');
var jsSHA = require('jssha');
module.exports = function (app) {
app.route('/').get(function(req,res){
var token="jerry"; // replace it with your own token
var signature = req.query.signature,
timestamp = req.query.timestamp,
echostr = req.query.echostr,
nonce = req.query.nonce;
oriArray = new Array();
oriArray[0] = nonce;
oriArray[1] = timestamp;
oriArray[2] = token;
oriArray.sort();
var original = oriArray.join('');
var shaObj = new jsSHA("SHA-1", 'TEXT');
shaObj.update(original);
var scyptoString = shaObj.getHash('HEX');
console.log("calculated string: " + scyptoString);
if (signature == scyptoString) {
res.send(echostr);
} else {
res.send('bad token');
}
});
};
3. 将該nodejs應用部署到Heroku平台。具體操作參考Heroku的操作手冊。
部署成功後,到微信訂閱号操作台點Submit按鈕送出驗證請求,然後在Heroku應用的控制台上能觀察到我們自己的微信伺服器計算出的signature和微信平台發送的signature完全一緻,認證通過。
後續Jerry會帶來更多微信訂閱号開發的内容。