Node.js + Express 認證微信公眾號

愚坤發表於2018-07-07

前言

之前看過一些node做微信公眾號認證的教程,自己也想用node把微信和小程式的開發內容學習一下,包括登入機制等,以後就不用總依賴後端的小夥伴幫忙了,期望可以自己完成全棧的開發。

結果卻剛剛完成第一步的域名認證,記錄了一下過程,共同學習。

目錄

  1. 雲伺服器購買
  2. linux安裝node
  3. 安裝express腳手架和依賴
  4. 自動重啟 nodemon外掛使用
  5. 公眾號配置
  6. node加密和認證
  7. 採坑指北
  8. 總結

正文內容

1. 雲伺服器購買

這一步拖了好長時間,在找便宜的雲伺服器,現在用的是滴滴雲的雲伺服器,第一個月9塊錢,後三個月續費一個月20塊錢,趁著打折,抓緊學習一下 哈哈。

2. linux安裝node

之前繞了一堆彎路,因為linux不太熟悉,用下載再配置環境變數的方式總是出錯,學習要緊,就沒糾結了,直接換了方式。

$ sudo yum -y install nodejs 
複製程式碼

3. 安裝express腳手架和依賴

3.1 安裝express腳手架

$ npm install express-generator -g
複製程式碼

3.2 建立目錄和應用並安裝依賴

//建立原始碼目錄並進入
$ mkdir dir nodeApp
$ cd /nodeApp
//建立應用
$ express weiChart
$ cd /weiChart
// 安裝需要依賴包
$ npm install 
複製程式碼

4. 自動重啟 nodemon外掛使用

到這個就可以直接啟動應用了,但是考慮邊修改邊預覽除錯,會無限重啟應用,就配置了nodemon外掛,修改完程式碼自動重啟應用。

4.1 安裝

// 全域性安裝nodemon外掛
$ npm install -g nodemon
// 進入應用下的bin目錄
$ cd /bin
複製程式碼

4.2 建立配置檔案

可以使用vim建立也可以直接本地建立好拖入bin目錄

<!--nodemon配置檔案 nodemon.json -->
{
    "restartable": "rs",
    "ignore": [
        ".git",
        ".svn",
        "node_modules/**/node_modules"
    ],
    "verbose": true,
    "execMap": {
        "js": "node --harmony"
    },
    "watch": [],
    "env": {
        "NODE_ENV": "development"
    },
    "ext": "js json"
}
複製程式碼

使用vim建立

$ vim nodemon.json
// 貼上檔案
按esc  輸入':wq' 儲存退出即可
複製程式碼

4.3 使用nodemon啟動應用

// 進入專案根目錄
$ cd ../
$ nodemon npm start
複製程式碼

5. 公眾號配置

在這之前你應該註冊完成公眾號,登入成功點選左側選單 開發-> 基本配置

Node.js + Express 認證微信公眾號

點選修改配置進入配置介面,輸入你的伺服器地址和自定義的token,然後隨機生成一個加密密匙,加密方式預設就好。

Node.js + Express 認證微信公眾號

注:我使用的是/weiChart路徑,不是專案根目錄,所以在express的路由裡需要配置上。

6. node加密和認證

6.1 安裝依賴

$ npm install jssha --save-dev
複製程式碼

進入專案根目錄下的routes檔案,開啟index.js進行開發。

6.2 引入依賴

var jsSHA = require('jssha');
複製程式碼

6.3 建立微信路由


router.get('/weiChart', function(req, res, next) {
    //自定移動token,要與微信公眾號裡設定的一致
	var token="6d05aedab138be6bbbf40b41d65a45ec";
	//1.獲取微信伺服器Get請求的引數 signature、timestamp、nonce、echostr
	    var signature = req.query.signature,//微信加密簽名
	        timestamp = req.query.timestamp,//時間戳
	            nonce = req.query.nonce,//隨機數
	          echostr = req.query.echostr;//隨機字串

	    //2.將token、timestamp、nonce三個引數進行字典序排序
	    var array = [token,timestamp,nonce];
	    array.sort();

	    //3.將三個引數字串拼接成一個字串進行sha1加密
	    var tempStr = array.join('');
	    var shaObj = new jsSHA('SHA-1', 'TEXT');
	    shaObj.update(tempStr);
	    var scyptoString=shaObj.getHash('HEX'); 

	    //4.開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
	    if(signature === scyptoString){
	    	console.log('驗證成功')
	        res.send(echostr);
	    }else{
	    	console.log('驗證失敗')
	        res.send('驗證失敗');
	    }

});
複製程式碼

6.4 提交繫結

啟動應用,然後點選微信公眾號配置頁面的提交按鈕,成功或失敗都有提示,祝你成功。

Node.js + Express 認證微信公眾號

7. 採坑指北

之前是按照用node.js進行微信公眾平臺的開發的步驟來做,在註釋裡第二、三個步驟踩過兩個坑

  • 排序:微信的文件裡是token、timestamp、nonce,順序一定要正確。
  • jsSHA方法:正確的做法,new jsSHA('SHA-1', 'TEXT')。

文章截圖

  • 順序與官網不一致

    Node.js + Express 認證微信公眾號

  • jsSHA用法不正確

    Node.js + Express 認證微信公眾號

8. 總結

  • 前期看概念資料、教程

    實現其實挺簡單的,在做以前看過好多微信認證的資料,網上可以找到一堆,然後實踐時就有思路了。

  • 實踐看文件找方法

    哪個方法報錯就翻哪個方法的文件,不要一報錯就換另一個教程走。

才疏學淺,如有問題懇請斧正。

相關文章