예제 #1
0
    def set_user_remark(cls, session, username, remark):
        """Set user remark api."""
        api_path = cls.api_url_template.format(schema=cls.schema,
                                               endpoint=session.wx_endpoint,
                                               url=cls.oplog_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}

        pass_ticket = wx_session_data['pass_ticket']
        params = {'pass_ticket': pass_ticket}

        base_request = cls.get_base_request(wx_session_data)
        data = {
            'BaseRequest': base_request,
            'UserName': username,
            'RemarkName': remark,
            'CmdId': 2
        }

        res = session.post(api_path,
                           params=params,
                           data=json_dumps(data,
                                           compact=True,
                                           ensure_ascii=False).encode(),
                           headers=headers,
                           timeout=cls.low_timeout)

        return decode_json_response(res)
예제 #2
0
    def do_sync(cls, session):
        """Do WeChat session status sync."""
        api_path = cls.api_url_template.format(schema=cls.schema,
                                               endpoint=session.wx_endpoint,
                                               url=cls.do_sync_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}

        wxsid = wx_session_data['wxsid']
        skey = wx_session_data['skey']
        pass_ticket = wx_session_data['pass_ticket']
        params = {'sid': wxsid, 'pass_ticket': pass_ticket, 'skey': skey}

        base_request = cls.get_base_request(wx_session_data)
        sync_key = wx_session_data['sync_key']
        data = {'BaseRequest': base_request, 'SyncKey': sync_key}

        res = session.post(api_path,
                           params=params,
                           data=json_dumps(data,
                                           compact=True,
                                           ensure_ascii=False).encode(),
                           headers=headers,
                           timeout=cls.middle_timeout)

        return decode_json_response(res)
예제 #3
0
    def send_gif_message(cls, session, message):
        """Send gif message api."""
        api_path = cls.api_url_template.format(schema=cls.schema,
                                               endpoint=session.wx_endpoint,
                                               url=cls.sendmsg_gif_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}

        pass_ticket = wx_session_data['pass_ticket']
        params = {'pass_ticket': pass_ticket, 'fun': 'sys', 'f': 'json'}

        base_request = cls.get_base_request(wx_session_data)
        msg_value = message.to_value()
        msg_value['EmojiFlag'] = 2
        data = {'BaseRequest': base_request, 'Scene': 0, 'Msg': msg_value}

        res = session.post(api_path,
                           params=params,
                           data=json_dumps(data,
                                           compact=True,
                                           ensure_ascii=False).encode(),
                           headers=headers,
                           timeout=cls.low_timeout)

        return decode_json_response(res)
예제 #4
0
    def mget_contact_list(cls, session, user_list):
        """Batch get user contact list."""
        api_path = cls.api_url_template.format(schema=cls.schema,
                                               endpoint=session.wx_endpoint,
                                               url=cls.batch_contact_list_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}
        params = {
            'pass_ticket': wx_session_data['pass_ticket'],
            'r': cls.get_client_msg_id(),
            'type': 'ex'
        }

        base_request = cls.get_base_request(wx_session_data)
        data = {
            'BaseRequest': base_request,
            'Count': len(user_list),
            'List': user_list
        }

        res = session.post(api_path,
                           params=params,
                           data=json_dumps(data,
                                           compact=True,
                                           ensure_ascii=False).encode(),
                           headers=headers,
                           timeout=cls.middle_timeout)

        return decode_json_response(res)
예제 #5
0
    def wx_init(cls, session):
        """Initialize WeChat session."""
        api_path = cls.api_url_template.format(
            schema=cls.schema, endpoint=session.wx_endpoint, url=cls.init_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}
        params = {'pass_ticket': wx_session_data['pass_ticket']}

        data = {'BaseRequest': cls.get_base_request(wx_session_data)}

        res = session.post(
            api_path, params=params, data=json_dumps(data, compact=True),
            headers=headers, timeout=cls.high_timeout)

        return decode_json_response(res)
예제 #6
0
    def notify_status(cls, session, user):
        """Notify session status."""
        api_path = cls.api_url_template.format(
            schema=cls.schema, endpoint=session.wx_endpoint,
            url=cls.status_notify_url)
        wx_session_data = session.get_wx_session_data()
        params = {'pass_ticket': wx_session_data['pass_ticket']}

        username = user['UserName']
        data = {'Code': 3, 'FromUserName': username, 'ToUserName': username}
        data['BaseRequest'] = cls.get_base_request(wx_session_data)
        data['ClientMsgId'] = cls.get_client_msg_id()

        res = session.post(
            api_path, params=params, data=json_dumps(data, compact=True),
            timeout=cls.middle_timeout)

        return decode_json_response(res)
예제 #7
0
    def send_image_message(cls, session, message):
        """Send image message api."""
        api_path = cls.api_url_template.format(
            schema=cls.schema, endpoint=session.wx_endpoint,
            url=cls.sendmsg_img_url)
        wx_session_data = session.get_wx_session_data()
        headers = {'Content-Type': 'application/json; charset=utf-8'}

        params = {'fun': 'async', 'f': 'json'}

        base_request = cls.get_base_request(wx_session_data)
        msg_value = message.to_value()
        data = {'BaseRequest': base_request, 'Scene': 0, 'Msg': msg_value}

        res = session.post(
            api_path, params=params, data=json_dumps(data, compact=True),
            headers=headers, timeout=cls.low_timeout)

        return decode_json_response(res)
예제 #8
0
        def upload_chunk(chunk_index=0, chunk_num=1):
            data = {
                'id':
                'WU_FILE_0',
                'name':
                filename,
                'type':
                data_media_type,
                'lastModifiedDate':
                file_obj.last_mtime,
                'size':
                data_len,
                'mediatype':
                file_obj.short_type(),
                'uploadmediarequest':
                json_dumps(upload_req, compact=True,
                           ensure_ascii=False).encode(),
                'webwx_data_ticket':
                session_cookies['webwx_data_ticket'],
                'pass_ticket':
                pass_ticket
            }
            if chunk_num > 1:
                data['chunk'] = chunk_index
                data['chunks'] = chunk_num
                files = {
                    'filename': (filename, file_obj.read(cls.max_file_body),
                                 data_media_type)
                }
            else:
                files = {'filename': (filename, file_obj, data_media_type)}

            res = session.post(api_path,
                               params=params,
                               data=data,
                               files=files,
                               timeout=cls.high_timeout)
            data = decode_json_response(res)

            return data