关于公众号开发者<入门指引>中1.4节<开发者基本配置>中示例代码问题反馈
发布于 7 年前 作者 li44 3038 次浏览 来自 问答

你好, 在官方入门指引中的示例代码中1.4节<开发者基本配置>的代码, 关于公众号和服务器之间认证有两个问题向您反馈:

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)
            hashcode = sha1.hexdigest()
            print "handle/GET func: hashcode, signature: ", hashcode, signature
            if hashcode == signature:
                return echostr
            else:
                return ""
        except Exception, Argument:
            return Argument

第一个,  在python3.7中测试发现, hashlib.sha1对象的update方法只能接收encode后的字节码, 不可以直接接收string, 所以列表中的’token’, ‘timestamp’, 'nonce’需要encode才可以在python3中运行.

第二个, 在python3.7中测试, 内建函数map与python2不同, 它返回的是一个迭代对象, 所以仅仅map(sha1.update, list) 这一个语句, sha1.update并不会真正执行, 需要对map返回的可迭代对象进行一定的操作, 才可以激发hash的计算. 

以上反馈只针对python3.x的较新版本,  不过python的更新是大势所趋, 希望官方能采纳, 以免像我一样的小白走弯路.

回到顶部