1. 您得從微信官方平臺(tái)注冊(cè)一個(gè)微信訂閱號(hào):
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)伊犁,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792https://mp.weixin.qq.com
2. 這個(gè)教程使用nodejs開發(fā)微信訂閱號(hào)對(duì)應(yīng)的消息服務(wù)器,因此需要具備基本的nodejs開發(fā)技能。
登錄微信公眾號(hào)平臺(tái) https://mp.weixin.qq.com , 使用菜單:Development->Basic configuration:
最重要的是在訂閱號(hào)的控制臺(tái)里指定一個(gè)消息服務(wù)器的url。如下圖所示。這個(gè)消息服務(wù)器的url從哪里來?
我會(huì)用nodejs開發(fā)一個(gè)服務(wù)器,部署到Salesforce的云平臺(tái)Heroku上。
當(dāng)您的微信訂閱號(hào)的粉絲通過微信App同您的訂閱號(hào)交互,比如發(fā)消息,或者使用您的微信訂閱號(hào)自定義菜單時(shí),這些請(qǐng)求就會(huì)通過微信App轉(zhuǎn)發(fā)到您的nodejs消息服務(wù)器上。
但是當(dāng)您配置的消息服務(wù)器要真正起作用,還得先通過一個(gè)驗(yàn)證。驗(yàn)證流程在微信官網(wǎng)上: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5
微信官網(wǎng)上提供的驗(yàn)證流程的實(shí)現(xiàn)是用Python寫的,我提供了一個(gè)nodejs版本的實(shí)現(xiàn)。
我們?cè)谖⑿庞嗛喬?hào)的控制臺(tái)點(diǎn)了Submit按鈕之后,微信框架會(huì)發(fā)送一個(gè)HTTP請(qǐng)求到你的微信服務(wù)器去,請(qǐng)求明細(xì)如下:
https://
您的微信服務(wù)器的職責(zé)就是:按照上面流程圖定義的規(guī)范,計(jì)算根據(jù)您微信訂閱號(hào)的token(令牌),時(shí)間戳和nonce字段,計(jì)算出一個(gè)簽名值,然后同發(fā)到消息服務(wù)器的簽名值做對(duì)比。如果對(duì)比發(fā)現(xiàn)兩者不一致,會(huì)收到錯(cuò)誤消息“Token authentication failed”。
下面是如何用nodejs開發(fā)使得消息服務(wù)器通過驗(yàn)證流程。
1. 創(chuàng)建一個(gè)新的nodejs工程,下列package.json文件里高亮部分是用于消息服務(wù)器通信的重要部分。
主要的邏輯位于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 tokenvar 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應(yīng)用部署到Heroku平臺(tái)。具體操作參考Heroku的操作手冊(cè)。
部署成功后,到微信訂閱號(hào)操作臺(tái)點(diǎn)Submit按鈕提交驗(yàn)證請(qǐng)求,然后在Heroku應(yīng)用的控制臺(tái)上能觀察到我們自己的微信服務(wù)器計(jì)算出的signature和微信平臺(tái)發(fā)送的signature完全一致,認(rèn)證通過。
回到訂閱號(hào)的操作臺(tái),發(fā)現(xiàn)我們的nodejs微信服務(wù)器認(rèn)證成功,可以做開發(fā)了。
后續(xù)Jerry會(huì)帶來更多微信訂閱號(hào)開發(fā)的內(nèi)容。
要獲取更多Jerry的原創(chuàng)技術(shù)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙"或者掃描下面二維碼: