天天看点

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

目录

  • 一、企业微信注册
    • 注册企业微信
  • 二、代码实现
  • 总结

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

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

一、企业微信注册

企业微信注册

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

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

注册企业微信

可以用微信或者企业微信扫码登录

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

登录成功后找到应用管理

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

找到创建应用

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

logo是必上传

,logo资源

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

创建成功后,我们需要拿到三个信息,

AgentId

Secret

,稍后需要用到

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

还有一个信息我们需要拿到,点击

我的企业

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

拿到我们的企业ID,现在我们需要的信息都全部准备好了

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

二、代码实现

发送企业微信消息和发送微信公众号消息非常相似,想了解可以看看这篇文章

发送微信公众号消息

发送企业微信消息项目结构

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

发送微信公众号消息项目结构

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

新建

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级标题,注意#与文字中间要有空格)

# 我是标题一
## 我是标题二
### 我是标题三
#### 我是标题四
##### 我是标题五
###### 我是标题六
           

加粗

链接

行内代码段(暂不支持跨行)

引用

> 引用
> 今天天气真不错
           

字体颜色(只支持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

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

控制台打印成功,就接收到消息了

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

文本消息(text)

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

markdown消息

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

文本卡片消息(textcard)

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

图文消息(news)

【Python】发送企业微信消息(附完整代码)一一CSDN21天学习挑战赛一、企业微信注册二、代码实现总结

我只写了几种基本的:文本消息(text),文本卡片消息(textcard),图文消息(news),markdown消息(markdown),还有其他类型消息,想了解可以前往官方文档-发送应用消息

总结

微信公众号和企业微信对接起来非常相似,所以会了一个再对接另外一个就非常简单了,当然,这还并没有对接我们自己的服务器,只是调用平台的接口而已,对接自己的服务器稍微有点复杂,但一步一步来,总是没问题的。

简单发送企业微信消息功能就到这里了,活动即将结束了,最后一篇文章会展示下21天的学习成果,实现一个小项目,每天定时发送天气预报到邮箱/微信公众号/企业微信,感谢大家支持!