前言
之前看過一些node做微信公眾號認證的教程,自己也想用node把微信和小程式的開發內容學習一下,包括登入機制等,以後就不用總依賴後端的小夥伴幫忙了,期望可以自己完成全棧的開發。
結果卻剛剛完成第一步的域名認證,記錄了一下過程,共同學習。
目錄
- 雲伺服器購買
- linux安裝node
- 安裝express腳手架和依賴
- 自動重啟 nodemon外掛使用
- 公眾號配置
- node加密和認證
- 採坑指北
- 總結
正文內容
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. 公眾號配置
在這之前你應該註冊完成公眾號,登入成功點選左側選單 開發-> 基本配置。
點選修改配置進入配置介面,輸入你的伺服器地址和自定義的token,然後隨機生成一個加密密匙,加密方式預設就好。
注:我使用的是/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 提交繫結
啟動應用,然後點選微信公眾號配置頁面的提交按鈕,成功或失敗都有提示,祝你成功。
7. 採坑指北
之前是按照用node.js進行微信公眾平臺的開發的步驟來做,在註釋裡第二、三個步驟踩過兩個坑
- 排序:微信的文件裡是token、timestamp、nonce,順序一定要正確。
- jsSHA方法:正確的做法,new jsSHA('SHA-1', 'TEXT')。
文章截圖
-
順序與官網不一致
-
jsSHA用法不正確
8. 總結
-
前期看概念資料、教程
實現其實挺簡單的,在做以前看過好多微信認證的資料,網上可以找到一堆,然後實踐時就有思路了。
-
實踐看文件找方法
哪個方法報錯就翻哪個方法的文件,不要一報錯就換另一個教程走。