yangyue012345 2023-09-08 11:13 采纳率: 20%
浏览 10
已结题

python向企业微信推送文件

在我向企业微信推送文件时遇到了问题,CORPID,CORPSECRET,AGENTID,TOUSER这些都修改好了,也尝试了在ip地址白名单加入了我的ip但还是产生相同的问题,在网页端就可以发送说明我是有权限的,我不明白了为什么还会出现相同的问题

img


```python
import requests
import time
import json


class WeChat():
    def __init__(self):
        """
        配置初始信息
        """
        self.CORPID = "ww9fc03e68235ae7b1"  # 企业ID
        self.CORPSECRET = "mnG0wD4EbxSZEAt1vcLrzBjEgKlNXaJNrwaEwJizOZI"  # 应用Secret
        self.AGENTID = "1000028"  # 应用Agentid
        self.TOUSER = "YangYue" # 接收消息的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}"
        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()}"
        send_values = {
            "touser": self.TOUSER,
            "msgtype": "text",
            "agentid": self.AGENTID,
            "text": {
                "content": message
            },
        }
        print(send_values)
        send_message = (bytes(json.dumps(send_values), 'utf-8'))
        print(send_message)
        res = requests.post(url, send_message)
        print(res.text)
        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"
        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()}"
        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']


if __name__ == '__main__':
    wx = WeChat()
    wx.send_message("test1")

```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-08 17:52
    关注

    【以下回答由 GPT 生成】

    您的代码中似乎缺少了发送文件的相关函数。在您描述的问题中,您提到已经修改了配置信息并验证了自己的权限,但仍然无法发送文件。

    那么,我需要了解您在发送文件时遇到了什么具体问题。您能提供更详细的错误信息或错误提示吗?这将有助于我更好地理解您遇到的问题并给出解决方案。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月18日
  • 创建了问题 9月8日

悬赏问题

  • ¥100 关于python拓展屏使用pyautogui.screenshot无法截图的问题
  • ¥15 有偿求答 无导出权限怎么快速导出企业微信微文档
  • ¥15 求解答,怎么数码管中这么加入闹钟或者传感器,这应该怎么加入相应的代码
  • ¥15 scottplot5
  • ¥30 想问问这个建模怎么编程没有思路
  • ¥15 关于imageENview(ImageEN)中新建图层并根据鼠标位置添加图标
  • ¥100 用两台电脑局域联网进行MT5的EA参数优化,但是连接不上,日志提示:
  • ¥15 FastAPI报错: AsyncSession不是有效Pydantic类型
  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助