node.js公眾平台開發教程,node.js公眾
用nodejs怎樣來實現對公眾平台的開發呢?
別的就不多說了,先來簡單介紹公眾平台的基本原理。
伺服器就相當於一個轉寄伺服器,終端(手機、Pad等)發起請求至伺服器,伺服器,然後將請求轉寄給自訂服務(這裡就是我們的具體實現)。服務處理完畢,然後轉寄給伺服器,伺服器再將具體響應回複到終端;通訊協定為:HTTP;資料格式為:XML。
具體的流程如所示:
其實,我們需要做的事情,就是對HTTP請求,做出響應。具體的請求內容,我們按照特定的XML格式去解析,處理完畢後,也要按照特定的XML格式返回。
平台註冊
要想完成對公眾平台的開發,我們需要註冊一個公眾平台帳號。註冊步驟如下:
開啟公用平台的官網,https://mp.weixin.qq.com/,點擊“立即註冊”。
然後根據提示,填寫基本資料,郵箱啟用,選擇類型,資訊登記,公眾號資訊,完成註冊。
在註冊完成以後,我們要對公眾號進行一些基本的設定。登入公眾號,找到【公眾號設定】,然後設定頭像以及其它資訊。
nodejs環境搭建
我們需要在公網上找一台伺服器,以便可以啟動我們的nodejs的環境,啟動環境後通過設定訪問地址,我們就可以接收伺服器發送的訊息了,並且我們也可以向伺服器發送訊息了。
在公網的伺服器中安裝完成nodejs以後,我們還需要安裝一些nodejs所用到的模組,如:express,node-xml,jssha等模組。可以通過npm命令進行安裝。
我們通過nodejs來實現向伺服器訊息的發送與接收,以及與伺服器的簽名認證。
在我們右面的編輯環境中已經為同學們安裝了nodejs環境。我們在接下來內容中就為同學們來實現伺服器的簽名認證。
建立express架構
我們在前面的課程中已經安裝了express模組,並且在我們右面的環境中已經建立了一個名為app.js的檔案。現在我們就在這個檔案中完成express架構。如下代碼:
var express = require("express");var path=require('path');var app = express();server = require('http').Server(app);app.set('views',__dirname); // 設定視圖 app.set('view engine', 'html'); app.engine( '.html', require( 'ejs' ).__express );require('./index')(app); //路由設定檔server.listen(80,function(){console.log('App start,port 80.');});
然後再添加一個名為test.html的檔案。寫入以下內容
<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title>匯智網</title></head><body><div><%=issuccess%></div></body></html>
我們還要添加一個名為index.js的檔案,來實現我們的路由。點擊編輯環境中的添加檔案按鈕,添加檔案,然後我們寫入以下代碼,其中GET請求用來驗證配置的URL合法性,POST請求用來處理訊息。
module.exports = function(app){app.get('/',function(req,res){res.render('test',{issuccess:"success"})});app.get('/interface',function(req,res){});app.post('/interface',function(req,res){});}
這樣我們需要的express架構就完成了,當然我們還可以添加public公用檔案夾以及我們要用到的中介軟體。儲存檔案,點擊【提交運行】,然後點擊【訪問測試】,去試試吧。記下訪問測試的地址,我們將在下一節中會用到該地址。
伺服器配置
我們登入公眾平台,在開發人員模式下面找到基本配置,然後修改伺服器配置。:
首先URL要填寫公網上我們安裝nodejs接收與發送資料的路徑。我們可以填寫上節中【訪問測試】的地址,然後加上對應的路由就可以了。
Token要與我們自訂伺服器端的token一致。填寫完成以後,就可以點擊提交了,在提交以前,我們啟動app.js(點擊【提交運行】)。這樣根據我們的路由匹配就可以驗證簽名是否有效了。
當配置完成以後,一定要啟用配置。
網址接入
公眾平台使用者提交資訊後,伺服器將發送GET請求到填寫的URL上,並且帶上四個參數:
參數 描述
signature 加密簽名
timestamp 時間戳記
nonce 隨機數
echostr 隨機字串
開發人員通過檢驗signature對請求進行校正(下面有校正方式)。若確認此次GET請求來自伺服器,請原樣返回echostr參數內容,則接入生效,否則接入失敗。
signature結合了開發人員填寫的token參數和請求中的timestamp參數、nonce參數。
加密/校正流程:
1、將token、timestamp、nonce三個參數進行字典序排序;
2、將三個參數字串拼接成一個字串進行sha1加密;
3、開發人員獲得加密後的字串可與signature對比,標識該請求來源於。
參數排序
首先我們確認請求是來自伺服器的get請求,那麼就可以在index.js檔案中進行添加代碼了。然後在app.get(‘/interface',function(req,res){});的function中進行添加。
先來擷取各個參數的值,如下代碼:
var token="weixin";var signature = req.query.signature;var timestamp = req.query.timestamp;var echostr = req.query.echostr;var nonce = req.query.nonce;
我們在這裡對token進行設定,讓其與伺服器中設定的token一致。
然後對其中的token、timestamp、nonce進行排序,如下代碼:
var oriArray = new Array();oriArray[0] = nonce;oriArray[1] = timestamp;oriArray[2] = token;oriArray.sort();
這樣我們就完成了排序。
參數加密
在上節中我們已經對參數進行了排序,然後我們在這一節中要將參數組成一個字串,進行SH-1加密。在加密以前要用到jssha模組,在我們的檔案中要引用該模組。
var jsSHA = require('jssha');
在上一節課中我們已經對參數排序完成,並存放在數組中,我們可以通過join方法來產生一個字串,如下代碼:
var original = oriArray.join('');
最後對該資料進行加密,如下代碼:
var jsSHA = require('jssha');var shaObj = new jsSHA(original, 'TEXT');var scyptoString=shaObj.getHash('SHA-1', 'HEX');
好了這樣就產生了我們需要的簽名字串scyptoString。
簽名對比
我們已經得到了我們想要的簽名字串scyptoString,然後我們就可以與來自伺服器的簽名進行對比了,對比通過,則我們就可以接收與發送訊息了。
if(signature == scyptoString){ //驗證成功 } else { //驗證失敗 }
以上就是本文的全部內容,希望對大家的學習有所協助
您可能感興趣的文章:
- 使用Nodejs開發公眾號後台服務執行個體
- 使用NodeJs 開發公眾號(三)事件互動執行個體