這次帶給大家Node.js如何開發微信牆,Node.js開發微信牆的注意事項有哪些,下面就是實戰案例,一起來看一下。
驗證伺服器有效性
接收使用者透過微信訂閱號碼發給伺服器的訊息
#解析收到的XML文字訊息格式為JSON
用範本建構應答使用者的XML文字訊息
將接收到的訊息透過WebSocket服務廣播
取得訊息傳送人的使用者基本資訊(名字與頭像)
微信服務大體上分為兩類,一類是訊息服務,一類是資料服務。
訊息服務是由使用者在微信服務號碼中發送訊息,然後微信服務講訊息推送給開發者伺服器,因此它是由微信主動發起,開發者伺服器被動接收的。
訊息服務的資料體格式是XML,微信服務與開發者伺服器之間透過約定token保證資料傳輸的真實與有效性。
//verify.jsvar PORT = 9529;var http = require('http');var qs = require('qs');var TOKEN = 'yuntu';function c heckSignature(params, token){ //1. 将token、timestamp、nonce三个参数进行字典序排序
//2. 將三個參數字串拼接成一個字串進行sha1加密
//3. 開發者取得加密後的字串可與signature對比,標識該請求來自微信
var key = [token, params.timestamp, params.nonce].sort().join(''); var sha1 = require('crypto').createHash('sha1'); sha1.update(key); return sha1.digest('hex') == params.signature; }var server = http.createServer(function (request, response) { //解析URL中的query部分,用qs模块(npm install qs)将query解析成json var query = require('url').parse(request.url).query; var params = qs.parse(query); console.log(params); console.log("token-->", TOKEN); if(checkSignature(params, TOKEN)){ response.end(params.echostr); }else{ response.end('signature fail'); } }); server.listen(PORT);console.log("Server runing at port: " + PORT + ".");
事實上,token驗證僅用來給開發者伺服器驗證消息來源確實是微信,而不是偽造的(因為別人不知道具體的token),作為消息發起方的微信並不要求必須驗證,也就是說,開發者也可以偷懶不做驗證(後果是別人可以模仿微信給服務post請求)。
//noverify.js/**
TOKEN 校驗是保證請求的真實有效,微信自己並不校驗TOKEN,
開發者伺服器也可以不校驗直接回傳echostr,
但是這樣的話意味著第三方也可以很容易偽造請求假裝成微信發送給開發者伺服器
*/var PORT = 9529;var http = require('http');var qs = require('qs');var server = http.createServer(function (request, response) { var query = require('url').parse(request.url).query; var params = qs.parse(query); response.end(params.echostr); }); server.listen(PORT);console.log("Server runing at port: " + PORT + ".");
將微信服務號碼的伺服器配置為開發伺服器的URL,就可以接收到微信服務號碼的訊息了
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
#以上是Node.js如何開發微信牆的詳細內容。更多資訊請關注PHP中文網其他相關文章!