微信公众平台测试接口:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
接下来的学习都会以测试平台为基础。
验证服务器有效性
开发者提交信息后,微信服务器将发送GET请求
到填写的服务器地址URL上,GET请求
携带四个参数:
规则:开发者通过检验signature
对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr
参数内容,则接入生效,成为开发者成功,否则接入失败。
校验流程:
- 将
token
、timestamp
、nonce
三个参数进行字典序排序 - 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与
signature
对比,标识该请求来源于微信
代码实现:
from flask import Flask, request, abort
import hashlib
# token是个常量
WECHAT_TOKEN = "iamthetoken"
app = Flask(__name__)
@app.route("/")
def index():
# 接收参数
signature = request.args.get("signature")
timestamp = request.args.get("timestamp")
nonce = request.args.get("nonce")
echostr = request.args.get("echostr")
# 校验参数
if not all([signature,timestamp,nonce,echostr]):abort(400)
# 校验
li=[WECHAT_TOKEN, timestamp, nonce]
li.sort() # 三个参数排序
tmp_str="".join(li).encode("utf-8") # 拼接字符串
sign = hashlib.sha1(tmp_str).hexdigest() # 加密得到签名值
if signature != sign:abort(403)
else:return echostr
if __name__ == "__main__":
app.run()
将其部署到服务器上,参考flask部署
最后在测试平台填写:
URL
上必须填写 http ,Token
必须和代码里的常量token一样。
即可完成。