Python 微信公众号服务器配置与 Flask 后端实现

桃夭
桃夭
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍基于 Python 和 Flask 框架的微信公众号服务器配置流程。重点讲解如何通过 Flask 接收微信服务器的 GET 请求进行签名验证,包括时间戳、随机数、Token 的字典序排序及 SHA1 加密校验。同时简述 POST 请求下的 XML 消息解析逻辑,帮助开发者快速搭建基础后端接口。

Python 微信公众号开发概述

本文分享了使用 Python 进行微信公众号开发的基础流程,供读者参考。

目前网络上许多微信公众号开发教程年代久远,且存在大量相互抄袭、内容雷同的现象。鉴于此,本文旨在重新梳理并总结一套简洁实用的开发流程。

服务器配置与后端搭建

第一步,注册一个微信公众号,此处省略具体注册步骤。

第二步,登录微信公众平台后台,进入“开发”模块下的“基本配置”,完成服务器地址的配置。


在配置页面中,需填写服务器 URL 和 Token。其中,URL 指向你的服务器地址,Token 由开发者自行定义,用于后续签名校验。

第三步,登录服务器进行后端开发。

以往教程中常提到的新浪 SAE 或 Webpy 等框架已逐渐过时。本文采用阿里云服务器,并选用 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')

初始阶段,微信服务器会通过 GET 请求验证你填写的 URL。验证机制涉及传入的时间戳(timestamp)、随机数(nonce)、预先约定的 Token、随机字符串(echostr)以及签名(signature)。系统需将时间戳、随机数和 Token 按字典序排序后拼接,再进行 SHA1 加密生成签名。若生成的签名与传入的 signature 一致,则返回随机字符串 echostr 以完成验证。验证成功后,即可提交并启用服务器配置。

消息处理与扩展功能

上述代码还涵盖了处理用户发送给公众号的消息逻辑,主要涉及简单的 XML 解析与构造。若需实现更复杂的功能,建议查阅微信官方文档以获取详细接口说明。

至此,关于 Python 微信公众号开发简单流程的介绍完毕。如需了解更多相关 Python 微信公众号开发内容,可搜索本站往期文章或继续浏览后续文章。感谢大家的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表