def post(self): self.set_header('Content-Type', 'application/xml; charset=UTF-8') # 解析京东请求 logging.info('jingdong api. order_refund %s', self.request.body) request = JdToUs(self.request.body) distr_shop = self.db.get('select id, taobao_api_info from distributor_shop ' 'where distributor_id=%s and taobao_seller_id=%s', options.distributor_id_jingdong, request.vender_id) api_info = json.loads(distr_shop.taobao_api_info, object_hook=json_hook) request.set_key(api_info.vender_key, api_info.secret_key) request.parse() logging.info('jingdong api. order_refund decrypted %s', ElementTree.tostring(request.message, encoding='utf-8', method='xml')) jd_order_id = request.message.findtext('JdOrderId') vender_order_id = request.message.findtext('VenderOrderId') coupons = self.db.query('select ic.* from item_coupon ic, item i ' 'where i.status=1 and ic.item_id = i.id and i.order_no=%s', vender_order_id) tobe_refund = [e.text for e in request.message.findall('Coupons/Coupon')] refunded_coupons = [] for coupon in coupons: if coupon.distr_sn in tobe_refund: result = refund_coupon(self.db, coupon.sn, '系统', '京东请求退款') if result.ok: refunded_coupons.append(coupon.distr_sn) else: logging.error('jingdong api. refund failed %s', coupon.sn) self.write(request.response('order_refund', 200, 'ok', jd_order_id=jd_order_id, vender_order_id=vender_order_id, coupons=refunded_coupons))
def post(self): # 解密58请求参数 params = get_params(self.get_argument('param')) logging.info('wuba refund request : %s', json_dumps(params)) try: # 获得参数 coupon_id = int(params.ticketId) order_id = int(params.orderId) reason = params.reason.encode('utf-8') status = int(params.status) except AttributeError: logging.info('wuba request failed: wrong params') return self.write('{"status":"10201", "msg": "参数错误"}') # 查找对应券 coupon = self.db.get('select * from item i, item_coupon c where i.id=c.item_id and c.id=%s', coupon_id) if not coupon or (order_id != int(coupon.order_no) and order_id != int(coupon.order_id)): logging.info('wuba request failed: invalid coupon_sn from wuba') return self.write('{"status": "10202", "msg": "券不存在"}') # 检查58券状态 if not 10 == status and not 11 == status and not 12 == status: logging.info('wuba request failed: coupon status is not valid for refund') return self.write('{"status": "10100", "msg": "该券状态无法退款"}') # 检查本地券状态 if coupon.status == const.status.USED: logging.info('wuba request failed: coupon was consumed, invalid for refund') return self.write('{"status": "10100", "msg": "该券为已消费状态,无法退款,需要先联系视惠客服"}') if coupon.status == const.status.REFUND: logging.info('wuba request success: coupon refund status sync to 58') return self.write('{"status": "10000", "msg": "成功"}') # 执行退款 result = refund_coupon(self.db, coupon.sn, '分销商id=%s' % coupon.distr_shop_id, reason) if result.ok: logging.info('wuba request success: coupon %s refunded' % coupon.sn) return self.write('{"status": "10000", "msg": "成功"}') else: logging.info('wuba request failed: coupon internal refund failed') return self.write('{"status": "10100", "msg": %s}' % result.msg)
def cancel(self, params, order): """ 退款 """ if not order: logging.info('taobao order cancel failed. order not found') return self.write('{"code":504}') refund_num = params.cancel_num coupons = self.db.query('select ic.* from item_coupon ic, item i ' 'where ic.item_id=i.id and i.status=1 and i.order_id=%s limit %s', order.order_id, int(refund_num)) for coupon in coupons: result = refund_coupon(self.db, coupon.sn, 'system', '淘宝接口退款') if not result.ok: logging.error('taobao refund failed internally for coupon sn %s: %s', coupon.sn, result.msg) send_email(redis=self.redis, subject='淘宝接口退款失败', to_list='*****@*****.**', html='淘宝订单退款失败coupon_sn: ' % coupon.sn) logging.info('taobao coupon cancel end') self.write('{"code":200}')
def cancel(self, params, order): """ 退款 """ if not order: logging.info('taobao order cancel failed. order not found') return self.write('{"code":504}') refund_num = params.cancel_num coupons = self.db.query( 'select ic.* from item_coupon ic, item i ' 'where ic.item_id=i.id and i.status=1 and i.order_id=%s limit %s', order.order_id, int(refund_num)) for coupon in coupons: result = refund_coupon(self.db, coupon.sn, 'system', '淘宝接口退款') if not result.ok: logging.error( 'taobao refund failed internally for coupon sn %s: %s', coupon.sn, result.msg) send_email(redis=self.redis, subject='淘宝接口退款失败', to_list='*****@*****.**', html='淘宝订单退款失败coupon_sn: ' % coupon.sn) logging.info('taobao coupon cancel end') self.write('{"code":200}')