【Node.js 微信公衆號實戰】1.Node.js 接入微信公衆平臺開發

1、寫在前面的話

  Node.js是一個開放源代碼、跨平臺的JavaScript語言運行環境,採用Google開發的V8運行代碼,使用事件驅動、非阻塞和異步輸入輸出模型等技術來提升性能,可優化應用程序的傳輸量和規模。這些技術一般用於數據密集的事實應用程序。—— 來自維基百科

  最近花了差很少近一個月的時間去學習Node.js,因爲它的代碼語言是 Javascript ,所以對於語法上就沒有過多的去研究,畢竟作過Web開發的程序員,不多有不會Javascript的。而寫這篇文章,也只是爲了
記錄裝逼的過程javascript

若有不正確的地方,但願你們指正。html

2、準備工做

  在正式開始碼代碼以前,咱們須要準備如下東西:java

  1. 搭建 Node 環境。Node的安裝過程太過簡單,網上也有太多的教程,你們能夠自行百度;
  2. 申請微信公衆號,一樣這裏也不作介紹,你們自行百度。
  3. 服務器和域名。
  4. 打開 Node.js中文網文檔
  5. 打開 微信開發者文檔

3、接入微信公衆平臺

1.建立Node.js 項目

  首先咱們在電腦的任意磁盤上建立文件夾,命名隨意,我這命名爲 wechat;
  隨後在文件夾中建立兩個文件,一個是config.json,另外一個爲app.js。以下圖所示:
Node.js項目
PS:這裏個人 IDE 是 VSCode,各位可隨意使用本身喜歡的 IDE。node

  爲了後續功能的擴展,我加入了Express框架,具體操做以下:git

  1. 電腦打開運行界面,快捷鍵爲:win+R,輸入cmd後回車,進入dos界面,輸入命令
npm install -g express

進行全局安裝;因爲 Express 自 4.x 版本中將命令工具分離出來,所以還須要輸入下一個命令程序員

npm install -g express-generator@4

安裝成功後,在dos界面中輸入如下 命令github

express -h

結果以下圖所示:express

express 安裝成功

震驚什麼?你的運行結果提示:express不是內部或外部命令。那你必需要檢查一下安裝 node.js 的時候有沒有添加環境變量。點擊解決express不是內部或外部命令問題npm

2.微信文檔步驟

  若是在沒有考慮清楚以前,就開始碼代碼的話,這樣作是很是危險的。咱們先打開微信文檔,點擊 開始開發 中的 接入指南,如圖:
接入指南json

跳過第一步,直接看第二步,如圖:
驗證消息來自微信服務器

正如幫助文檔所說的那樣,咱們總結以四個步驟:

  1. 獲取微信服務器Get請求的參數 signature、timestamp、nonce、echostr
  2. 將token、timestamp、nonce三個參數進行字典序排序
  3. 將三個參數字符串拼接成一個字符串進行sha1加密
  4. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信

3.接入功能的實現

   整理好思路後咱們就按照上一節的步驟去實現。首先咱們在打開 config.json 文件,輸入如下內容:

{
    "token":"wechat"
}

   config.json 文件是咱們程序的配置文件,在後面的文章中,咱們會將程序名稱、微信定義的參數名稱、請求地址等配置內容存放在該文件中。
   打開 app.js 文件,該文件屬於咱們程序的入口,在文件啓動及之後路由配置都是再次實現的,首先咱們導入重要的模塊:

const express = require('express'), //express 框架 
       crypto = require('crypto'),  //引入加密模塊
       config = require('./config');//引入配置文件

上面的代碼不難理解,require 就是導入模塊的意思。這裏主要針對咱們自定義的config.json文件講解一下:
 "./" 表示與 app.js 在同一及目錄下,爲何要這麼寫呢?緣由很簡單就是在咱們經過 npm 命令安裝模塊時,若是咱們指定了全局安裝,也就是 -g,安裝後的文件則會保存在咱們 node.js 安裝路徑下的 node_modules 文件夾中;同理,咱們不指定全局安裝,安裝後的文件則會保存在咱們安裝命令輸入時所在的文件夾根目錄下的 node_modules 文件夾中,此時若是沒有該文件,系統會自動建立。

 這裏咱們都是使用 require 去導入模塊的,node.js 怎麼分辨系統模塊和咱們自定義的模塊呢,聰明的你必定想到了,沒錯就是 "./" 這個,若是你不想用它的話,你也能夠把自定義的模塊文件移到 node_modules 文件夾中。

  require 是經過模塊名稱去導入模塊文件的,所以在引入的時候不須要寫入文件的後綴名。若是兩個文件重名,但後綴名不一樣, require 會按照 Node.js 的加載優先級順序進行導入,即 js文件 > json文件 > node文件。

