1. 您得從微信官方平臺註冊一個微信訂閱號:javascript
2. 這個教程使用nodejs開發微信訂閱號對應的消息服務器,所以須要具有基本的nodejs開發技能。node
登陸微信公衆號平臺https://mp.weixin.qq.com, 使用菜單:Development->Basic configuration:express
最重要的是在訂閱號的控制檯裏指定一個消息服務器的url。以下圖所示。這個消息服務器的url從哪裏來?json
我會用nodejs開發一個服務器,部署到Salesforce的雲平臺Heroku上。服務器
當您的微信訂閱號的粉絲經過微信App同您的訂閱號交互,好比發消息,或者使用您的微信訂閱號自定義菜單時,這些請求就會經過微信App轉發到您的nodejs消息服務器上。微信
可是當您配置的消息服務器要真正起做用,還得先經過一個驗證。驗證流程在微信官網上: https://mp.weixin.qq.com/wiki...app
微信官網上提供的驗證流程的實現是用Python寫的,我提供了一個nodejs版本的實現。框架
咱們在微信訂閱號的控制檯點了Submit按鈕以後,微信框架會發送一個HTTP請求到你的微信服務器去,請求明細以下:ssh
https://<your server url>/?signature=096abd439b41f9610aeabe2d7534084fd8dafa20&echostr=16168327802220428137×tamp=1512810825&nonce=384289189
您的微信服務器的職責就是:按照上面流程圖定義的規範,計算根據您微信訂閱號的token(令牌),時間戳和nonce字段,計算出一個簽名值,而後同發到消息服務器的簽名值作對比。若是對比發現二者不一致,會收到錯誤消息「Token authentication failed」。
下面是如何用nodejs開發使得消息服務器經過驗證流程。
1. 建立一個新的nodejs工程,下列package.json文件裏高亮部分是用於消息服務器通訊的重要部分。
主要的邏輯位於server.js裏。
2. 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徹底一致,認證經過。
回到訂閱號的操做臺,發現咱們的nodejs微信服務器認證成功,能夠作開發了。
後續Jerry會帶來更多微信訂閱號開發的內容。
要獲取更多Jerry的原創技術文章,請關注公衆號"汪子熙"或者掃描下面二維碼: