要開發微信公衆號,首先咱們得有一個公衆號,這裏咱們使用官方給開發者提供的接口測試號。node
打開微信公衆平臺官網:https://mp.weixin.qq.com/,而後進入微信公衆平臺技術文檔:https://mp.weixin.qq.com/wiki,在開始開發菜單裏,有接口測試號申請:web
而後用本身的微信掃一下二維碼:算法
掃描完成點擊登陸後,咱們會進入一個測試號管理的頁面,說明,咱們已經成功申請了一個測試公衆號。npm
驗證公衆號過程:安全
驗證過程示例圖說明:服務器
1 將token、timestamp(時間戳)、nonce(隨機數)三個參數進行字典排序①;微信
2 將三個參數數字字符串拼接成一個字符串進行sha1加密②;網絡
3 將加密後的字符串與signature③對比,若是相同,表示這個請求來源於微信,咱們直接原樣返回echostr④參數內容,接入驗證就成功了。app
下面咱們來動手實踐一下操做過程。微信公衆平臺
新建測試項目文件目錄wechat,經過終端命令進入項目文件 $ cd Desktop/wechat/
而後,使用npm安裝koa和sha1模塊 $ npm install koa sha1,安裝完成後,使用編輯器進入wechat目錄,新建app.js文件,並寫入如下代碼:
'use strict'; // 引入模塊 var Koa = require('koa'); var sha1 = require('sha1'); // 聲明對象字面量config 用於存儲配置信息 var config = { wechat:{ appID: 'wx044125d0a173dd15', appSecret: '21295f049b49fe324d7302186c294fe7', token: 'beijingjiangweiwechatlearntokenvalue' } } // 實例化Koa的web服務器 var app = new Koa(); app.use(function*(next) { console.log(this.query); var token = config.wechat.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); // 判斷加密後的值是否等於簽名值 if (sha === signature) { this.body = echostr + ''; } else { this.body = 'wrong'; } }); //監聽3100端口 app.listen(3100); console.log('listening:3100');
app.js即爲項目啓動文件,如今,咱們使用終端,用node啓動app.js:
而後,使用啓動魔法隧道(魔法隧道使用方法參看上一節)$ ./mofasuidao tokenvalue
進入以前申請微信測試號的管理頁面,填入url和token,url即我上圖中內網映射的外網地址,token先隨便填一下:
填好後點擊提交,若是成功,頁面上方會提示咱們配置成功。
若是配置失敗,能夠從映射內網端口未成功、端口設置錯誤、網絡問題、加密算法問題,參數順序問題、驗證地址是否與實際不符等方法逐一排除。
參考資料:
① 字典排序:是一種對於隨機變量造成序列的排序方法。
② sha1:安全哈希算法,主要適用於數字簽名標準裏面定義的數字簽名算法。
③ signature:簽名。
④ echostr:隨機字符串。
注意:由於官方文檔是處於更新狀態的,因此後面關於微信公衆號的知識點,可能跟最新的文檔有必定的差別,因此開發的時候仍是要以最新的文檔爲準。