1. 程式人生 > >【Node.js+Express微信公眾號開發】第一步:服務搭建及微信接入

【Node.js+Express微信公眾號開發】第一步:服務搭建及微信接入

一、前言

此前微信開發,都比較依賴後端。然而有時候後端小夥伴特別忙,最近又學習了一下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 修改專案服務埠

clipboard.png修改的方法有兩種,上面截圖是在自己電腦本地修改後把檔案放到伺服器(如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

clipboard.png

如果如圖一樣,就證明服務已經開啟了。(注:如果遇到埠80衝突,請先關閉你伺服器其他80端口占用的服務,再進行啟動專案。)

在瀏覽器輸入你伺服器的ip。如果看到下圖所示,證明你的專案已經搭建成功!!!

clipboard.png

四、微信配置

登入微信公眾平臺,找到基本配置---伺服器配置:

clipboard.png

如上所示,配置填寫,此時提交,微信肯定是會報錯的,因為我們自定義的token沒有在伺服器進行設定。

設定伺服器token

// 安裝crypto
$ npm install crypto

將index.js的內容替換成下面內容clipboard.png

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;

配置完成,然後到公眾號再次按圖示配置確認即可。