微信服務號開發接口管理之token配置失敗

配置成功.png

基本原理

利用token, timestamp, nonce三個值,計算出一個hashcode,與前端參數signature進行對比。

如果后端的token值,與網頁所填寫的保持一致,那么計算出來的hashcode就會與前端參數signature相同,否則就會不同,從而達到驗證的目的。

示意圖(官方)

image.png

微信服務號配置.png

服務器地址(URL):是下面兩個程序部署的服務器的地址,
注意如果80端口被占用,需要nginx進行轉發。
http端口固定80,不可填寫其他
https端口固定443,不可填寫其他
令牌(Token):只需要與程序中的token保持一致即可,自定義。
EncodingAESKey:點擊隨機生成

# -*- coding: utf-8 -*-
# filename: main.py
import web
# from handle import Handle
from handle import Handle 

urls = (
    '/wx', 'Handle',
)

if __name__ == '__main__':
    app = web.application(urls, globals())
    web.httpserver.runsimple(app.wsgifunc(), ("0.0.0.0", 5003))

web的包依賴安裝:推薦使用這個,conda沒有和pip超時報錯
pip3 install web.py -i https://mirrors.aliyun.com/pypi/simple/

# -*- coding: utf-8 -*-
# filename: handle.py

import hashlib
import web

class Handle(object):
    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            token = "xxx12345678"

            list1 = [token, timestamp, nonce]
            list1.sort()
            list2 = [ x.encode('utf-8') for x in list1]
            sha1 = hashlib.sha1()
            [sha1.update(x) for x in list2]
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception as Argument:
            return Argument

參考文檔
開始開發 / 接入指南 (qq.com)
基礎能力 / 服務端能力 / 消息推送 (qq.com)
開發前必讀 / 入門指引 (qq.com) 主要是這篇里的配置,一步一步來。
下載 這個是官方提供的demo代碼,但是有問題,提供的python代碼是python2.7版本的與Python3不兼容

官方demo代碼.png

微信公眾號開發中基本配置驗證token失敗的情況 - 知乎 (zhihu.com) 這個文章也是重要參考

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容