Node.js開發(fā)第三方微信公眾平臺
一、寫在前面的話
Node.js是一個開放源代碼、跨平臺的JavaScript語言運行環(huán)境,采用Google開發(fā)的V8運行代碼,使用事件驅動、非阻塞和異步輸入輸出模型等技術來提高性能,可優(yōu)化應用程序的傳輸量和規(guī)模。這些技術通常用于數(shù)據(jù)密集的事實應用程序?!獊碜跃S基百科
最近花了差不多近一個月的時間去學習Node.js,由于它的代碼語言是 Javascript ,因此對于語法上就沒有過多的去研究,畢竟做過Web開發(fā)的程序員,很少有不會Javascript的。而寫這篇文章,也只是為了

如有不正確的地方,希望大家指正。
二、準備工作
在正式開始碼代碼之前,我們需要準備以下東西:
搭建 Node 環(huán)境。Node的安裝過程太過簡單,網上也有太多的教程,大家可以自行百度;申請微信公眾號,同樣這里也不做介紹,大家自行百度。服務器和域名。打開Node.js中文網文檔 打開 微信開發(fā)者文檔 三、接入微信公眾平臺 1.創(chuàng)建Node.js 項目
首先我們在電腦的任意磁盤上創(chuàng)建文件夾,命名隨意,我這命名為 wechat;
隨后在文件夾中創(chuàng)建兩個文件,一個是config.json,另一個為app.js。如下圖所示:

PS:這里我的 IDE 是 VSCode,各位可隨意使用自己喜歡的 IDE。
為了后續(xù)功能的擴展,我加入了Express框架,具體操作如下:
電腦打開運行界面,快捷鍵為:win+R,輸入cmd后回車,進入dos界面,輸入命令
npm install -g express
進行全局安裝;由于 Express 自 4.x 版本中將命令工具分離出來,因此還需要輸入下一個命令
npm install -g express-generator@4
安裝成功后,在dos界面中輸入以下 命令
express -h
結果如下圖所示:


什么?你的運行結果提示:express不是內部或外部命令。那你必須要檢查一下安裝 node.js 的時候有沒有添加環(huán)境變量。點擊<a target="_blank">解決express不是內部或外部命令問題
2.微信文檔步驟
如果在沒有考慮清楚之前,就開始碼代碼的話,這樣做是非常危險的。我們先打開微信文檔,點擊 開始開發(fā) 中的 接入指南,如圖:

跳過第一步,直接看第二步,如圖:

正如幫助文檔所說的那樣,我們總結以四個步驟:
獲取微信服務器Get請求的參數(shù) signature、timestamp、nonce、echostr 將token、timestamp、nonce三個參數(shù)進行字典序排序將三個參數(shù)字符串拼接成一個字符串進行sha1加密開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信 3.接入功能的實現(xiàn)
整理好思路后我們就按照上一節(jié)的步驟去實現(xiàn)。首先我們在打開 config.json 文件,輸入以下內容:
{
"token":"wechat"
}
打開 app.js 文件,該文件屬于我們程序的入口,在文件啟動及以后路由配置都是再次實現(xiàn)的,首先我們導入重要的模塊:
const express = require('express'), //express 框架
crypto = require('crypto'), //引入加密模塊
config = require('./config');//引入配置文件
"./" 表示與 app.js 在同一及目錄下,為什么要這么寫呢?原因很簡單就是在我們通過 npm 命令安裝模塊時,如果我們指定了全局安裝,也就是 -g,安裝后的文件則會保存在我們 node.js 安裝路徑下的 node_modules 文件夾中;同理,我們不指定全局安裝,安裝后的文件則會保存在我們安裝命令輸入時所在的文件夾根目錄下的 node_modules 文件夾中,此時如果沒有該文件,系統(tǒng)會自動創(chuàng)建。
這里我們都是使用 require 去導入模塊的,node.js 怎么分辨系統(tǒng)模塊和我們自定義的模塊呢,聰明的你一定想到了,沒錯就是 "./" 這個,如果你不想用它的話,你也可以把自定義的模塊文件移到 node_modules 文件夾中。
require 是通過模塊名稱去導入模塊文件的,因此在引入的時候不需要寫入文件的后綴名。如果兩個文件重名,但后綴名不同, require 會按照 Node.js 的加載優(yōu)先級順序進行導入,即 js文件 > json文件 > node文件。

