Python配置微信公众号自定义菜单实战步骤

清欢
清欢
发布时间:2026-10-12| 3人浏览过
原创

通过Python脚本调用微信公众号开放接口,可快速实现自定义菜单的批量配置与自动更新。本文将演示如何安全获取access_token,按照官方规范组装按钮数据结构,并使用POST请求完成菜单下发,同时提供接口返回状态核对与常见报错处理方案。

接口调用前置准备

在编写自动化脚本前,需确保已拥有公众号管理员权限,并已在微信公众平台后台完成开发者认证,获取唯一的 AppID 与 AppSecret。脚本运行环境需具备稳定的外网访问能力,以便调用腾讯API服务器。由于access_token有效期为2小时且每日调用频次受限,务必采用全局变量或配置文件进行缓存,避免频繁刷新导致触发限流策略。

第1步:获取与缓存 access_token

目的是向微信服务端换取全局唯一的全局访问凭证。该凭证是后续所有高级接口调用的通行证。请求方式为GET,参数包含授权方式、开发者AppID及密钥。成功响应将返回凭证字符串及其过期时间戳,需立即写入全局配置对象中供后续使用。

def token(request):
  url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (
    Config.AppID, Config.AppSecret)
  result = urllib2.urlopen(url).read()
  Config.access_token = json.loads(result).get('access_token')
  print 'access_token===%s' % Config.access_token
  return HttpResponse(result)

第2步:按规范组装菜单 JSON 数据

微信公众号自定义菜单最多支持3个一级按钮,每个一级按钮下最多包含4个子按钮。按钮类型主要分为click(点击推事件)与view(跳转URL)。构造JSON时需严格遵循层级关系,确保键名与平台接口文档一致。下方示例展示了一个包含图文浏览、风格筛选及外部链接申请的完整菜单结构。

def createMenu(request):
  url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s" % Config.access_token
  data = {
   "button":[
   {
      "name":"看美图",
      "sub_button":[
      {
        "type":"click",
        "name":"美图",
        "key":"meitu"
      },
      {
        "type":"view",
        "name":"精选",
        "url":"http://m.jb51.net/photos"
      },
  {
        "type":"view",
        "name":"回顾",
        "url":"http://m.qzone.com/infocenter?g_f=#2378686916/mine"
      },
  {
        "type":"view",
        "name":"美图app",
        "url":"http://jb51.net/app/app.html"
      }]
 },
 {
      "name":"看案例",
      "sub_button":[
      {
        "type":"click",
        "name":"全部风格",
        "key":"style"
      },
      {
        "type":"click",
        "name":"全部户型",
        "key":"houseType"
      },
  {
        "type":"click",
        "name":"全部面积",
        "key":"area"
      },
  {
        "type":"view",
        "name":"更多案例",
        "url":"http://m.jb51.net/projects"
      }]
 },
 {
      "type":"view",
      "name":"设计申请",
      "url":"http://jb51.net/zhuanti/freedesign.jsp?src=3"

 }

 ]
}
  #data = json.loads(data)
  #data = urllib.urlencode(data)
  req = urllib2.Request(url)
  req.add_header('Content-Type', 'application/json')
  req.add_header('encoding', 'utf-8')
  response = urllib2.urlopen(req, json.dumps(data,ensure_ascii=False))
  result = response.read()
  return HttpResponse(result)

第3步:发起 POST 请求创建菜单

目的为将组装好的JSON负载发送至微信平台菜单创建接口。需手动设置请求头Content-Type为application/json,并将字典对象序列化为UTF-8编码的JSON字符串作为Body参数传入。接口同步返回执行结果,包含错误码或提示信息。

# 接续上方 createMenu 函数内的核心请求逻辑
req = urllib2.Request(url)
req.add_header('Content-Type', 'application/json')
req.add_header('encoding', 'utf-8')
response = urllib2.urlopen(req, json.dumps(data,ensure_ascii=False))
result = response.read()
return HttpResponse(result)

完成状态核对与异常处理

请求返回errcode: 0或ok字段即表示配置成功。注意新配置的菜单不会实时生效,通常需要等待5至15分钟缓存同步后,在客户端输入框查看到变化。若返回其他错误码,可按以下顺序排查:
1. 检查 access_token 是否已过期或未被正确注入请求URL。
2. 核对JSON语法,特别注意逗号遗漏、括号未闭合或中文字符未正确转义。
3. 确认公众号主体资质是否开通了自定义菜单接口权限。
4. 若出现域名备案或HTTPS证书报错,需在公众平台后台配置合法的业务域名。

以上就是使用Python实现微信公众号自定义菜单配置的详细内容,更多关于微信接口自动化开发与后台管理运维的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。