Python 微信公众号开发:服务器配置与消息处理流程

Ruby
Ruby
发布时间:2026-10-11| 2人浏览过
原创

本文详细解析使用 Python 和 Flask 进行微信公众号开发的核心流程。内容涵盖从注册公众号、登录后台配置服务器 URL 和 Token,到利用 Flask 接收微信 GET 请求进行签名验证(SHA1 加密),以及处理 POST 请求解析用户 XML 消息并构造返回响应的完整步骤。

微信公众号开发基础流程

进行微信公众号开发,首先需要完成基础环境的搭建与后台配置。具体步骤如下:

  1. 注册公众号:在微信公众平台完成账号注册。
  2. 进入开发配置:登录公众号后台,找到“开发”菜单下的“基本配置”选项。
  3. 配置服务器信息:填写服务器 URL(例如使用阿里云服务器部署的 Flask 后端地址)以及自定义的 Token。
  4. 完成验证:微信服务器会向你的 URL 发送 GET 请求进行验证。验证通过后,保存并启用服务器配置。

服务器端实现与签名验证

在服务器端,我们需要使用 Python 的 Flask 框架来处理微信发来的请求。核心逻辑分为 GET 请求的签名验证和 POST 请求的消息处理。

1. 签名验证机制

微信服务器通过 GET 请求携带 `signature`、`timestamp`、`nonce` 和 `echostr` 参数。为了验证请求来源,服务器需执行以下操作:

  1. 将 `token`(开发者自定义)、`timestamp` 和 `nonce` 三个参数进行字典序排序。
  2. 将排序后的字符串拼接成一个长字符串。
  3. 对该字符串进行 SHA1 加密,生成 `signature`。
  4. 将生成的 `signature` 与微信传来的 `signature` 进行比对。若一致,则验证通过。
  5. 验证通过后,原样返回 `echostr` 随机字符串,完成服务器配置启用。

2. 消息处理与响应

当用户发送消息时,微信服务器会向你的 URL 发送 POST 请求,请求体中包含用户发送内容的 XML 数据。服务器需要:

  1. 解析接收到的 XML 数据,提取用户发送的信息。
  2. 根据业务逻辑构造返回给用户的 XML 响应(如回复文本、图片等)。
  3. 将构造好的 XML 返回给微信服务器。

Python Flask 代码实现

以下是基于 Flask 的完整示例代码,实现了上述的签名验证与消息处理逻辑:

# coding:utf-8
from hashlib import sha1
from flask import Flask, request

token = 'xxxxxx'

app = Flask(__name__)

def get_update(token, timestamp, nonce):
  arguments = ''
  for k in sorted([token, timestamp, nonce]):
    arguments = arguments + str(k)
  m = sha1()
  m.update(arguments.encode('utf8'))
  return m.hexdigest()

def check_signature():
  signature = request.args.get('signature', '')
  timestamp = request.args.get('timestamp', '')
  nonce = request.args.get('nonce', '')
  check = get_update(token, timestamp, nonce)
  return True if check == signature else False

def parse_xml(data):
  try:
    import xml.etree.cElementTree as ET
  except ImportError:
    import xml.etree.ElementTree as ET
    root = ET.fromstring(data)
    datas = '<xml>'
    for child in root:
      if child.tag == 'ToUserName':
        toUser = child.text
        datas += '<FromUserName>%s</FromUserName>' % toUser
      elif child.tag == 'FromUserName':
        fromUser = child.text
        datas += '<ToUserName>%s</ToUserName>' % fromUser
      else:
        datas += '<' + child.tag + '>'
        datas += child.text
        datas += '</' + child.tag + '>'
    datas += '</xml>'
    return datas

@app.route('/weixin', methods=['GET', 'POST'])
def weixinInterface():
  if check_signature:
    if request.method == 'GET':
      echostr = request.args.get('echostr', '')
      return echostr
    elif request.method == 'POST':
      data = request.data
      msg = parse_xml(data)
      return msg
  else:
    return 'signature error'

if __name__ == '__main__':
  app.run(host='0.0.0.0')

以上就是 Python 微信公众号开发简单流程的详细内容,更多关于 Python 微信公众号开发、Flask 后端配置及 XML 消息处理的相关资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。