一、官方 api 说明(关键)
微信公众号 正式提供草稿箱管理接口(非模拟浏览器)微信开放社区:
- 新增草稿接口:
post https://api.weixin.qq.com/cgi-bin/draft/add?access_token=access_token
- 作用:直接创建图文消息到公众号草稿箱(不会直接群发)
- 权限:需要 已认证公众号(个人 / 企业)、开启开发者模式、配置 ip 白名单
二、开发前准备(必须)
1. 公众号后台配置
- 登录 mp.weixin.qq.com
- 进入 设置与开发 → 基本配置
- 开启 开发者密码(appsecret) → 保存好 appid、appsecret
- ip 白名单:把你服务器 / 本机出口 ip 加入(否则调用 401 拒绝)
- 不用配置服务器 url/token(草稿接口不需要)
2. 安装依赖
pip install requests python-dotenv
3. 素材准备
- 封面图(jpg/png,建议 900×500,≤5mb)
- 文章正文(html 格式,支持 p/img 等标签)
三、完整流程(官方 api)
- 获取
access_token(2 小时有效) - 上传封面图到 永久素材,得到
thumb_media_id - 组装文章 json,调用
/cgi-bin/draft/add新增草稿 - 返回
media_id→ 草稿创建成功
四、完整 python 代码(可直接运行)
1. 项目结构
wechat_api_draft/ ├── .env # 配置(安全) ├── cover.jpg # 封面图 ├── wechat_draft_api.py # 主代码 └── readme.md
2. .env 配置文件(安全)
# 公众号基本信息 wechat_appid=你的appid wechat_appsecret=你的appsecret # 文章配置 article_title=python官方api发布草稿测试 article_content=<p>这是通过微信官方api自动发布的正文</p><p>支持html格式,格式稳定不乱</p> article_digest=这是文章摘要,不超过120字 cover_image_path=./cover.jpg
3. 主代码 wechat_draft_api.py
import requests
import os
from dotenv import load_dotenv
import json
# 加载环境变量
load_dotenv()
# ====================== 配置读取 ======================
appid = os.getenv("wechat_appid")
appsecret = os.getenv("wechat_appsecret")
title = os.getenv("article_title")
content = os.getenv("article_content")
digest = os.getenv("article_digest")
cover_path = os.getenv("cover_image_path")
# ====================== 1. 获取 access_token ======================
def get_access_token():
url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appsecret}"
res = requests.get(url).json()
if "access_token" in res:
print("✅ 获取 access_token 成功")
return res["access_token"]
else:
raise exception(f"获取 access_token 失败:{res}")
# ====================== 2. 上传永久素材(封面图) ======================
def upload_permanent_media(access_token, file_path):
url = f"https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={access_token}&type=image"
files = {
"media": open(file_path, "rb")
}
res = requests.post(url, files=files).json()
if "media_id" in res:
print("✅ 封面图上传成功,media_id:", res["media_id"])
return res["media_id"]
else:
raise exception(f"上传素材失败:{res}")
# ====================== 3. 新增草稿到草稿箱(核心) ======================
def create_wechat_draft(access_token, thumb_media_id):
url = f"https://api.weixin.qq.com/cgi-bin/draft/add?access_token={access_token}"
# 文章参数(官方格式)
payload = {
"articles": [
{
"title": title,
"thumb_media_id": thumb_media_id,
"author": "作者名",
"digest": digest[:120], # 摘要≤120字
"show_cover_pic": 1, # 正文显示封面
"content": content, # 正文html
"content_source_url": "",# 原文链接
"need_open_comment": 1, # 开启评论
"only_fans_can_comment": 0
}
]
}
headers = {"content-type": "application/json"}
res = requests.post(url, data=json.dumps(payload, ensure_ascii=false), headers=headers).json()
if "media_id" in res:
print("\n🎉 草稿创建成功!")
print("草稿 media_id:", res["media_id"])
print("请到公众号后台【草稿箱】查看")
return res["media_id"]
else:
raise exception(f"创建草稿失败:{res}")
# ====================== 主函数 ======================
if __name__ == "__main__":
try:
token = get_access_token()
thumb_media_id = upload_permanent_media(token, cover_path)
draft_media_id = create_wechat_draft(token, thumb_media_id)
except exception as e:
print("\n❌ 错误:", e)
五、运行教程
- 把
.env填好你的 appid、appsecret - 把封面图命名
cover.jpg放同目录 - 运行:
python wechat_draft_api.py
- 成功后:
- 控制台输出
media_id - 登录 mp.weixin.qq.com → 草稿箱 即可看到文章
- 控制台输出
六、官方接口参数说明(关键)
新增草稿 articles 字段
title:标题(必填)thumb_media_id:封面图 media_id(必须永久素材)author:作者digest:摘要(≤120 字)show_cover_pic:1 = 正文显示封面content:正文(html 格式)need_open_comment:1 = 开启评论only_fans_can_comment:0 = 所有人可评
七、常见错误(踩坑大全)
1. 40165 无效 ip
- 原因:ip 不在白名单
- 解决:公众号后台 → 基本配置 → ip 白名单 加入本机 / 服务器出口 ip
2. 40007 无效媒体 id
- 原因:封面图用了 临时素材(必须永久素材)
- 解决:用
/cgi-bin/material/add_material上传永久素材
3. 48001 无权限
- 原因:账号未认证 / 接口权限被回收
- 解决:必须认证公众号(个人 / 企业均可)
4. 正文图片不显示
- 原因:
content里不能放外网图片 - 解决:正文图片也要先上传永久素材,用
src="https://mmbiz.qpic.cn/xxx"
5. 40008 消息长度超限
- 原因:正文 / 标题过长
- 限制:标题≤64 字,摘要≤120 字,正文≤10 万字符
八、进阶扩展(官方 api)
- 获取草稿列表:
/cgi-bin/draft/batchget微信开放社区 - 删除草稿:
/cgi-bin/draft/delete微信开放社区 - 更新草稿:
/cgi-bin/draft/update微信开放社区 - 发布草稿:
/cgi-bin/freepublish/submit(正式发布)微信开放社区
到此这篇关于python微信公众号官方api自动发布草稿箱的文章就介绍到这了,更多相关python公众号自动发布草稿箱内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论