验证服务器地址的有效性
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
校验流程:
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
Python代码实现(以Flask框架为例):
from flask import Flask,request,make_response
import hashlib
app = Flask(__name__)
@app.route('/wechat8000')
def wechat():
#设置token
token = 'python'
#获取参数
data = request.args
signature = data.get('signature')
timestamp = data.get('timestamp')
nonce = data.get('nonce')
echostr = data.get('echostr')
#对参数进行字典排序,拼接字符串
temp = [timestamp,nonce,token]
temp.sort()
temp = ''.join(temp)
#加密
if (hashlib.sha1(temp).hexdigest()==signature):
return make_response(echostr)
else:
return 'error',403
if __name__ == '__main__':
app.run(port=8000)