【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛



本系列文章为参与【Python】CSDN21天学习挑战赛,成为更好的自己,根据自身的学习进度并记录自己的学习过程。我也是Python纯小白,和大家一起学习,保持热爱学习的好习惯😁

活动地址:CSDN21天学习挑战赛


一、企业微信注册

企业微信注册

企业微信和公众号的区别点

企业微信微信公众号
功能为企业或组织提供移动办公平台,帮助企业完善内部管理吸粉引流
受众企业、政府、事业单位或其他组织个体工商户、企业、自媒体、其他组织和政府等
消息提示独立应用,消息显示在企业微信APP微信APP中的订阅号目录中
消息限制无限制每天可以发送1条群发消息
账号类型企业微信服务号、订阅号、小程序(包括企业微信)

注册企业微信

可以用微信或者企业微信扫码登录
在这里插入图片描述
登录成功后找到应用管理
在这里插入图片描述
找到创建应用
在这里插入图片描述
logo是必上传logo资源
在这里插入图片描述
创建成功后,我们需要拿到三个信息,AgentIdSecret,稍后需要用到
在这里插入图片描述
还有一个信息我们需要拿到,点击我的企业
在这里插入图片描述
拿到我们的企业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天的学习成果,实现一个小项目,每天定时发送天气预报到邮箱/微信公众号/企业微信,感谢大家支持!


  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆瓜耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值