企业微信应用类

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

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

#!/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))

Flask是一个轻量级的Python Web框架,它可以用来构建Web应用程序。企业微信应用是一种能够在企业微信平台上运行的应用程序,可以帮助企业内部进行沟通、协作和管理。 在Flask中,我们可以使用Flask的路由机制来处理企业微信应用的回调请求。回调是指企业微信平台在某些事件发生时向企业微信应用发送HTTP请求,应用需要对这些请求进行响应。 首先,我们需要配置企业微信应用的回调URL,即将该URL与Flask应用中的某个路由函数进行绑定。当企业微信平台有回调请求时,Flask应用会自动调用与该URL绑定的路由函数。 在路由函数中,我们可以根据请求的类型和内容进行处理。例如,可以根据请求的事件类型来执行相应的操作,如发送消息、获取通讯录信息等。同时,还可以根据请求的参数来获取相应的数据,并进行相应的处理和返回。 在处理回调请求时,还需要注意验证请求的有效性。企业微信平台会通过加密算法将请求进行加密,我们需要按照约定的方式进行解密,并校验相关参数的合法性,以确保请求的安全性和有效性。 总的来说,Flask提供了便捷的路由功能,可以轻松地处理企业微信应用的回调请求。通过合理地运用Flask的路由机制,我们可以根据不同的事件和请求类型,进行相应的操作和处理,实现丰富多样的企业微信应用功能。同时,确保回调请求的有效性和安全性也是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值