def post_to_sale_server(uri, data=None): if not uri.startswith(settings.SALES_SERVER_API_URL): remote_uri = settings.SALES_SERVER_API_URL % {'api': uri} else: remote_uri = uri try: encrypt = re.search('/(private|protected)/', remote_uri) if encrypt and data: data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM], settings.PRIVATE_KEY_PATH) req = urllib2.Request(remote_uri, data=data) remote_resp = urllib2.urlopen(req) if encrypt: content = decrypt_json_resp( remote_resp, settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM], settings.PRIVATE_KEY_PATH) else: content = remote_resp.read() return content except Exception, e: logging.error('post_to_sale_server_error: %s', e, exc_info=True) raise
def _request_remote_server(uri, method, params, headers, encrypt=False, pri_key_path=None, usr_pub_key_uri=None): data = None headers = headers or {} if params: query_str = urllib.urlencode(params) if method == 'GET': uri = '?'.join([uri, query_str]) else: data = query_str try: if encrypt and data: data = gen_encrypt_json_context(data, usr_pub_key_uri, pri_key_path) req = urllib2.Request(uri, data=data, headers=headers) return urllib2.urlopen(req) except urllib2.HTTPError, e: logging.error('_request_remote_server HTTPError: ' 'error: %s, ' 'with uri: %s, data :%s, headers: %s' % (e, uri, data, headers), exc_info=True) raise
def gen_resp(self, resp, data_dict): resp.content_type = "application/json" resp.body = gen_encrypt_json_context( ujson.dumps(data_dict), settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM], settings.PRIVATE_KEY_PATH) return resp
def encrypt_resp(self, resp, content): resp.content_type = "application/json" resp.body = gen_encrypt_json_context( content, settings.SERVER_APIKEY_URI_MAP[self.service], settings.PRIVATE_KEY_PATH) return resp
def remote_payment_form(cookie, id_processor, id_trans, **kwargs): uri = "webservice/1.0/private/payment/form" query = { 'cookie': cookie, 'processor': id_processor, } param = {'id_trans': id_trans} id_processor = int(id_processor) if id_processor == PAYMENT_TYPES.PAYPAL: query.update({ 'url_notify': settings.PAYMENT_PAYPAL_GATEWAY % param, 'url_return': settings.PAYMENT_PAYPAL_RETURN % param, 'url_cancel': settings.PAYMENT_PAYPAL_CANCEL % param, }) elif id_processor == PAYMENT_TYPES.PAYBOX: query.update({ 'url_success': settings.PAYMENT_PAYBOX_SUCCESS % param, 'url_failure': settings.PAYMENT_PAYBOX_FAILURE % param, 'url_cancel': settings.PAYMENT_PAYBOX_CANCEL % param, 'url_waiting': settings.PAYMENT_PAYBOX_WAITING % param, 'url_return': settings.PAYMENT_PAYBOX_GATEWAY % param, 'user_email': kwargs.get('user_email', ''), }) elif id_processor == PAYMENT_TYPES.STRIPE: query.update({ 'user_email': kwargs.get('user_email', ''), 'url_process': settings.PAYMENT_STRIPE_PROCESS % param, 'url_success': kwargs.get('url_success', ''), 'url_failure': kwargs.get('url_failure', ''), }) try: query = ujson.dumps(query) en_query = gen_encrypt_json_context( query, settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN], settings.PRIVATE_KEY_PATH) resp = get_from_remote(os.path.join(settings.FIN_ROOT_URI, uri), settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN], settings.PRIVATE_KEY_PATH, data=en_query, headers={'Content-Type': 'application/json'}) return resp except Exception, e: logging.error('Failed to get payment form %s,' 'error: %s', query, e, exc_info=True) raise ServerError('remote_payment_form_err: %s' % str(e))
def _send_feedback(self, url, data): data = gen_encrypt_json_context( ujson.dumps(data), settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) resp = get_from_remote( url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return xmltodict.parse(resp)
def send_new_shipment(id_order, id_shop, id_brand, shipping_fee, handling_fee, content, shipping_carrier, packing_status, tracking_name, shipping_service=None, shipping_date=None, tracking_num=None): if isinstance(content, list): content = ujson.dumps(content) try: data = { 'action': 'create', 'order': id_order, 'shop': id_shop, 'brand': id_brand, 'handling_fee': handling_fee, 'shipping_fee': shipping_fee, 'content': content, 'shipping_carrier': shipping_carrier, 'packing_status': packing_status, 'tracking_name': tracking_name, 'shipping_service': shipping_service, 'shipping_date': shipping_date, 'tracking_num': tracking_num } data = ujson.dumps(data) data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) rst = get_from_remote(settings.ORDER_SHIPMENT, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return rst except Exception, e: logging.error('Failed to create shipment %s,' 'error: %s', { 'id_order': id_order, 'id_shop': id_shop, 'content': content }, e, exc_info=True) raise UsersServerError
def remote_payment_init(data): uri = "webservice/1.0/private/payment/init" remote_uri = os.path.join(settings.FIN_SERVER, uri) try: data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN], settings.PRIVATE_KEY_PATH) resp = get_from_remote(remote_uri, settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return resp except Exception, e: logging.error("Failed to init payment %s" % data, exc_info=True) raise
def send_cache_invalidation(method, item_name, item_id): try: invalidation = '%s/%s/%s' % (method, item_name, item_id) logging.info("Sending cache invalidation %s" % invalidation) data = gen_encrypt_json_context( invalidation, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) get_from_remote(settings.CACHE_INVALIDATION_URL, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) except Exception, e: logging.error("Failed to send cache invalidation %s" % invalidation, exc_info=True)
def upload(asset_name, content): remote_uri = os.path.join( settings.AST_SERVER, "webservice/1.0/private/upload?name=%s" % urllib2.quote(asset_name)) try: data = gen_encrypt_json_context( content.read(), settings.SERVER_APIKEY_URI_MAP[SERVICES.AST], settings.PRIVATE_KEY_PATH) resp = get_from_remote(remote_uri, settings.SERVER_APIKEY_URI_MAP[SERVICES.AST], settings.PRIVATE_KEY_PATH, data=data) return ujson.loads(resp) except Exception, e: logging.error("Failed to upload %s" % asset_name, exc_info=True) raise
def get_from_vessel_server(method, path, **query): remote_uri = os.path.join(settings.VSL_ROOT_URI, path) if query: query_str = urllib.urlencode(query) if method == 'GET': remote_uri = '?'.join([remote_uri, query_str]) data = None else: data = gen_encrypt_json_context( query_str, settings.SERVER_APIKEY_URI_MAP['VSL'], settings.PRIVATE_KEY_PATH) try: content = get_from_remote(remote_uri, settings.SERVER_APIKEY_URI_MAP['VSL'], settings.PRIVATE_KEY_PATH, data=data) except Exception, e: logging.error('get_from_vessel_server: %s', e, exc_info=True) raise
def remote_payment_init(id_order, id_user, amount, currency, iv_id, iv_numbers, iv_data): uri = 'private/payment/init' remote_uri = settings.SALES_SERVER_API_URL % {'api': uri} if isinstance(iv_id, list): iv_id = ujson.dumps(iv_id) if isinstance(iv_numbers, list): iv_numbers = ujson.dumps(iv_numbers) query = { "order": id_order, "user": id_user, "amount": amount, "currency": currency, "invoices": iv_id, "invoices_num": iv_numbers, "invoicesData": iv_data } logging.info("remote_payment_init_query: %s", query) try: query = ujson.dumps(query) en_query = gen_encrypt_json_context( query, settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM], settings.PRIVATE_KEY_PATH) resp = get_from_remote(remote_uri, settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM], settings.PRIVATE_KEY_PATH, data=en_query, headers={'Content-Type': 'application/json'}) logging.info("payment_init_response: %s", resp) return resp except Exception, e: logging.error('Failed to get payment init %s,' 'error: %s', query, e, exc_info=True) raise ServerError('remote_payment_init_err: %s' % str(e))
def send_shipping_fee(id_shipment, id_postage, shipping_fee): try: data = { 'id_shipment': id_shipment, 'id_postage': id_postage, 'shipping_fee': shipping_fee } data = ujson.dumps(data) logging.info("Send shipping fee %s" % data) data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) rst = get_from_remote(settings.SHIPPING_FEE_URL, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) except Exception, e: logging.error("Failed to send shipping fee %s" % data, exc_info=True)
def remote_delete_order(id_order, id_brand, id_shops): try: if isinstance(id_shops, list): id_shops = ujson.dumps(id_shops) data = {'order': id_order, 'brand': id_brand, 'shops': id_shops} data = gen_encrypt_json_context( ujson.dumps(data), settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) rst = get_from_remote(settings.ORDER_DELETE, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return rst except Exception, e: logging.error('Failed to delete order %s,' 'error: %s', {'id_order': id_order}, e, exc_info=True) raise UsersServerError
def send_delete_shipment(id_shipment, id_shop, id_brand): try: data = { 'action': 'delete', 'shipment': id_shipment, 'shop': id_shop, 'brand': id_brand } data = ujson.dumps(data) data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) rst = get_from_remote(settings.ORDER_SHIPMENT, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return rst except Exception, e: logging.error('Failed to delete shipment %s,' 'error: %s', {'id_shipment': id_shipment}, e, exc_info=True) raise UsersServerError
def send_update_shipment(id_shipment, id_shop, id_brand, shipping_fee=None, handling_fee=None, status=None, tracking_num=None, content=None, shipping_date=None, tracking_name=None, shipping_carrier=None): if isinstance(content, list): content = ujson.dumps(content) try: data = {} if shipping_fee: data['shipping_fee'] = shipping_fee if handling_fee: data['handling_fee'] = handling_fee if status: data['status'] = status if tracking_num: data['tracking'] = tracking_num if content: data['content'] = content if shipping_date: data['shipping_date'] = shipping_date if tracking_name: data['tracking_name'] = tracking_name if shipping_carrier: data['shipping_carrier'] = shipping_carrier if not data: return data['shipment'] = id_shipment data['shop'] = id_shop data['brand'] = id_brand data['action'] = 'modify' data = ujson.dumps(data) data = gen_encrypt_json_context( data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH) rst = get_from_remote(settings.ORDER_SHIPMENT, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR], settings.PRIVATE_KEY_PATH, data=data, headers={'Content-Type': 'application/json'}) return rst except Exception, e: logging.error( 'Failed to update shipment %s,' 'error: %s', { 'id_shipment': id_shipment, 'shipping_fee': shipping_fee, 'handling_fee': handling_fee, 'status': status, 'tracking_num': tracking_num, 'content': content }, e, exc_info=True) raise UsersServerError