验证服务器地址的有效性

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

请求参数

开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

校验流程:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与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)