node.js微信小程序配置消息推送

  在開發微信小程序時,有一個消息推送,它的解釋是這樣的。php

  消息推送具體的內容是下面的這個網址   https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html,他介紹的也還能夠,就是我這裏換成了node代碼。html

  消息推送 

  啓用並設置消息推送配置後,用戶發給小程序的消息以及開發者須要的事件推送,都將被微信轉發至該服務器地址中。
 
  在微信小程序的首頁開發裏面,開發設置中,微信的官網中,介紹的也還能夠,php代碼寫的差很少也能瞭解什麼意思,可是其中沒有告訴咱們要把echostr這個參數在接口中返回出來,因此致使我測試了半天都是那個Token驗證失敗。
  寫一下學習記錄吧,方便後來的人遇到一樣的問題,也方便本身之後查閱。
  

 

 

  這個裏面的url服務器地址就是本身的地址(上面那個是我隨便寫的),後面接上本身的接口,好比個人就是 /token,當你點擊提交的時候,會發如今服務器中會有以下的get請求node

 避免有些人看不清楚上面的我在這裏再用代碼從新寫一下上面的東西。小程序

GET /checkPushMsg?signature=db6e0c25b7743d8dd7ebfda1db6c742a762a2f37&echostr=1712804002525306855&timestamp=1549949926&nonce=982754662 200 1.321 ms - 46

 其中的各個參數微信官網中介紹的也很是的詳細。微信小程序

  

 

  開發者經過檢驗 signature 對請求進行校驗(下面有校驗方式)。若確認這次 GET 請求來自微信服務器,請原樣返回 echostr 參數內容,則接入生效,成爲開發者成功,不然接入失敗。加密/校驗流程以下:數組

  1. 將token、timestamp、nonce三個參數進行字典序排序
  2. 將三個參數字符串拼接成一個字符串進行sha1加密
  3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信

  驗證URL有效性成功後即接入生效,成爲開發者。服務器

  檢驗signature的node.js示例代碼:微信

  

 1 /*
 2   驗證服務器推送url地址
 3   開發者提交信息後,微信服務器將發送GET請求到填寫的服務器URL上,GET請求攜帶參數以下
 4      @params signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數,nonce參數
 5      @params timestamp    時間戳
 6      @params nonce    隨機數
 7      @params echostr    隨機字符串
 8 */
 9 exports.check_push = (req, res) => {
10   console.log(req.query);
11   let signature = req.query.signature,
12       timestamp = req.query.timestamp,
13       nonce = req.query.nonce,
14       echostr = req.query.echostr;
15   let a = crypto.createHash('sha1').update([pushToken, timestamp, nonce].sort().join('')).digest('hex');  // 這裏的pushToken就是在上面的那裏配置的Token
16 
17   if(a == signature){
18     // 若是驗證成功則原封不動的返回
19     res.send(echostr);
20   }else{
21     res.send({
22       status: 400,
23       data: "check msg error"
24     })
25   }
26 };

  其中遇到的兩個問題,上面已經說了,這裏再說一下這兩個問題。學習

  其中一個是把 token、timestamp、nonce三個參數進行字典序排序,當時想本身寫一個方法,寫了很久發現有點難受,因此在網上找了一些東西,發現那個 數組的sort方法不傳遞參數就是那個 默認字符編碼排序,因此就很是簡單了,加密直接用到crypto模塊測試

  另一個就是微信都沒有告訴咱們要把那個echostr返回出去,雖然他的意思就是那個意思。。 這樣就能夠配置成功了。

  若是你一樣遇到了這個問題,看了個人文章解決了,我會很是高興。

相關文章
相關標籤/搜索