原來如此
 實際上就是這麼簡單,咱們也就再也不糾結這個問題,繼續下面的工做。

   實例 express 以及 建立服務器

//實例 express
var app = express();
//用於處理全部進入 3000 端口 get 的鏈接請求
app.get('/',function(req,res){
    //對請求鏈接返回內容
    res.send("Hello Node.js");
});
//監聽3000端口
app.listen(3000);

  上面的代碼經過註釋,咱們就能明白其意思,這裏我就再也不作細緻的講解。再次進入 dos 界面,經過命令進入咱們項目的文件的根目錄下,如圖:
進入項目根目錄下
輸入命令,啓動咱們的Node.js項目

node app.js

啓動成功後,咱們打開瀏覽器輸入地址:http://localhost:3000 訪問咱們的node.js項目,如圖
啓動node.js項目

範文結果

小技巧 :
  在每次更改完 node.js 項目後,咱們都須要先將 node.js中止(快捷鍵: Ctrl+C),而後再經過命令再次運行,這樣特別麻煩。這裏我推薦使用 supervisor 工具,npm 安裝命令爲:npm install -g supervisor。這樣咱們啓動 node.js 項目命令改成 supervisor app.js,更改項目後只須要保存,刷新瀏覽器頁面就能夠獲得更改後的結果了。

  完成上面的工做後,咱們就能夠正式開始寫接入微信公衆平臺的主要代碼,廢話很少說直接貼代碼
後退!我要開始裝逼了

const express = require('express'), //express 框架 
       crypto =  require('crypto'), //引入加密模塊
       config = require('./config');//引入配置文件

var app = express();//實例express框架

//用於處理全部進入 3000 端口 get 的鏈接請求
app.get('/',function(req,res){
    //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 = [config.token,timestamp,nonce];
    array.sort();

    //3.將三個參數字符串拼接成一個字符串進行sha1加密
    var tempStr = array.join('');
    const hashCode = crypto.createHash('sha1'); //建立加密類型 
    var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //對傳入的字符串進行加密

    //4.開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
    if(resultCode === signature){
        res.send(echostr);
    }else{
        res.send('mismatch');
    }
});

//監聽3000端口
app.listen(3000);

4.部署項目

   完成了代碼後咱們就能夠把項目發佈到外網上了,這裏我用的是花生殼內網映射外網的軟件,各位能夠隨意使用其餘工具。
1.打開花生殼的軟件,點擊內網穿透:
花生殼
2.點擊添加映射
點擊添加映射
3.配置映射
這裏寫圖片描述
  因爲微信只接受80端口,咱們在映射類型選擇爲 網站80端口;內網主機就是咱們電腦的 IP 地址;內網端口號就是node.js的監聽端口;點擊肯定後,就成功映射到外網了,能夠經過花生殼提供的域名進行訪問。

5.接入驗證

  再次進入 微信公衆平臺
在左側菜單點擊基本配置,如圖:
基本配置

修改服務器配置

點擊修改配置。其中服務器地址,就是咱們外網映射的地址;令牌(Token)就是咱們在 config.json 文件中 定義的 token 值;消息加密能夠點擊隨機生成按鈕,固然你也能夠隨便定義;消息加解密方式這塊能夠隨便選擇,這裏我就使用默認的,如圖:
微信服務器配置

微信公衆平臺接入

  點擊提交按鈕,提示 提交成功,那麼我就要祝賀你了哎呦不錯哦
  你已經成功的步入了Node.js開發微信的開發的第一步。

   文章源代碼:https://github.com/SilenceHVK... 。對文章有不正確之處,請給予糾正。github源代碼請順手給個 Star,最後感謝您的閱讀。

相關文章
相關標籤/搜索