教你如何用node.js开发微信公众号(一)
內(nèi)容簡介
本文章簡單介紹了如何用node.js開發(fā)微信公眾號(hào)。主要內(nèi)容包括微信公眾平臺(tái)的配置,signature的驗(yàn)證,以及用node.js去處理用戶主動(dòng)發(fā)起的行為。
準(zhǔn)備工作
開發(fā)前需要安裝好node.js,因?yàn)槲沂腔趀xpress框架開發(fā)的,所以裝了express(框架按自己的需求選擇),需要有一個(gè)微信公眾號(hào),不管是訂閱號(hào)還是服務(wù)號(hào)都可以(沒有的話可以用測(cè)試公眾號(hào)),還需要一個(gè)公網(wǎng)能訪問的服務(wù)器。基本的配置就這些,后面有需要的再補(bǔ)充。接下來,開始講如何開發(fā)。
一、微信公眾平臺(tái)配置
登錄微信公眾平臺(tái),沒有公眾號(hào)的話注冊(cè)一個(gè)測(cè)試公眾號(hào)(不會(huì)的點(diǎn)這里,掃碼登錄即可)。 進(jìn)入到公眾平臺(tái),你會(huì)看到如下界面:
基本配置
進(jìn)入到公眾平臺(tái)首頁,首先會(huì)有一個(gè)測(cè)試號(hào)信息的appID,appsecret;并且appID和appsecret是不可以修改的(自己注冊(cè)公眾號(hào)的appsecret是可以重置的,操作很簡單,這里不做說明);
接口配置
接口配置信息這個(gè)模塊,首次進(jìn)來的是空的,需要自己配置;這里需要配置兩個(gè)參數(shù),一個(gè)是URL,還有一個(gè)是Token;如果不知道怎么配置,具體的可以看微信的wiki文檔,我這里也給大家說一下我配置的時(shí)候遇到的一些坑吧!
首先,點(diǎn)擊修改的時(shí)候,會(huì)變成如下界面:
注意點(diǎn):
- URL參數(shù)說明: url填的是一個(gè)公網(wǎng)上部署好的接口地址(是真實(shí)存在已經(jīng)部署好能夠請(qǐng)求的接口),接口必須以http://或https://開頭,僅支持80端口和443端口。
- Token參數(shù)說明: token填的是自己定義的一個(gè)標(biāo)識(shí),需要注意的一點(diǎn)就是這邊配置好了以后,在上面那個(gè)url的接口里面設(shè)置的token需要和這個(gè)保持一致,不然配置是不會(huì)成功的。
具體的配置指南戳這里
當(dāng)你點(diǎn)擊提交的時(shí)候,會(huì)發(fā)送一個(gè)get請(qǐng)求到你剛剛填寫的URL地址,并且會(huì)帶上4個(gè)參數(shù),分別是:signature,timestamp,echostr,nonce,然后在服務(wù)端驗(yàn)證配置是否通過;
如果配置成功,則會(huì)有如下成功提示:
接口配置到這里就完成了。
JS接口安全域名
這個(gè)配置主要是為了能夠調(diào)js-sdk接口配置的,只有在該域名下,開發(fā)才能調(diào)用微信js接口(像調(diào)用二維碼,上傳預(yù)覽文件等功能),文檔也寫的比較詳細(xì),這里不做過多說明。
微信官方JS-SDK文檔戳這里
到這里,微信公眾平臺(tái)的配置就差不多了,接下來就可以開始服務(wù)端的開發(fā)了。
二、node服務(wù)端開發(fā)配置
還記得微信公眾平臺(tái)配置的時(shí)候填寫的url和token值嗎?這里就用到了,來看下面一段代碼:
const bodyParser = require('body-parser'); //處理請(qǐng)求參數(shù)server.get("/", function (req, res) {var token = "xxxx";var signature = req.query.signature;var timestamp = req.query.timestamp;var echostr = req.query.echostr;var nonce = req.query.nonce;var oriArray = new Array();oriArray[0] = nonce;oriArray[1] = timestamp;oriArray[2] = token;oriArray.sort();var original = oriArray.join('');var sha = sha1(original)if (signature === sha) {//驗(yàn)證成功res.send(echostr)} else {//驗(yàn)證失敗res.send({ "message": "error" })}}); 復(fù)制代碼還記得上面說點(diǎn)擊提交的時(shí)候會(huì)發(fā)一個(gè)get請(qǐng)求嗎?還說會(huì)帶signature,timestamp,echostr,nonce四個(gè)參數(shù)。就是在這個(gè)接口中,判斷配置是否成功的,來看下這個(gè)get請(qǐng)求具體做了什么事情。
具體可以看官方文檔(文檔示例是php的),文檔地址 戳這里;
到這里微信開發(fā)的公眾號(hào)配置和node服務(wù)端配置就完成了,接下來可以開始愉快的開發(fā)啦!
三、用戶信息處理
首先問一個(gè)問題,當(dāng)用戶關(guān)注公眾號(hào),發(fā)送消息的時(shí)候,開發(fā)者在哪里能接收到這些消息,并做相應(yīng)的回復(fù)呢?
答案是微信公眾平臺(tái)配置的URL的post請(qǐng)求,如果說該URL的get請(qǐng)求是為了配置用的,那么post請(qǐng)求就是為了處理用戶信息。
來看下面一段代碼
通過上面這段代碼,可以看出,所有的消息處理都是在一個(gè)post中處理,大致的流程是服務(wù)端會(huì)接收一段固定格式xml的字符串,具體格式如下:
<xml><ToUserName><![CDATA[${toUser}]]></ToUserName> //接收方<FromUserName><![CDATA[${fromUser}]]></FromUserName> //發(fā)送方<CreateTime>${new Date().getTime()}</CreateTime> //發(fā)送時(shí)間<Event>< ![CDATA[VIEW] ]></Event> //事件類型<MsgType><![CDATA[text]]></MsgType> //消息類型<Content><![CDATA[${content}]]></Content> //內(nèi)容 </xml>; 復(fù)制代碼當(dāng)接收到xml消息后,用xml2js解析xml,根據(jù)Event和MsgType做事件類型的判斷,并做相應(yīng)的處理,最后,res.send(xml)發(fā)送數(shù)據(jù)的時(shí)候也是要一個(gè)xml格式的數(shù)據(jù),要注意的一點(diǎn)是,ToUserName和FromUserName不要弄錯(cuò)就可以了!具體的文檔有詳細(xì)的解釋,文檔戳這里哦;
好了,今天的內(nèi)容就講到這里了,剩下還有一些關(guān)于生成access_token,還有如何調(diào)用js-sdk的內(nèi)容過兩天更新吧!
小弟這里有一份react后臺(tái)管理腳手架模版,有需要的自取 戳我,戳我,戳我,github
關(guān)注
大家好,我是西瓜太郎,小前端一枚,坐標(biāo)杭州,今天入住掘金,第一次寫文章,如有寫的不適的地方還請(qǐng)大佬多多指教,如有助于八方兄弟,那小弟搬磚將會(huì)更加有動(dòng)力!
轉(zhuǎn)載于:https://juejin.im/post/5be3af8ae51d4554b54b0a0d
總結(jié)
以上是生活随笔為你收集整理的教你如何用node.js开发微信公众号(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyQt5:窗口的基本功能
- 下一篇: Spark PersistenceEng