這個必定要吐槽一下,雖然沒什麼用。若是想改,早就改了。騰訊家大業大,不怎麼在意個別用戶的吐槽。並且,開發者,並非用戶。寫文檔的兄弟勿怪,雖然我以爲你不會看到。之因此說這些,是由於,騰訊一貫以完美的產品稱霸天下。一個頁面的文字就能挑出來這麼多問題,是否是有點說不過去?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的有所不一樣,至於哪裏不一樣,有待詳細瞭解。目前以解決問題爲主要工做。