wechat_sdk/ext.py
def send_file(self, fakeid, fid, type):
        """
        向特定用户发送媒体文件
        :param fakeid: 用户 UID (即 fakeid)
        :param fid: 文件 ID
        :param type: 文件类型 (2: 图片, 3: 音频, 15: 视频)
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据
        :raises ValueError: 参数出错, 错误原因直接打印异常即可 (常见错误内容: ``system error`` 或 ``can not send this type of msg``: 文件类型不匹配, ``user not exist``: 用户 fakeid 不存在, ``file not exist``: 文件 fid 不存在, 还有其他错误请自行检查)
        """
        if type == 4:  # 此处判断为兼容历史版本, 微信官方已经将视频类型修改为 15
            type = 15

        url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&f=json&token={token}&lang=zh_CN'.format(
            token=self.__token,
        )
        payloads = {}
        if type == 2 or type == 3:  # 如果文件类型是图片或者音频
            payloads = {
                'token': self.__token,
                'lang': 'zh_CN',
                'f': 'json',
                'ajax': 1,
                'random': random.random(),
                'type': type,
                'file_id': fid,
                'tofakeid': fakeid,
                'fileid': fid,
                'imgcode': '',
            }
        elif type == 15:  # 如果文件类型是视频
            payloads = {
                'token': self.__token,
                'lang': 'zh_CN',
                'f': 'json',
                'ajax': 1,
                'random': random.random(),
                'type': type,
                'app_id': fid,
                'tofakeid': fakeid,
                'appmsgid': fid,
                'imgcode': '',
            }
        headers = {
            'referer': 'https://mp.weixin.qq.com/cgi-bin/singlesendpage?tofakeid={fakeid}&t=message/send&action=index&token={token}&lang=zh_CN'.format(
                fakeid=fakeid,
                token=self.__token,
            ),
            'cookie': self.__cookies,
            'x-requested-with': 'XMLHttpRequest',
        }
        r = requests.post(url, data=payloads, headers=headers)

        try:
            message = json.loads(r.text)
        except ValueError:
            raise NeedLoginError(r.text)
        try:
            if message['base_resp']['ret'] != 0:
                raise ValueError(message['base_resp']['err_msg'])
        except KeyError:
            raise NeedLoginError(r.text)
def send_file(self, fakeid, fid, type):
        """
        向特定用户发送媒体文件
        :param fakeid: 用户 UID (即 fakeid)
        :param fid: 文件 ID
        :param type: 文件类型 (2: 图片, 3: 音频, 15: 视频)
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据
        :raises ValueError: 参数出错, 错误原因直接打印异常即可 (常见错误内容: ``system error`` 或 ``can not send this type of msg``: 文件类型不匹配, ``user not exist``: 用户 fakeid 不存在, ``file not exist``: 文件 fid 不存在, 还有其他错误请自行检查)
        """
        if type == 4:  # 此处判断为兼容历史版本, 微信官方已经将视频类型修改为 15
            type = 15

        url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&f=json&token={token}&lang=zh_CN'.format(
            token=self.__token,
        )
        payloads = {}
        if type == 2 or type == 3:  # 如果文件类型是图片或者音频
            payloads = {
                'token': self.__token,
                'lang': 'zh_CN',
                'f': 'json',
                'ajax': 1,
                'random': random.random(),
                'type': type,
                'file_id': fid,
                'tofakeid': fakeid,
                'fileid': fid,
                'imgcode': '',
            }
        elif type == 15:  # 如果文件类型是视频
            payloads = {
                'token': self.__token,
                'lang': 'zh_CN',
                'f': 'json',
                'ajax': 1,
                'random': random.random(),
                'type': type,
                'app_id': fid,
                'tofakeid': fakeid,
                'appmsgid': fid,
                'imgcode': '',
            }
        headers = {
            'referer': 'https://mp.weixin.qq.com/cgi-bin/singlesendpage?tofakeid={fakeid}&t=message/send&action=index&token={token}&lang=zh_CN'.format(
                fakeid=fakeid,
                token=self.__token,
            ),
            'cookie': self.__cookies,
            'x-requested-with': 'XMLHttpRequest',
        }
        r = requests.post(url, data=payloads, headers=headers)

        try:
            message = json.loads(r.text)
        except ValueError:
            raise NeedLoginError(r.text)
        try:
            if message['base_resp']['ret'] != 0:
                raise ValueError(message['base_resp']['err_msg'])
        except KeyError:
            raise NeedLoginError(r.text)
向特定用户发送媒体文件
        :param fakeid: 用户 UID (即 fakeid)
        :param fid: 文件 ID
        :param type: 文件类型 (2: 图片, 3: 音频, 15: 视频)
        :raises NeedLoginError: 操作未执行成功, 需要再次尝试登录, 异常内容为服务器返回的错误数据
        :raises ValueError: 参数出错, 错误原因直接打印异常即可 (常见错误内容: ``system error`` 或 ``can not send this type of msg``: 文件类型不匹配, ``user not exist``: 用户 fakeid 不存在, ``file not exist``: 文件 fid 不存在, 还有其他错误请自行检查)