接入流程很簡單,我這邊使用tornado實現的
微信服務器會請求你的接口,附帶4個參數,分別是 timestamp、nonce、signature、echostr
我們將自己輸入的token(驗證接口的時候你自己輸入的)、timestamp、nonce放入一個列表中並sort()下,接下來拼接成字符串,使用hashlib.sha1()把拼接的字符串加密下,在跟signature這個字段的值進行比較,一致後原樣將echostr返回即可,如果想要省事就不用做這些驗證的流程了,直接將ehcostr返回即可。上代碼.....
from tornado.web import RequestHandler
class BaseHander(RequestHandler):
def __init__(self, application, request, **kwargs):
super().__init__(application, request, **kwargs)
def args_to_dict(self):
data = dict()
if self.request.body.decode():
try:
data.update(json.loads(self.request.body.decode()))
except json.decoder.JSONDecodeError:
for i in self.request.body.decode().split('&'):
k = i.split('=')[0]
v = i.split('=')[1].decode()
data[k] = v
except Exception as e:
self.write(ReturnMsg.Server_Inner_Error['resMsg'])
elif self.request.arguments:
for k in self.request.arguments:
data[k] = self.get_argument(k)
return data
else:
return data
return data
class authentiCation(BaseHander):
def get(self, *args, **kwargs):
data = self.args_to_dict()
import hashlib
token = 'lsxboy'
timestamp = data['timestamp']
nonce = data['nonce']
signature = data['signature']
echostr = data['echostr']
resu = [token, timestamp, nonce]
resu.sort()
re = ''.join(resu)
sha = hashlib.sha1(re.encode('utf-8'))
re = sha.hexdigest()
if re == signature:
return self.write(echostr)
ps:如有錯誤,請留言,我會及時糾正。