天天看點

微信程式開發系列教程(一)開發環境搭建

1. 您得從微信官方平台注冊一個微信訂閱号: https://mp.weixin.qq.com 2. 這個教程使用nodejs開發微信訂閱号對應的消息伺服器,是以需要具備基本的nodejs開發技能。

微信程式開發系列教程(一)開發環境搭建
微信程式開發系列教程(一)開發環境搭建

當您的微信訂閱号的粉絲通過微信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裡。

微信程式開發系列教程(一)開發環境搭建
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完全一緻,認證通過。

微信程式開發系列教程(一)開發環境搭建

後續Jerry會帶來更多微信訂閱号開發的内容。

繼續閱讀