Python配置微信公众号自定义菜单实战步骤
通过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实现微信公众号自定义菜单配置的详细内容,更多关于微信接口自动化开发与后台管理运维的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













