企业微信应用类

这是一个Python脚本,用于通过微信企业号API发送文本、图片和文件。脚本首先获取access_token,然后利用这个token发送不同类型的消息。发送消息时,可以指定接收者为所有成员(@all)。文件需要先上传到临时媒体库,再进行发送。此脚本适用于自动化企业内部的通知或文件分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用于发送消息,图片和文件

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# python3
import _locale
_locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8'])

# python2
# import sys
# reload(sys)
# sys.setdefaultencoding('utf8')

import json
import time
import requests


class WeChat():
    def __init__(self):
        """
        配置初始信息
        """
        self.CORPID = "xxxxxxxxxxx"  # 企业ID
        self.CORPSECRET = "xxxxxxxxxxxxxxxxxxxxxxxxx"  # 应用Secret
        self.AGENTID = "xxxxxxxxxxxx"  # 应用Agentid
        # self.TOUSER = "xxx1|xxx2|xxx3" # 接收消息的userid
        self.TOUSER = "@all" # 接收消息的userid
        self.ACCESS_TOKEN_PATH = "access_token.conf" # 存放access_token的路径

    def _get_access_token(self):
        """
        调用接口返回登录信息access_token
        """
        # url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.CORPID}&corpsecret={self.CORPSECRET}"
        url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={}".format(self.CORPID, self.CORPSECRET)
        res = requests.get(url=url)
        return json.loads(res.text)['access_token']

    def _save_access_token(self, cur_time):
        """
        将获取到的access_token保存到本地
        """
        with open(self.ACCESS_TOKEN_PATH, "w")as f:
            access_token = self._get_access_token()
            # 保存获取时间以及access_token
            f.write("\t".join([str(cur_time), access_token]))
        return access_token

    def get_access_token(self):
        cur_time = time.time()
        try:
            with open(self.ACCESS_TOKEN_PATH, "r")as f:
                t, access_token = f.read().split()
                # 判断access_token是否有效
                if 0 < cur_time-float(t) < 7200:
                    return access_token
                else:
                    return self._save_access_token(cur_time)
        except:
            return self._save_access_token(cur_time)

    def send_message(self, message):
        """
        发送文本消息
        """
        # url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.get_access_token()}"
        url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(self.get_access_token())
        send_values = {
            "touser": self.TOUSER,
            "msgtype": "text",
            "agentid": self.AGENTID,
            "text": {
                "content": message
            },
        }
        send_message = json.dumps(send_values)
        res = requests.post(url, send_message)
        return res.json()['errmsg']

    def _upload_file(self, file):
        """
        先将文件上传到临时媒体库
        """
        # url = f"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={self.get_access_token()}&type=file"
        url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=file".format(self.get_access_token())
        data = {"file": open(file, "rb")}
        res = requests.post(url, files=data)
        return res.json()['media_id']

    def send_file(self, file):
        """
        发送文件
        """
        media_id = self._upload_file(file) # 先将文件上传至临时媒体库
        # url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={self.get_access_token()}"
        url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(self.get_access_token())
        send_values = {
            "touser": self.TOUSER,
            "msgtype": "file",
            "agentid": self.AGENTID,
            "file": {
                "media_id": media_id
            },
        }
        send_message = (bytes(json.dumps(send_values), 'utf-8'))
        res = requests.post(url, send_message)
        return res.json()['errmsg']

    def _upload_image(self, image):
        url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=image".format(self.get_access_token())
        data = {"media": open(image, 'rb')}
        res = requests.post(url=url, files=data)
        return res.json()['media_id']

    def send_image(self, image):
        image = self._upload_image(image)
        url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format(self.get_access_token())
        send_values = {
            "touser": self.TOUSER,
            "agentid": self.AGENTID,
            "msgtype": "image",
            "image": {
                "media_id": image
            },
                "safe": "0"
        }
        send_message = (bytes(json.dumps(send_values), 'utf-8'))
        res = requests.post(url, send_message)
        return res.json()['errmsg']



wx = WeChat()
image = "test.jpg"
print(wx.send_image(image))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值