這篇文章主要為大家分享利用node.js開發(fā)微信公眾平臺教程,如何進(jìn)行微信開發(fā),有興趣的小夥伴們可以參考一下
用nodejs怎麼來實(shí)現(xiàn)對微信公眾平臺的開發(fā)呢?
別的就不多說了,先來簡單介紹微信公眾平臺的基本原理。
微信伺服器就相當(dāng)於一個(gè)轉(zhuǎn)發(fā)伺服器,終端機(jī)(手機(jī)、Pad等)發(fā)起請求至微信伺服器,微信伺服器,然後將請求轉(zhuǎn)發(fā)給自訂服務(wù)(這裡就是我們的具體實(shí)作)。服務(wù)處理完畢,然後轉(zhuǎn)寄至微信伺服器,微信伺服器再將具體回應(yīng)回復(fù)到終端機(jī);通訊協(xié)定為:HTTP;資料格式為:XML。
具體的流程如下圖所示:
其實(shí),我們需要做的事情,就是對HTTP請求,做出回應(yīng)。具體的請求內(nèi)容,我們依照特定的XML格式去解析,處理完畢後,也要依照特定的XML格式回傳。
平臺註冊
要想完成對微信公眾平臺的開發(fā),我們需要註冊一個(gè)微信公眾平臺帳號。註冊步驟如下:?
開啟微信公共平臺的官網(wǎng),https://mp.weixin.qq.com/,點(diǎn)選「立即註冊」。
然後根據(jù)提示,填寫基本信息,郵箱激活,選擇類型,信息登記,公眾號信息,完成註冊。
在註冊完成以後,我們要對公眾號進(jìn)行一些基本的設(shè)定。登入公眾號,找到【公眾號設(shè)定】,然後設(shè)定頭像以及其它資訊。
nodejs環(huán)境搭建
我們需要在公網(wǎng)上找一臺伺服器,以便可以啟動(dòng)我們的nodejs的環(huán)境,啟動(dòng)環(huán)境後透過設(shè)定存取位址,我們就可以接收微信伺服器發(fā)送的訊息了,我們也可以向微信伺服器發(fā)送訊息了。
在公網(wǎng)的伺服器中安裝完成nodejs以後,我們還需要安裝一些nodejs所用到的模組,如:express,node-xml,jssha等模組??梢酝高^npm指令進(jìn)行安裝。
我們透過nodejs來實(shí)現(xiàn)向微信伺服器訊息的發(fā)送與接收,以及與微信伺服器的簽章認(rèn)證。
在我們右邊的編輯環(huán)境中已經(jīng)為同學(xué)們安裝了nodejs環(huán)境。我們在接下來內(nèi)容中就為同學(xué)來實(shí)現(xiàn)微信伺服器的簽章認(rèn)證。
創(chuàng)建express框架
我們在前面的課程中已經(jīng)安裝了express模組,並且在我們右面的環(huán)境中已經(jīng)創(chuàng)建了一個(gè)名為app.js的文件?,F(xiàn)在我們就在這個(gè)檔案中完成express框架。如下程式碼:
var express = require("express"); var path=require('path'); var app = express(); server = require('http').Server(app); app.set('views',dirname); // 設(shè)置視圖 app.set('view engine', 'html'); app.engine( '.html', require( 'ejs' ).express ); require('./index')(app); //路由配置文件 server.listen(80,function(){ console.log('App start,port 80.'); });
然後再新增一個(gè)名為test.html的檔案。寫入以下內(nèi)容
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>匯智網(wǎng)</title> </head> <body> <p><%=issuccess%></p> </body> </html>
我們還要新增一個(gè)名為index.js的文件,來實(shí)現(xiàn)我們的路由。點(diǎn)擊編輯環(huán)境中的新增文件按鈕,新增文件,然後我們寫入以下程式碼,其中GET請求用來驗(yàn)證配置的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框架就完成了,當(dāng)然我們也可以加入public公用資料夾以及我們要用到的中間件。儲存文件,點(diǎn)選【提交運(yùn)行】,然後點(diǎn)選【訪問測試】,去試試看。記下訪問測試的位址,我們將在下一節(jié)中將使用到該位址。
微信伺服器設(shè)定
我們登入微信公眾平臺,在開發(fā)者模式下方找到基本配置,然後修改伺服器設(shè)定。如圖所示:
首先URL要填入公網(wǎng)上我們安裝nodejs接收與發(fā)送資料的路徑。我們可以填寫上節(jié)【存取測試】的位址,然後加上對應(yīng)的路由就可以了。
Token要與我們自訂伺服器端的token一致。填寫完成以後,就可以點(diǎn)選提交了,提交以前,我們啟動(dòng)app.js(點(diǎn)選【提交運(yùn)行】)。這樣根據(jù)我們的路由匹配就可以驗(yàn)證簽章是否有效了。
當(dāng)設(shè)定完成以後,一定要啟用設(shè)定。
網(wǎng)址接入
公眾平臺用戶提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的URL上,并且?guī)纤膫€(gè)參數(shù):
參數(shù) 描述
signature 微信加密簽名
timestamp 時(shí)間戳
nonce 隨機(jī)數(shù)
echostr 隨機(jī)字符串
開發(fā)者通過檢驗(yàn)signature對請求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請求來自微信服務(wù)器,請?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,否則接入失敗。
signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)。
加密/校驗(yàn)流程:
1、將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序;
2、將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密;
3、開發(fā)者獲得加密后的字符串可與signature對比,標(biāo)識該請求來源于微信。
參數(shù)排序
首先我們確認(rèn)請求是來自微信服務(wù)器的get請求,那么就可以在index.js文件中進(jìn)行添加代碼了。然后在app.get(‘/interface',function(req,res){});的function中進(jìn)行添加。
先來獲取各個(gè)參數(shù)的值,如下代碼:
var token="weixin"; var signature = req.query.signature; var timestamp = req.query.timestamp; var echostr = req.query.echostr; var nonce = req.query.nonce;
我們在這里對token進(jìn)行設(shè)置,讓其與微信服務(wù)器中設(shè)置的token一致。
然后對其中的token、timestamp、nonce進(jìn)行排序,如下代碼:
var oriArray = new Array(); oriArray[0] = nonce; oriArray[1] = timestamp; oriArray[2] = token; oriArray.sort();
這樣我們就完成了排序。
參數(shù)加密
在上節(jié)中我們已經(jīng)對參數(shù)進(jìn)行了排序,然后我們在這一節(jié)中要將參數(shù)組成一個(gè)字符串,進(jìn)行SH-1加密。在加密以前要用到j(luò)ssha模塊,在我們的文件中要引用該模塊。
var jsSHA = require('jssha');
在上一節(jié)課中我們已經(jīng)對參數(shù)排序完成,并存放在數(shù)組中,我們可以通過join方法來生成一個(gè)字符串,如下代碼:
var original = oriArray.join('');
最后對該數(shù)據(jù)進(jìn)行加密,如下代碼:
var jsSHA = require('jssha'); var shaObj = new jsSHA(original, 'TEXT'); var scyptoString=shaObj.getHash('SHA-1', 'HEX');
好了這樣就生成了我們需要的簽名字符串scyptoString。
簽名對比
我們已經(jīng)得到了我們想要的簽名字符串scyptoString,然后我們就可以與來自微信服務(wù)器的簽名進(jìn)行對比了,對比通過,則我們就可以接收與發(fā)送消息了。
if(signature == scyptoString){ //驗(yàn)證成功 } else { //驗(yàn)證失敗 }
以上是利用node.js開發(fā)微信公眾平臺教程的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)