本系列文章为参与【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天的学习成果,实现一个小项目,每天定时发送天气预报到邮箱/微信公众号/企业微信,感谢大家支持!