1. 程式人生 > 其它 >微信伺服器配置 token驗證失敗

微信伺服器配置 token驗證失敗

微信伺服器配置 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相同,否則就會不同,從而達到驗證的目的。

示意圖(官方)