def _on_subscribe(self, client, userdata, mid, granted_qos): """ 订阅成功回调 """ log_info('on_subscribe') if self.subscribe_callback is not None: self.subscribe_callback(0)
def _on_unsubscribe(self, client, userdata, mid): """ 订阅成功回调 """ log_info('on_unsubscribe') if self.subscribe_callback is not None: self.subscribe_callback(-1)
def _build_request_info(url, method, params, files): """ 根据请求方式构造请求头和请求参数 :return: header 请求头 params 请求参数 """ header = { 'authorization': ApiRequest.api_key, "sdk_version": 'python_v' + ApiRequest.version, 'signature': '' } params = pop_empty_value(params) plain_text = url if params: if 'post' == method and not files: plain_text = plain_text + json.dumps(params) else: plain_text = plain_text + get_plain_text(params) if not ApiRequest.private_key: raise RuntimeError('privite_key is none') flag, cipher_text = rsa_sign(ApiRequest.private_key, plain_text, 'utf-8') if not flag: log_error('request to {}, sign error {} '.format(url, cipher_text)) header.update({'signature': cipher_text}) log_info('request to {}, param is {}, \nhead is {}'.format( url, params, header)) return header, params
def get_message_manager(): expire_time = 30_000_000_000 data = request_post(pay_message_token, {'expire_time': expire_time}) if 'succeeded' != data.get('status'): log_info('token request failed') return AdapayMessage(adapay.api_key, data.get('token', ''))
def _on_connect(self, client, userdata, flags, resp_code): """ 建立长连接成功回调 """ log_info('connected with result code ' + str(resp_code)) if self.connect_callback is not None: self.connect_callback(resp_code) if resp_code == 0: client.subscribe(self.topic, 0)
def _on_message(self, client, userdata, messages): """ 接收到交易结果回调 """ message_str = messages.payload.decode('utf-8') log_info('on_msg_receive:' + message_str) if self.received_callback is not None: try: msg_dict = json.loads(message_str) self.received_callback(msg_dict) except Exception as e: log_error(str(e)) log_error('pay message loads error:' + message_str)
def _on_disconnect(self, client, userdata, resp_code): """ :param resp_code: 长连接链接失败回调 1 伪造 Token,不可解析 2 Token 已经过期 3 Token 已经被吊销 4 资源和 Token 不匹配 5 权限类型和 Token 不匹配 8 签名不合法 -1 帐号权限不合法 :return: """ log_info('unexpected disconnection %s' % resp_code) if self.connect_callback is not None: self.connect_callback(resp_code)
def _request(method, files=None): """ 执行请求 :param method: 请求方法类型 :param files: 上传的文件 :return: 网路请求返回的数据 """ request_url = ApiRequest.base_url + ApiRequest.url header, params = ApiRequest._build_request_info( request_url, method, ApiRequest.request_params, files) http_method = getattr(requests, method or 'post') if files: resp = http_method(request_url, data=params, files=files, timeout=ApiRequest.connect_timeout, headers=header) elif method == 'post': resp = http_method(request_url, json=params, files=files, timeout=ApiRequest.connect_timeout, headers=header) else: resp = http_method(request_url, params, timeout=ApiRequest.connect_timeout, headers=header) log_info('request to {}, resp is {}'.format(request_url, resp.text)) return ApiRequest._build_return_data(resp)