1. 程式人生 > >微信公眾號開發-遇到的坑

微信公眾號開發-遇到的坑

.py 自己 ash sel 80端口 map __main__ src ***

在配置後端服務器時,報錯 "系統發生錯誤,請稍後重試"

情景:配置如下截圖:
技術分享圖片

按照要求使用http標準80端口,但是提交就報錯。在服務端抓包,根本沒收到請求。那這個報錯就是微信公眾平臺沒有發送過來呀。
折騰了半個小時!
我去,發現不能在url中指定80端口,就可以成功,如下圖:
技術分享圖片
這樣不指定端口才正確。微信說明還是不是很明確

在handle模塊,實例代碼是py2代碼,py3中要進行編碼轉換

  • 微信開發文檔的代碼,在py3中執行會一直報token驗證錯誤。
# -*- 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 = "xxxx" #請按照公眾平臺官網\基本配置中信息填寫

            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            map(sha1.update, list)  # 這裏list中的字符串在py2中是符合sha1.update要求的
            hashcode = sha1.hexdigest()
            print "handle/GET func: hashcode, signature: ", hashcode, signature
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception, Argument:
            return Argument
  • py3修改後的
"""
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 = "****"   # 自己定義的tokent

            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            sha1.update(‘‘.join(list).encode(‘utf-8‘))  # 將py3中的字符串編碼為bytes類型
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature:", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception as e:
            print(e)


if __name__ == ‘__main__‘:
    pass

微信公眾號開發-遇到的坑