【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛
本系列文章为参与【Python】CSDN21天学习挑战赛,成为更好的自己,根据自身的学习进度并记录自己的学习过程。我也是Python纯小白,和大家一起学习,保持热爱学习的好习惯😁
活动地址:CSDN21天学习挑战赛
一、企业微信注册
企业微信和公众号的区别点
企业微信 | 微信公众号 | |
---|---|---|
功能 | 为企业或组织提供移动办公平台,帮助企业完善内部管理 | 吸粉引流 |
受众 | 企业、政府、事业单位或其他组织 | 个体工商户、企业、自媒体、其他组织和政府等 |
消息提示 | 独立应用,消息显示在企业微信APP | 微信APP中的订阅号目录中 |
消息限制 | 无限制 | 每天可以发送1条群发消息 |
账号类型 | 企业微信 | 服务号、订阅号、小程序(包括企业微信) |
注册企业微信
可以用微信或者企业微信扫码登录
登录成功后找到应用管理
找到创建应用
logo是必上传
,logo资源
创建成功后,我们需要拿到三个信息,AgentId
和Secret
,稍后需要用到
还有一个信息我们需要拿到,点击我的企业
拿到我们的企业ID,现在我们需要的信息都全部准备好了
二、代码实现
发送企业微信消息和发送微信公众号消息非常相似,想了解可以看看这篇文章
发送微信公众号消息
发送企业微信消息项目结构
发送微信公众号消息项目结构
新建access_token.py
文件
该文件主要负责获取access_token验证令牌
CORPID需要填写自己的 企业ID
CORPSECRET需要填写自己的Secret
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/20 9:00 @Auth :小呆瓜 @File :access_token.py @IDE :PyCharm @Description:获取access_token """ import requests class AccessToken(object): # 企业ID CORPID = "" # 应用密钥(Secret) CORPSECRET = "" def __init__(self, corp_id=CORPID, corp_secret=CORPSECRET) -> None: """ 构造函数 :param corp_id: 企业ID :param corp_secret: 应用密钥 """ self.corp_id = corp_id self.corp_secret = corp_secret def get_access_token(self) -> str: """ 获取access_token凭证 :return:str """ url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.corp_id}&corpsecret={self.corp_secret}" resp = requests.get(url) result = resp.json() if result["errcode"] == 0: return result["access_token"] else: print(result)
新建send_message.py
文件
AGENT_ID需要填写自己的AgentId
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/20 9:00 @Auth :小呆瓜 @File :send_message.py @IDE :PyCharm @Description:发送企业微信消息 """ import json import requests from access_token import AccessToken class SendMessage(object): # 应用ID(AgentId) AGENT_ID = def __init__(self, agent_id=AGENT_ID) -> None: """ 构造函数 :param agent_id: 应用ID """ self.access_token = AccessToken().get_access_token() self.agent_id = agent_id def get_send_data(self, msgtype: str, content: str) -> object: """ 获取发送消息data :param msgtype: 消息类型 :param content: 消息内容 :return: """ return { # @all向该企业应用的全部成员发送;指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个) "touser": "@all", "msgtype": msgtype, "agentid": self.agent_id, f"{msgtype}": { "content": content } } def send_message(self, msgtype: str, content: str) -> None: """ 发送消息 :param msgtype: 消息类型 :param content: 消息内容 :return: None """ url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.access_token}" json_data = json.dumps(self.get_send_data(msgtype, content)) resp = requests.post(url, data=json_data) result = resp.json() if result["errcode"] == 0: print("消息发送成功") else: print(result)
扩展:目前发送markdown消息所支持的语法
标题 (支持1至6级标题,注意#与文字中间要有空格)
# 我是标题一 ## 我是标题二 ### 我是标题三 #### 我是标题四 ##### 我是标题五 ###### 我是标题六
加粗
**我加粗了**
链接
[我是一个链接](https://blog.csdn.net/sxdgy_)
行内代码段(暂不支持跨行)
`我是一个代码块`
引用
> 引用 > 今天天气真不错
字体颜色(只支持3种内置颜色)
<font color="info">绿色</font> <font color="comment">灰色</font> <font color="warning">橙红色</font>
最后,新建main.py
文件
#!/usr/bin/python # -*- coding: utf-8 -*- """ @Time :2022/8/20 9:00 @Auth :小呆瓜 @File :main.py @IDE :PyCharm @Description:发送企业微信消息主文件 """ from send_message import SendMessage class Main(object): def __init__(self) -> None: """ 构造函数 """ pass def main(self) -> None: sm = SendMessage() # 具体类型可以查阅官方网站:https://developer.work.weixin.qq.com/document/path/90236 # 代码支持类型:文本消息(text),文本卡片消息(textcard),图文消息(news),markdown消息(markdown) msgtype = "news" # 目前发送markdown消息所支持的语法 content = None if msgtype in ('text', 'markdown'): content = "" \ "# 我是标题一" \ "\n## 我是标题二" \ "\n..." \ "\n###### 我是标题六" \ "" \ "\n\n**我加粗了**" \ "" \ "\n\n[我是一个链接](https://blog.csdn.net/sxdgy_)" \ "" \ "\n\n`我是一个代码块`" \ "" \ "\n> 引用" \ "\n> 今天天气真不错" \ "" \ "\n\n只支持三种字体颜色" \ "\n<font color='info'>绿色</font>" \ "\n<font color='comment'>灰色</font>" \ "\n<font color='warning'>橙红色</font>" elif msgtype == 'textcard': content = { "title": "领奖通知", "description": "<div class=\"gray\">2022年8月20日</div> <div class=\"normal\">恭喜你抽中iPhone 14一台,领奖码:0907</div><div class=\"highlight\">请于2022年9月15日前联系行政同事领取</div>", "url": "https://blog.csdn.net/sxdgy_", "btntxt": "详情" } elif msgtype == 'news': # 支持1到8条图文 content = [ { "title": "您有一只小猫咪待领养", "description": "不考虑考虑收留我嘛", "url": "https://blog.csdn.net/sxdgy_", "picurl": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202003%2F06%2F20200306224349_okpsu.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1663512314&t=c8478cc6667e1b3cadd16920d5865ae2", }, { "title": "您有一只小狗待领养", "description": "不考虑考虑收留我嘛", "url": "https://blog.csdn.net/sxdgy_", "picurl": "https://img1.baidu.com/it/u=2436114901,3494491281&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500", }, { "title": "您有一只小熊待领养", "description": "不考虑考虑收留我嘛", "url": "https://blog.csdn.net/sxdgy_", "picurl": "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.alicdn.com%2Fimgextra%2Fi3%2F64428309%2FTB2O7ZWaxTI8KJjSspiXXbM4FXa_%21%2164428309-0-weitao.jpg&refer=http%3A%2F%2Fimg.alicdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1663544691&t=1778b648d01022f2cc1917532c5be6f3", } ] else: print('消息类型错误') sm.send_message(msgtype=msgtype, content=content) if __name__ == '__main__': main = Main() main.main()
运行main.py
控制台打印成功,就接收到消息了
文本消息(text)
markdown消息
文本卡片消息(textcard)
图文消息(news)
我只写了几种基本的:文本消息(text),文本卡片消息(textcard),图文消息(news),markdown消息(markdown),还有其他类型消息,想了解可以前往官方文档-发送应用消息
总结
微信公众号和企业微信对接起来非常相似,所以会了一个再对接另外一个就非常简单了,当然,这还并没有对接我们自己的服务器,只是调用平台的接口而已,对接自己的服务器稍微有点复杂,但一步一步来,总是没问题的。
简单发送企业微信消息功能就到这里了,活动即将结束了,最后一篇文章会展示下21天的学习成果,实现一个小项目,每天定时发送天气预报到邮箱/微信公众号/企业微信,感谢大家支持!
【推荐】国内首个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的设计差异