Example #1
0
    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))
Example #2
0
    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)
Example #3
0
    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}')
Example #4
0
    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}')