其中的各個參數(shù)微信官網(wǎng)中介紹的也非常的詳細。
開發(fā)者通過檢驗 signature 對請求進行校驗(下面有校驗方式)。若確認此次 GET 請求來自微信服務(wù)器,請原樣返回 echostr 參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。加密/校驗流程如下:
驗證URL有效性成功后即接入生效,成為開發(fā)者。
檢驗signature的node.js示例代碼:
/* 驗證服務(wù)器推送url地址 開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器URL上,GET請求攜帶參數(shù)如下 @params signature 微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù),nonce參數(shù) @params timestamp 時間戳 @params nonce 隨機數(shù) @params echostr 隨機字符串 */ 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){ // 如果驗證成功則原封不動的返回 res.send(echostr); }else{ res.send({ status: 400, data: "check msg error" }) } };
其中遇到的兩個問題,上面已經(jīng)說了,這里再說一下這兩個問題。
其中一個是把 token、timestamp、nonce三個參數(shù)進行字典序排序,當時想自己寫一個方法,寫了好久發(fā)現(xiàn)有點難受,所以在網(wǎng)上找了一些東西,發(fā)現(xiàn)那個 數(shù)組的sort方法不傳遞參數(shù)就是那個 默認字符編碼排序,所以就非常簡單了,加密直接用到crypto模塊
另外一個就是微信都沒有告訴我們要把那個echostr返回出去,雖然他的意思就是那個意思。 這樣就可以配置成功了。
如果你同樣遇到了這個問題,看了我的文章解決了,我會非常高興。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com