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)
def send_file ( self , fakeid , fid , type ) : 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 不存在, 还有其他错误请自行检查)
向特定用户发送媒体文件 : 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 不存在 还有其他错误请自行检查 )