微信伺服器配置 token驗證失敗
阿新 • • 發佈:2022-05-27
微信伺服器配置 token驗證失敗
為微信公眾號配置伺服器時提示【token驗證失敗】
Author: Mon's_Works
注意事項
- 伺服器URL不是任意網址都可以
- Token是任意值,不是access_token
- 後端需要返回一個整數,而非字串
伺服器要求
基本原理
在網頁上提交配置時,網頁會向URL傳送若干引數,並期望伺服器返回其中的一個。如果返回值正確,則配置成功,否則失敗。
實現步驟
1.後端收到請求時,從請求中獲取signature, echostr, timestamp, nonce等4個引數;
2.利用所得引數,根據官方提供的計算方法進行驗證。理論上,如果只是測試,這個驗證過程可以省略,直接返回結果。
3.返回echostr,格式為整數,而非字串。如果以字串格式返回echostr,也會提示【token驗證失敗】。
後端程式碼示例
官方示例採用Python 2,以下示例為Python 3,有所改動,注意甄別。
from fastapi import FastAPI import hashlib app = FastAPI() @app.get("/") async def root(signature: str = '', echostr: str = '', timestamp: str = '', nonce: str = ''): token = "與網頁所填token一致" # 獲取請求中的引數,計算驗證 list = [token, timestamp, nonce] list.sort() sha1 = hashlib.sha1() sha1.update(list[0].encode('utf-8')) sha1.update(list[1].encode('utf-8')) sha1.update(list[2].encode('utf-8')) hashcode = sha1.hexdigest() if hashcode == signature: print('successed') # 需返回數字,而非字串 return int(echostr) else: print('failed') return 0
驗證邏輯
基本原理
利用token, timestamp, nonce三個值,計算出一個hashcode,與引數signature進行對比。
如果後端的token值,與網頁所填寫的保持一致,那麼計算出來的hashcode就會與引數signature相同,否則就會不同,從而達到驗證的目的。