【Python】发送微信公众号消息(附完整代码)一一CSDN21天学习挑战赛
本系列文章为参与【Python】CSDN21天学习挑战赛,成为更好的自己,根据自身的学习进度并记录自己的学习过程。我也是Python纯小白,和大家一起学习,保持热爱学习的好习惯😁
活动地址:CSDN21天学习挑战赛
一、微信公众号注册
微信公众号注册
微信公众号很多功能受限,需要开通微信认证
可以自动回复消息,但自动回复消息需要有自己的服务器对接(使用ngrok在本地也可以进行使用,但不稳定),就相当于是我们发送消息给微信公众号平台,平台会把消息转给我们自己的服务器,我们服务器处理后提交给平台,平台再将消息发给用户。
微信公众号测试号
测试号基本功能全部都有,但是只能测试使用,我们使用测试号
注册测试号
点击登录
微信扫码登录就行
获取账号信息
登录成功后可以拿到appID和appsecret,这个稍后获取令牌需要用到
在用户列表可以拿到我们的微信号,稍后发送消息需要用到
新增消息模板
添加消息模板
填入模板内容
模板中的变量很好理解,{{.DATA}}是固定的,.DATA前面就是我们的字段名称,例如:{{name.DATA}},那么我们post的json中就应该是{"name":"小呆瓜"}
模板内容
尊敬的 {{name.DATA}} 您的会员注册码是:{{code.DATA}} 请您保管好,打死不要告诉别人哦!
示例:
二、代码实现
项目结构
新建access_token.py文件
该文件主要负责获取access_token验证令牌
APPID需要填写自己的appID
APPSECRET需要填写自己的appsecret
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/19 10:20 @Auth :小呆瓜 @File :access_token.py @IDE :PyCharm @Description:获取access_token """ import requests class AccessToken(object): # 微信公众测试号账号(填写自己的) APPID = "" # 微信公众测试号密钥(填写自己的) APPSECRET = "" def __init__(self, app_id=APPID, app_secret=APPSECRET) -> None: self.app_id = app_id self.app_secret = app_secret def get_access_token(self) -> str: """ 获取access_token凭证 :return: access_token """ url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={self.app_id}&secret={self.app_secret}" resp = requests.get(url) result = resp.json() if 'access_token' in result: return result["access_token"] else: print(result)
新建send_message.py文件
TOUSER填写自己的微信号
(是在测试号用户列表里的微信号)
TEMPLATE_ID填写自己的模板消息ID
CLICK_URL点击消息跳转的链接(可无)
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/19 10:20 @Auth :小呆瓜 @File :send_message.py @IDE :PyCharm @Description:发送微信公众号消息 """ import json import requests from access_token import AccessToken class SendMessage(object): # 消息接收者 TOUSER = '' # 消息模板id TEMPLATE_ID = '' # 点击跳转链接(可无) CLICK_URL = 'https://blog.csdn.net/sxdgy_?spm=1011.2415.3001.5349' def __init__(self, touser=TOUSER, template_id=TEMPLATE_ID, click_url=CLICK_URL) -> None: """ 构造函数 :param touser: 消息接收者 :param template_id: 消息模板id :param click_url: 点击跳转链接(可无) """ self.access_token = AccessToken().get_access_token() self.touser = touser self.template_id = template_id self.click_url = click_url def get_send_data(self, json_data) -> object: """ 获取发送消息data :param json_data: json数据对应模板 :return: 发送的消息体 """ return { "touser": self.touser, "template_id": self.template_id, "url": self.click_url, "topcolor": "#FF0000", # json数据对应模板 "data": { "name": { "value": json_data["name"], # 字体颜色 "color": "#173177" }, "code": { "value": json_data["code"], "color": "#173177" }, } } def send_message(self, json_data) -> None: """ 发送消息 :param json_data: json数据 :return: """ # 模板消息请求地址 url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={self.access_token}" data = json.dumps(self.get_send_data(json_data)) resp = requests.post(url, data=data) result = resp.json() # 有关响应结果,我有整理成xml文档(官方全1833条),免费下载:https://download.csdn.net/download/sxdgy_/86263090 if result["errcode"] == 0: print("消息发送成功") else: print(result)
新建main.py文件
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/19 10:20 @Auth :小呆瓜 @File :main.py @IDE :PyCharm @Description:微信公众号发送消息主文件 """ from send_message import SendMessage class Main(object): def __init__(self) -> None: """ 构造函数 """ pass def main(self) -> None: # 实例SendMessage sm = SendMessage() # 获取接口返回数据 json_data = {"name": "小呆瓜", "code": "666666"} # 发送消息 sm.send_message(json_data=json_data) if __name__ == '__main__': main = Main() main.main()
运行main.py
控制台打印成功,就接收到消息了
总结
这里只是用测试号演示,微信公众号需要认证才能发送客服消息和模板消息,普通消息只能对接自己服务器(发送消息给微信公众号->微信公众平台转发消息到配置的服务器地址->自己服务器处理消息->微信公众平台->微信公众号给用户回复消息),或者内网穿透使用本机也行,但这样不稳定。
我有个吃灰的树莓派4B 8G,后面捯饬捯饬要用起来了,把项目部署在树莓派上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异