node.js微信小程序配置消息推送的實(shí)現(xiàn)
在開發(fā)微信小程序時(shí),有一個(gè)消息推送,它的解釋是這樣的。
消息推送具體的內(nèi)容是下面的這個(gè)網(wǎng)址 https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html,他介紹的也還可以,就是我這里換成了node代碼。
消息推送
啟用并設(shè)置消息推送配置后,用戶發(fā)給小程序的消息以及開發(fā)者需要的事件推送,都將被微信轉(zhuǎn)發(fā)至該服務(wù)器地址中。
在微信小程序的首頁開發(fā)里面,開發(fā)設(shè)置中,微信的官網(wǎng)中,介紹的也還可以,php代碼寫的差不多也能了解什么意思,但是其中沒有告訴我們要把echostr這個(gè)參數(shù)在接口中返回出來,所以導(dǎo)致我測試了半天都是那個(gè)Token驗(yàn)證失敗。
寫一下學(xué)習(xí)記錄吧,方便后來的人遇到同樣的問題,也方便自己以后查閱。
這個(gè)里面的url服務(wù)器地址就是自己的地址(上面那個(gè)是我隨便寫的),后面接上自己的接口,比如我的就是 /token,當(dāng)你點(diǎn)擊提交的時(shí)候,會(huì)發(fā)現(xiàn)在服務(wù)器中會(huì)有如下的get請(qǐng)求
避免有些人看不清楚上面的我在這里再用代碼重新寫一下上面的東西。
GET /checkPushMsg?signature=db6e0c25b7743d8dd7ebfda1db6c742a762a2f37&echostr=1712804002525306855×tamp=1549949926&nonce=982754662 200 1.321 ms - 46
其中的各個(gè)參數(shù)微信官網(wǎng)中介紹的也非常的詳細(xì)。
開發(fā)者通過檢驗(yàn) signature 對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次 GET 請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷?echostr 參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗(yàn)流程如下:
- 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
- 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
- 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信
驗(yàn)證URL有效性成功后即接入生效,成為開發(fā)者。
檢驗(yàn)signature的node.js示例代碼:
/* 驗(yàn)證服務(wù)器推送url地址 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器URL上,GET請(qǐng)求攜帶參數(shù)如下 @params signature 微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù),nonce參數(shù) @params timestamp 時(shí)間戳 @params nonce 隨機(jī)數(shù) @params echostr 隨機(jī)字符串 */ exports.check_push = (req, res) => { console.log(req.query); let signature = req.query.signature, timestamp = req.query.timestamp, nonce = req.query.nonce, echostr = req.query.echostr; let a = crypto.createHash('sha1').update([pushToken, timestamp, nonce].sort().join('')).digest('hex'); // 這里的pushToken就是在上面的那里配置的Token if(a == signature){ // 如果驗(yàn)證成功則原封不動(dòng)的返回 res.send(echostr); }else{ res.send({ status: 400, data: "check msg error" }) } };
其中遇到的兩個(gè)問題,上面已經(jīng)說了,這里再說一下這兩個(gè)問題。
其中一個(gè)是把 token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序,當(dāng)時(shí)想自己寫一個(gè)方法,寫了好久發(fā)現(xiàn)有點(diǎn)難受,所以在網(wǎng)上找了一些東西,發(fā)現(xiàn)那個(gè) 數(shù)組的sort方法不傳遞參數(shù)就是那個(gè) 默認(rèn)字符編碼排序,所以就非常簡單了,加密直接用到crypto模塊
另外一個(gè)就是微信都沒有告訴我們要把那個(gè)echostr返回出去,雖然他的意思就是那個(gè)意思。。 這樣就可以配置成功了。
如果你同樣遇到了這個(gè)問題,看了我的文章解決了,我會(huì)非常高興。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- node事件循環(huán)和process模塊實(shí)例分析
- node.js中對(duì)Event Loop事件循環(huán)的理解與應(yīng)用實(shí)例分析
- Node中對(duì)非阻塞I/O、事件循環(huán)的知識(shí)點(diǎn)總結(jié)
- Nodejs監(jiān)控事件循環(huán)異常示例詳解
- 淺談Node 異步IO和事件循環(huán)
- Nodejs 微信小程序消息推送的實(shí)現(xiàn)
- nodejs通過釘釘群機(jī)器人推送消息的實(shí)現(xiàn)代碼
- node.js中的socket.io的廣播消息
- 分析node事件循環(huán)和消息隊(duì)列
相關(guān)文章
node爬取微博的數(shù)據(jù)的簡單封裝庫nodeweibo使用指南
這篇文章主要介紹了node爬取微博的數(shù)據(jù)的簡單封裝庫nodeweibo使用指南,需要的朋友可以參考下2015-01-01nodejs實(shí)現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報(bào)警聲)的方法
這篇文章主要介紹了nodejs實(shí)現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報(bào)警聲)的方法,結(jié)合實(shí)例形式分析了nodejs發(fā)出蜂鳴聲的原理及具體應(yīng)用方法,需要的朋友可以參考下2017-01-01AngularJS + Node.js + MongoDB開發(fā)的基于高德地圖位置的通訊錄
這篇文章主要介紹了AngularJS + Node.js + MongoDB開發(fā)的基于高德地圖位置的通訊錄,需要的朋友可以參考下2015-01-01Node.js與MySQL交互操作及其注意事項(xiàng)
這篇文章給大家主要介紹了Node.js與MySQL交互操作及其注意事項(xiàng),非常的詳細(xì),有相同需求的小伙伴可以參考下2016-10-10export?default?和?export?的使用方式示例詳解
這篇文章主要介紹了export?default?和?export?的使用方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08Node.js中path.join()優(yōu)勢例舉分析
在本篇文章里小編給大家整理的是一篇關(guān)于Node.js中path.join()優(yōu)勢例舉分析,有興趣的朋友們可以學(xué)習(xí)下。2021-08-08