def service_reason( headers, apply_type, order_id, item_id=None, project_code=44030011, ): url = '/aftersales/service/goods' try: log.info('service_reason() --> begin , order_id --> %s ' % order_id) if apply_type not in [ 'REFUNDONLY', 'RETURNPRODUCTANDREFUND', 'CHANGEPRODUCT' ]: log.error( f'can only [REFUNDONLY, RETURNPRODUCTANDREFUND, CHANGEPRODUCT] ,but [{apply_type}]' ) return if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] params = { 'project_code': project_code, 'order_id': order_id, 'item_id': item_id, 'type': apply_type } resp = request(method='get', headers=headers, url=host + url, params=params) return resp except Exception as e: log.error('service_detail() failed :', e)
def service_logistics(headers, order_id, item_id=None, service_id=None, project_code=44030011): url = '/aftersales/goods/logistics' try: log.info('service_logistics() --> begin , order_id --> %s ' % order_id) if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] service_id = item_info['current_service'] data = { "project_code": project_code, "order_id": order_id, "item_id": item_id, "after_service_id": service_id, "express_company_code": "SHUNFENG", "tracking_number": "123456abc", "imgs": [] } resp = request(method='post', headers=headers, url=host + url, json=data) return resp except Exception as e: log.error('service_logistics() failed :', e)
def goods_detail(goods_id, project_code=44030025): url = f'/goods/info/{goods_id}' params = {'project_code': project_code} log.info('method : goods_detail() --> begin') resp = request(method='get', url=host + url, params=params) log.info('method : goods_detail() --> end') return resp
def get_service_reason(project_code, order_id, service_type): url = '/aftersales/service/goods' item_id = order_item(order_id=order_id, key='id') params = {'project_code': project_code, 'order_id': order_id, 'item_id': item_id, 'type': service_type} log.info('method : get_service_reason() --> begin ') result = request(method='get', url=host + url, params=params) log.info('method : get_service_reason() --> end ') return result
def service_get_logistics(headers, order_id, project_code='44030011'): # 获取物流公司 url = '/aftersales/logistics/info' service_id = order_item(order_id=order_id, key='current_service') params = {'project_code': project_code, 'order_id': order_id, 'service_id': service_id} log.info('method : service_get_logistics() --> begin') resp = request(method='get', headers=headers, url=host + url, params=params) log.info('method : service_get_logistics() --> end') return resp
def service_list(order_id, project_code='44030011'): # 售后详情 url = '/aftersales/services/list' item_id = order_item(order_id=order_id, key='id') params = {'project_code': project_code, 'order_id': order_id, 'item_id': item_id} log.info('method : service_list() --> begin') resp = request(method='get', url=host + url, params=params) log.info('method : service_list() --> end') return resp
def get_sms(phone=110): # 手机号 log.info('method : get_sms() --> begin') res = request(method='get', url=host_sms) sms_phone = int(res.json().get('body')[-1].get('phone')) if sms_phone == phone: sms_info = res.json().get('body')[-1].get('msg') # 最新的一条信息 sms = re.findall('\d+', sms_info)[0] # 从msg获取手机验证码 log.info('method : get_sms() --> end -- > sms : %s' % sms) else: print(phone, 'do not receive any sms, check please first ') return None return int(sms)
def get_bind_id(headers, pay_info): # 支付token(bind_id) url = '/cards' params = {'token': pay_info} log.info('method : get_bind_id() --> begin') res = request(method='get', url=host_pay + url, params=params, headers=headers) log.info('method : get_bind_id() --> end') bind_id = res.json().get('result').get('cards')[0].get('bind_id') return bind_id
def get_pay_token(headers, bind_id, pay_info): # 支付触发验证码 url = '/pay' data_quick_pay = { "bind_id": bind_id, "token": pay_info, } log.info('method : get_pay_token() --> begin') res = request(method='post', url=host_pay + url, headers=headers, json=data_quick_pay) log.info('method : get_pay_token() --> end') quick_pay_token = res.json().get('result').get('quick_pay_token') return quick_pay_token
def get_pay_info(headers, payment_id): # 快捷支付方式获取支付信息 url = '/payment/pay' open_id = get_open_id(headers) pay_data = { "order_id": payment_id, "pay_method": "hundsun_quick_pay", "user_id": open_id, } log.info('method : get_pay_info() --> begin --> payment_id : %s' % payment_id) res = request(method='post', url=host + url, headers=headers, json=pay_data) log.info('method : get_pay_info() --> end') pay_info = res.json().get('result').get('pay_info') return pay_info
def input_logistics(headers, order_id, project_code='44030011', express_company='YUANTONG', express_no='0000001'): # 填写回寄的快递单 url = '/aftersales/goods/logistics' item_id = order_item(order_id=order_id, key='id') service_id = order_item(order_id=order_id, key='current_service') data = { "project_code": project_code, "order_id": order_id, "item_id": item_id, "after_service_id": service_id, "express_company_code": express_company, "tracking_number": express_no, "imgs": [] } log.info('method : return_logistics_info() --> begin') resp = request(method='post', headers=headers, url=host + url, json=data) log.info('method : return_logistics_info() --> end') return resp
def service_cancel(headers, order_id, item_id=None, project_code=44030011): url = '/aftersales/service/cancel/service_id' try: log.info('service_detail() --> begin , order_id --> %s ' % order_id) detail_resp = service_detail(headers=headers, order_id=order_id, item_id=item_id, project_code=project_code) service_id = detail_resp.json().get('result').get('after_service_id') url2 = url.replace('service_id', str(service_id)) data = {"project_code": project_code} resp = request(method='post', headers=headers, url=host + url2, data=data) return resp except Exception as e: log.error('service_cancel() failed :', e)
def service_detail(headers, order_id, item_id=None, project_code=44030011): url = '/aftersales/services/list' try: log.info('service_detail() --> begin , order_id --> %s ' % order_id) if not item_id: item_info = order_item.order_item(order_id=order_id) item_id = item_info['id'] params = { "project_code": project_code, "order_id": order_id, "item_id": item_id } resp = request(method='get', headers=headers, url=host + url, params=params) return resp except Exception as e: log.error('service_detail() failed :', e)
def confirm_pay(headers, pay_info, quick_pay_token, sms): url = '/confirm_sms' data = { 'sms_code': sms, 'quick_pay_token': quick_pay_token, 'token': pay_info, } log.info('method : confirm_pay() --> begin') res = request(method='post', url=host_pay + url, headers=headers, json=data) log.info('method : confirm_pay() --> end') if res.status_code == 200: transaction_id = res.json().get('result').get('transaction_id') log.info( f'method : confirm_pay() --> transaction_id : {transaction_id}') return transaction_id else: pass
def apply_service(headers, order_id, project_code=44030052, service_type='REFUNDONLY'): # 申請售後 ,RETURNPRODUCTANDREFUND--退货退款 CHANGEPRODUCT--换货 REFUNDONLY--仅退款 resp_result = get_service_reason(project_code=project_code, order_id=order_id, service_type=service_type) if resp_result.json().get('result') == '不支持的售后类型': log.error('method get_service_reason() occurred error ,method apply_service(): run over') return else: reason = resp_result.json().get('result').get('after_service_reason')[0].get('value') # 默认获取第一个原因 url = '/aftersales/service/apply' # 判断发起的售后是否合理 order_status = orders(order_id=order_id, key='order_status') if order_status in ('PAID', 'DELIVERED', 'RECEIVED'): if order_status == 'PAID' and service_type != 'REFUNDONLY': log.error(f'order_status : {order_status} ,can not apply service : {service_type}') return else: log.error( f'only order_status in [PAID, DELIVERED, RECEIVED] can apply service ,current order_status : {order_status}') return item = order_item(order_id=order_id, key='id') item_price = int(order_item(order_id=order_id, key='price') * 100) item_qty = order_item(order_id=order_id, key='quantity') shipping = int(orders(order_id=order_id, key='shipping') * 100) if service_type == 'REFUNDONLY': price = item_price * item_qty + shipping else: price = item_price * item_qty data = { "project_code": project_code, "type": service_type, "order_id": order_id, "item_id": item, "imgs": [], "after_service_reason": reason, "illustration": "Test", "price": price } log.info('method : apply_service() --> begin') resp = request(method='post', url=host + url, headers=headers, json=data) log.info('method : apply_service() --> end') return resp
def donor_ranking(headers): url = '/statistics/sunshine/donors' log.info('method : donor_ranking() --> begin') resp = request('get', host + url, headers=headers) log.info('method : donor_ranking() --> end') return resp
def service_apply(headers, order_id, project_code=44030011, apply_type='RETURNPRODUCTANDREFUND', item_id=None): url = '/aftersales/service/apply' log.info('service_apply() --> begin , order_id --> %s ' % order_id) try: # apply_type类型和原因 my_apply = { 'REFUNDONLY': 'NOTRECEIVED', 'RETURNPRODUCTANDREFUND': 'DELIVERYMISTAKE', 'CHANGEPRODUCT': 'QUALITYPROBLEM' } if apply_type in my_apply.keys(): after_service_reason = my_apply.get(apply_type) else: log.error( 'only [REFUNDONLY,RETURNPRODUCTANDREFUND,CHANGEPRODUCT] can select' ) return # 获取item_id、item_status、单价、数量,并设置申请退款金额(全额) if not item_id: item = order_item.order_item(order_id=order_id) item_id = item['id'] item_status = item.get('item_status') item_price = item.get('price') item_qty = item.get('quantity') price = int(item_price * 100) * item_qty else: item = order_item.order_item(order_id=order_id, item_id=item_id) item_status = item.get('item_status') item_price = item.get('price') item_qty = item.get('quantity') price = int(item_price * 100) * item_qty # 根据item_status判断发起的售后是否合理 if item_status in ('PAID', 'DELIVERED', 'RECEIVED'): if item_status == 'PAID' and apply_type != 'REFUNDONLY': log.error( f'item_status : [PAID] can not apply service : [REFUNDONLY]' ) return elif item_status in ('DELIVERED', 'RECEIVED') and apply_type not in ( 'RETURNPRODUCTANDREFUND', 'CHANGEPRODUCT'): log.error( f'only item_status : [PAID] can not apply service : [REFUNDONLY] , but current item_status :{item_status}' ) return else: log.error( f'only item_status in [PAID, DELIVERED, RECEIVED] can apply service ,current item_status : {item_status}' ) return data = { "project_code": project_code, "type": apply_type, "order_id": order_id, "item_id": item_id, "imgs": [], "after_service_reason": after_service_reason, "illustration": "Test", "price": price } resp = request(method='post', headers=headers, url=host + url, json=data) if resp.status_code == 200 and resp.json().get('code') == 0: log.info('service_apply() success') return resp else: log.error('service_apply() failed --> ' + resp.text) except Exception as e: log.error('service_apply() failed :', e)