天天看點

【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天的學習成果,實作一個小項目,每天定時發送天氣預報到郵箱/微信公衆号/企業微信,感謝大家支援!