【Node.js+Express微信公眾號開發】第一步:服務搭建及微信接入
阿新 • • 發佈:2018-12-09
一、前言
此前微信開發,都比較依賴後端。然而有時候後端小夥伴特別忙,最近又學習了一下node的基礎知識,索性就想著自己用node整一遍。
本教程環境為linux系統centOs7系統
二、準備工作
1. 伺服器
伺服器我使用的是搬瓦工的,目前19.9美元那款,網上有優惠券,對比下來也不貴,國外的也免備案,有興趣可以去購買。系統為centOs7。
2. 公眾號
三、搭建服務
使用Xshell連結伺服器。
1. 安裝node
$ sudo yum -y install nodejs
2. 安裝express腳手架
$ npm install express-generator -g
3. 建立專案
3.1 腳手架快速搭建
//建立原始碼目錄,此處我的路徑為/home/nodeApp,您可以根據自己需要放置原始碼
$ cd /home
$ mkdir dir nodeApp
// 進入目錄
$ cd nodeApp
//建立專案
$ express wxApp
$ cd wxApp
// 安裝專案所需依賴包
$ npm install
此時腳手架建立專案成功,但是應用預設的為3000埠,而微信配置伺服器地址時,只允許80和443埠,故這邊將我們專案改為80埠:
3.2 修改專案服務埠
修改的方法有兩種,上面截圖是在自己電腦本地修改後把檔案放到伺服器(如ftp),下面介紹伺服器vi命令修改:
$ cd bin $ vi www 然後儲存
3.3 安裝nodemon(可跳過)
因習慣了vue熱載入,node服務更改的話都要重啟服務才能生效,這個nodemon外掛就是相當於熱載入,自動重啟服務。
// 全域性安裝nodemon外掛
$ npm install -g nodemon
// 進入專案下的bin目錄
$ cd bin
// 建立並編寫 nodemon.json 配置檔案
$ vi nodemon.json
下面是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" }
儲存完成。(同樣的,你也可以本地編輯好再放到伺服器)
3.4 執行專案
// 回到專案根目錄 /home/nodeApp/wxApp
$ cd ..
// 執行專案
$ nodemon npm start
如果如圖一樣,就證明服務已經開啟了。(注:如果遇到埠80衝突,請先關閉你伺服器其他80端口占用的服務,再進行啟動專案。)
在瀏覽器輸入你伺服器的ip。如果看到下圖所示,證明你的專案已經搭建成功!!!
四、微信配置
登入微信公眾平臺,找到基本配置---伺服器配置:
如上所示,配置填寫,此時提交,微信肯定是會報錯的,因為我們自定義的token沒有在伺服器進行設定。
設定伺服器token
// 安裝crypto
$ npm install crypto
將index.js的內容替換成下面內容
var express = require('express');
var crypto = require('crypto');
var router = express.Router();
var token = "WeiChartToken"; //此處是我們自定義的token,需與準備填寫到微信配置上的一致!
/* GET home page. */
router.get('/', function(req, res, next) {
var signature = req.query.signature;
var timestamp = req.query.timestamp;
var nonce = req.query.nonce;
var echostr = req.query.echostr;
/* 加密/校驗流程如下: */
//1. 將token、timestamp、nonce三個引數進行字典序排序
var array = new Array(token,timestamp,nonce);
array.sort();
var str = array.toString().replace(/,/g,"");
//2. 將三個引數字串拼接成一個字串進行sha1加密
var sha1Code = crypto.createHash("sha1");
var code = sha1Code.update(str,'utf-8').digest("hex");
//3. 開發者獲得加密後的字串可與signature對比,標識該請求來源於微信
if(code===signature){
res.send(echostr)
}else{
res.send("error");
}
});
module.exports = router;
配置完成,然後到公眾號再次按圖示配置確認即可。