此前微信開發,都比較依賴後端。然而有時候後端小夥伴特別忙,最近又學習了一下node的基礎知識,索性就想着本身用node整一遍。
本教程環境爲linux系統centOs7系統vue
服務器我使用的是搬瓦工的,目前19.9美圓那款,網上有優惠券,對比下來也不貴,國外的也免備案,有興趣能夠去購買。
系統爲centOs7。node
使用Xshell連接服務器。git
$ sudo yum -y install nodejs
shell
$ npm install express-generator -g
express
//建立源碼目錄,此處個人路徑爲/home/nodeApp,您能夠根據本身須要放置源碼 $ cd /home $ mkdir dir nodeApp // 進入目錄 $ cd nodeApp //建立項目 $ express wxApp $ cd wxApp // 安裝項目所需依賴包 $ npm install
此時腳手架建立項目成功,可是應用默認的爲3000端口,而微信配置服務器地址時,只容許80和443端口,故這邊將咱們項目改成80端口:npm
修改的方法有兩種,上面截圖是在本身電腦本地修改後把文件放到服務器(如ftp),下面介紹服務器vi命令修改:json
$ cd bin $ vi www 而後保存
因習慣了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" }
保存完成。(一樣的,你也能夠本地編輯好再放到服務器)
// 回到項目根目錄 /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;
配置完成,而後到公衆號再次按圖示配置確認便可。