實際上就是這么簡單,我們也就不再糾結這個問題,繼續(xù)下面的工作。
實例 express 以及 創(chuàng)建服務器
//實例 express
var app = express();
//用于處理所有進入 3000 端口 get 的連接請求
app.get('/',function(req,res){
//對請求連接返回內容
res.send("Hello Node.js");
});
//監(jiān)聽3000端口
app.listen(3000);

輸入命令,啟動我們的Node.js項目
node app.js
啟動成功后,我們打開瀏覽器輸入地址:http://localhost:3000 訪問我們的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請求的參數(shù) signature、timestamp、nonce、echostr
var signature = req.query.signature,//微信加密簽名
timestamp = req.query.timestamp,//時間戳
nonce = req.query.nonce,//隨機數(shù)
echostr = req.query.echostr;//隨機字符串
//2.將token、timestamp、nonce三個參數(shù)進行字典序排序
var array = [config.token,timestamp,nonce];
array.sort();
//3.將三個參數(shù)字符串拼接成一個字符串進行sha1加密
var tempStr = array.join('');
const hashCode = crypto.createHash('sha1'); //創(chuàng)建加密類型
var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //對傳入的字符串進行加密
//4.開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信
if(resultCode === signature){
res.send(echostr);
}else{
res.send('mismatch');
}
});
//監(jiān)聽3000端口
app.listen(3000);
4.部署項目
完成了代碼后我們就可以把項目發(fā)布到外網上了,這里我用的是花生殼內網映射外網的軟件,各位可以隨意使用其他工具。
1.打開花生殼的軟件,點擊內網穿透:

2.點擊添加映射

3.配置映射

由于微信只接受80端口,我們在映射類型選擇為 網站80端口;內網主機就是我們電腦的 IP 地址;內網端口號就是node.js的監(jiān)聽端口;點擊確定后,就成功映射到外網了,可以通過花生殼提供的域名進行訪問。
5.接入驗證
再次進入微信公眾平臺在左側菜單點擊基本配置,如圖:


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


點擊提交按鈕,提示 提交成功,那么我就要祝賀你了

你已經成功的步入了Node.js開發(fā)微信的開發(fā)的第一步。
GITHUB源代碼:https://github.com/SilenceHVK/wechatByNode 。對文章有不正確之處,請給予糾正。github源代碼請順手給個 Star,最后感謝您的閱讀。
- 調試Node.JS的輔助工具(NodeWatcher)
- node.js開發(fā)中使用Node Supervisor實現(xiàn)監(jiān)測文件修改并自動重啟應用
- 我用的一些Node.js開發(fā)工具、開發(fā)包、框架等總結
- Windows8下搭建Node.js開發(fā)環(huán)境教程
- 在Linux系統(tǒng)中搭建Node.js開發(fā)環(huán)境的簡單步驟講解
- windows8.1+iis8.5下安裝node.js開發(fā)環(huán)境
- 詳解Windows下運用Docker部署Node.js開發(fā)環(huán)境
- Node.js開發(fā)之訪問Redis數(shù)據(jù)庫教程
- Node.js開發(fā)指南中的簡單實例(mysql版)
- Ubuntu 16.04 64位中搭建Node.js開發(fā)環(huán)境教程
- 詳解Node.js開發(fā)中的express-session
- linux環(huán)境安裝node.js開發(fā)環(huán)境搭建圖文教程
- Node.js開發(fā)者必須了解的4個JS要點
- Node.js開發(fā)教程之基于OnceIO框架實現(xiàn)文件上傳和驗證功能
- 如何利用node.js開發(fā)一個生成逐幀動畫的小工具
- Node.js開發(fā)之套接字(socket)編程入門示例
- node.js開發(fā)輔助工具nodemon安裝與配置詳解
相關文章
Nodejs探秘之深入理解單線程實現(xiàn)高并發(fā)原理
這篇文章主要介紹了Nodejs單線程實現(xiàn)高并發(fā)原理,對Node.js感興趣的同學,可以參考下2021-04-04
Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法
這篇文章介紹了Node.js數(shù)據(jù)流Stream之Duplex流和Transform流的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
前端自動化開發(fā)之Node.js的環(huán)境搭建教程
這篇文章主要介紹了前端自動化開發(fā)之Node.js環(huán)境搭建的相關資料,文中介紹的非常詳細,對大家學習或者使用node.js具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04
nodejs操作mongodb的填刪改查模塊的制作及引入實例
下面小編就為大家分享一篇nodejs操作mongodb的填刪改查模塊的制作及引入實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01

