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

前言

以前看過一些node作微信公衆號認證的教程,本身也想用node把微信和小程序的開發內容學習一下,包括登陸機制等,之後就不用總依賴後端的小夥伴幫忙了,指望能夠本身完成全棧的開發。node

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

目錄

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

正文內容

1. 雲服務器購買

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

2. linux安裝node

以前繞了一堆彎路,由於linux不太熟悉,用下載再配置環境變量的方式老是出錯,學習要緊,就沒糾結了,直接換了方式。express

$ sudo yum -y install nodejs 
複製代碼

3. 安裝express腳手架和依賴

3.1 安裝express腳手架npm

$ npm install express-generator -g
複製代碼

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

//建立源碼目錄並進入
$ mkdir dir nodeApp
$ cd /nodeApp
//建立應用
$ express weiChart
$ cd /weiChart
// 安裝須要依賴包
$ npm install 
複製代碼

4. 自動重啓 nodemon插件使用

到這個就能夠直接啓動應用了,可是考慮邊修改邊預覽調試,會無限重啓應用,就配置了nodemon插件,修改完代碼自動重啓應用。小程序

4.1 安裝vim

// 全局安裝nodemon插件
$ npm install -g nodemon
// 進入應用下的bin目錄
$ cd /bin
複製代碼

4.2 建立配置文件後端

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

<!--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進行微信公衆平臺的開發的步驟來作,在註釋裏第2、三個步驟踩過兩個坑

  • 排序:微信的文檔裏是token、timestamp、nonce,順序必定要正確。
  • jsSHA方法:正確的作法,new jsSHA('SHA-1', 'TEXT')。

文章截圖

  • 順序與官網不一致

  • jsSHA用法不正確

8. 總結

  • 前期看概念資料、教程

    實現其實挺簡單的,在作之前看過好多微信認證的資料,網上能夠找到一堆,而後實踐時就有思路了。

  • 實踐看文檔找方法

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

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

相關文章
相關標籤/搜索