这个必定要吐槽一下,虽然没什么用。若是想改,早就改了。腾讯家大业大,不怎么在意个别用户的吐槽。并且,开发者,并非用户。写文档的兄弟勿怪,虽然我以为你不会看到。之因此说这些,是由于,腾讯一贯以完美的产品称霸天下。一个页面的文字就能挑出来这么多问题,是否是有点说不过去?php
第一,模模糊糊感受,彷佛要作微信开发,就得启用开发者模式,而后“开发”菜单下有个“基本配置”菜单,上面的一节是“公众号开发信息”,这个相对比较简单,一看就懂。python
问题在下面那一节,叫个“服务器配置(未启用)”,而后没有任何说明,有没有以为这个说法太笼统了?什么叫服务器配置?网上大量关于这个问题的询问。其实关于这个功能的说明,藏在了那个“启用”按钮的提示里,点“启用”时,会有一个说明。腾讯应当把说明放在页面的显示位置。web
第二,这个页面没有任何可以指向帮助的连接,你得去点“修改配置”按钮,才能看到一些帮助的连接。服务器
一样的,网上有大量的关于那个URL是什么的提问。微信
打开第一个连接“接入指南”,会跳到“微信公众平台技术文档”页的首页,前五项是一些常规性的说明,对于一个新手来说,基本没用。重要的是第六项,“入门指引”,点击进入,是一个长长的目录,这倒无可厚非,接下来,咱们会看到的必定是一个技术大牛写的文档,假设用户具备至关的技术基础,且文字至关简练,确实不是给小白看的。以下,中括号里是丢掉的字。网络
“公众平台的技术文档【的】目的【是】为了简明扼要的交代接口的使用,语句不免苦涩难懂,甚至对于不一样的读者,有语意歧义。万事皆是入门难,对于刚入门的开发者【来】讲,更是难上加难,每每看了半天wiki,就是不懂说的什么鬼。”微信开发
第一步,首先推了一下腾讯的云服务器。微信公众平台
这无可厚非,理所固然。问题是那句“学生党注意:腾讯公司为在读高校生提供了云+校园计口,1元/月便可使用腾讯云。”,其中的连接已然失效。框架
第二步,搭建服务socket
“以web.py网络框【架】,python,腾讯云服务器为例介绍。”
接下来:
“3)若是出现“socket.error: No socket could be created“错误信息,可能为80端口号被占用,多是没有权限,请自行查询解决办法。若是碰见其余错误信息,请到web.py官方文档,学习webpy 框架3执行命令:sudo python main.py 80 。”
后面那部分,
应当是“学习webpy 框架
执行命令:sudo python main.py 80”
接下来:
“如今选择提交确定是验证token失败,由于还须要完成代码逻辑”,这一句应当往上移,放到上面的说明中,相信很多人看完上一步之后,就尝试提交,搞半天失败之后,再往下看,发现还有这么一句,会不会牙根痒痒。
接下来的Python代码,应当是python2版本,我改为了python3
# -*- coding: utf-8 -*- # filename: handle.py import hashlib import web class Handle(object): def GET(self): #try: data = web.input() print(data) if len(data) == 0: return "hello, this is handle view" signature = data.signature signature = signature print("signature:",data.signature) timestamp = data.timestamp timestamp = bytes(timestamp,'utf-8') print("timestamp:",data.timestamp) nonce = data.nonce nonce = bytes(nonce,'utf-8') print("nonce:",data.nonce) echostr = data.echostr echostr = bytes(echostr,'utf-8') print("echostr:",data.nonce) token = bytes("sabre",'utf-8') #请按照公众平台官网\基本配置中信息填写 print("token:",token) list1 = [token, timestamp, nonce] list1.sort() print("list1:", list1) sha1 = hashlib.sha1() #map(sha1.update, list1) sha1.update(list1[0]) sha1.update(list1[1]) sha1.update(list1[2]) hashcode = sha1.hexdigest() print("handle/GET func: hashcode, signature: ", hashcode, signature) print("hashcode:",hashcode) print("signatue:",signature) if hashcode == signature: print("相等") return echostr else: print("不等") return "" #except (Exception) as Argument: # return Argument
最开始老是报“token验证失败”,我作了各类测试各类输出,最后,把map(sha1.update, list1)改为了
sha1.update(list1[0])
sha1.update(list1[1]) sha1.update(list1[2])
才生效,验证经过。
p2的map函数和p3的有所不一样,至于哪里不一样,有待详细了解。目前以解决问题为主要工做。