2022年 11月 3日

Python(三)微信公众号开发

ps:暂未完善,先做记录。本文核心讲外网穿透及微信Token验证

阅读 基本开发流程

申请个人公众号-订阅号

微信公众平台https://mp.weixin.qq.com

自定义菜单

微信公众平台当然不只是给开发人员使用的,它提供了很多非技术人员可在UI界面上交互操作的功能模块。

如配置消息回复、自定义菜单、发布文章等

微信Token验证

微信提供了非开发人员也可自定义编辑的菜单UI,但是如果我们想自定义脚本开发呢?那么则需要对接微信SDK进行开发。

说明:由于微信服务器只是起到转发消息的作用,接收消息后的处理在我们本地,所以需要连接到外网,故此进行外网穿透

流程:

一:进行外网穿透

1.下载natapp客户端 到本地任意路径都可以,配置config.ini

  1. [default]
  2. authtoken=01d12c4dc7xxxxx
  3. clienttoken=
  4. log=none
  5. loglevel=ERROR
  6. http_proxy=

 a.购买 隧道 和 二级域名

 这里注意最好购买支持https的隧道 和有SSL证书的二级域名,价格都不贵,隧道允许购买多个

b.在 我的隧道 里进行配置

配置好的隧道如下

 注意:我们需要把 authtoken 拷贝到ini里对应的authToken

这时我们运行natapp.exe即可看到

 到这里natapp配置完成

2.我们找到微信公众号测试平台 公众平台测试号Token验证 进行配置URL和Token

Tips:这里点提交是不会成功的,下面会讲到 。Token需要在下文使用到(WECHAT_TOKEN )

我们把Forwarding里https链接拷贝到浏览器后可以看到自动生成了新的url   *******/http/in

 这里我们把浏览器新的url链接拷贝到 公众号测试平台-接口配置信息 对应的URL上

下面需要使用到   appID、appsecret、Token、URL 在代码里进行验证

为什么要验证?请看  微信Token验证

3.验证微信Token

使用 VSCode、Python3.10 版本不重要,如果缺失引用需要 pip 安装对应包(安装Python记得勾选pip)

pip install flask

pip install requests

如未学过Python,推荐廖雪峰老师的网站,简单易学

Python代码如下:

  1. from flask import Flask, request, abort, render_template
  2. import hashlib
  3. # 常量
  4. WECHAT_TOKEN = "xxxxxxx" # 微信的token令牌,和配置时的token要统一
  5. WECHAT_APPID = "xxxxxxx" # appID
  6. WECHAT_APPSECRET = "xxxxxxxx" # AppSecret
  7. app = Flask(__name__)
  8. #运行后执行的是http://127.0.0.1:80/http/in 链接
  9. @app.route("/http/in", methods=["GET", "POST"])
  10. def wechat():
  11. """对接微信公众号服务器"""
  12. print('对接微信公众号服务器')
  13. # 1、提取微信服务器发送的参数
  14. signature = request.args.get("signature")
  15. timestamp = request.args.get("timestamp")
  16. nonce = request.args.get("nonce")
  17. # 2、校验参数,确定数据源是不是微信后台
  18. if not all([signature, timestamp, nonce]):
  19. abort(400)
  20. # 3、按照微信的流程进行计算签名,进行sha1加密, 得到正确的签名值
  21. li = [WECHAT_TOKEN, timestamp, nonce]
  22. li.sort()
  23. tmp_str = "".join(li)
  24. sign = hashlib.sha1(tmp_str.encode("utf-8")).hexdigest()
  25. # 4、判断计算的签名值与请求的签名参数是否等,如果相同,则证明请求来自微信服务器
  26. if signature != sign:
  27. abort(403)
  28. else:
  29. # 5、表示是第一次接入微信服务器的验证
  30. if request.method == "GET":
  31. echostr = request.args.get("echostr")
  32. if not echostr:
  33. abort(400)
  34. return echostr
  35. if __name__ == '__main__':
  36. app.run(host="127.0.0.1", port=8080, debug=True)
  37. #127.0.0.1是localhost本地服务器 8080端口要和natapp上配置的端口保持一致。运行natapp的时候可看到

到这里基本我们都写完配置完了,最后开始运行

a.运行Python脚本,推荐快捷鼠标右键Run Python File In Terminal ,如果有条件可断点查看执行过程

b.运行natapp.exe (如果先运行了natapp.exe,Python会提示不允许套接字也就是端口占用)

c.点击微信公众号测试平台Token测试号管理里的【提交】按钮

Tips:有条件的同学可以用断点调试python脚本,看接收到的数据

好了,到这里微信Token配置完成,提交按钮已消失,哎,挺不容易的

二:

参考文献:

1. 关于装饰器@app.route的正解 –>         Python装饰器@app.route() Flask

2.关于外网穿透的参考 –>    Ngrok外网穿透

3.微信公众号开发详细流程–> 微信公众号开发基本流程