Esempio n. 1
0
    def doCancelOrder(cls, path):
        ''' 用于客户端支付失败后取消订单
            reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed
                   1: user cancel the order in the first place
                   2: user cancel the order on sms send fail
                   3: user cancel the order on sms send timeout
        '''
        mi = TyContext.RunHttp.convertToMsgPack()
        platformOrderId = mi.getParamStr('platformOrderId', 'na')
        productOrderId = mi.getParamStr('productOrderId', 'na')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(
                platformOrderId)
        appId = mi.getParamInt('appId', 'na')
        userId = mi.getParamInt('userId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        paytype = mi.getParamStr('payType', 'na')
        errinfo = mi.getParamStr('errInfo', 'na')
        reason = mi.getParamStr('reason', 'na')

        Order.log(platformOrderId,
                  Order.CLIENT_CANCELED,
                  userId,
                  appId,
                  clientId,
                  shortId=shortId,
                  prodOrderId=productOrderId,
                  paytype=paytype,
                  subevent=reason,
                  info=errinfo if errinfo else 'na')
        mo = TyContext.Cls_MsgPack()
        mo.setCmd('cancelorder')
        mo = mo.packJson()
        return mo
Esempio n. 2
0
    def doCancelOrder(cls, path):
        ''' 用于客户端支付失败后取消订单
            reason 0: user cancel the order for client sdk (e.g. ydmm/ltw) failed
                   1: user cancel the order in the first place
                   2: user cancel the order on sms send fail
                   3: user cancel the order on sms send timeout
        '''
        mi = TyContext.RunHttp.convertToMsgPack()
        platformOrderId = mi.getParamStr('platformOrderId', 'na')
        productOrderId = mi.getParamStr('productOrderId', 'na')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(platformOrderId)
        appId = mi.getParamInt('appId', 'na')
        userId = mi.getParamInt('userId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        paytype = mi.getParamStr('payType', 'na')
        errinfo = mi.getParamStr('errInfo', 'na')
        reason = mi.getParamStr('reason', 'na')

        chargeKey = 'sdk.charge:' + platformOrderId
        chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge')
        if chargeInfo == None:
            chargeInfo = {}
        else:
            chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True)

        Order.log(platformOrderId, Order.CLIENT_CANCELED, userId, appId, clientId,
                  shortId=shortId, prodOrderId=productOrderId, paytype=paytype,
                  prodid=chargeInfo.get('prodId', 'na'),
                  diamondid=chargeInfo.get('diamondId', 'na'),
                  charge_price=chargeInfo.get('chargeTotal', 'na'),
                  subevent=reason, info=errinfo if errinfo else 'na')
        mo = TyContext.Cls_MsgPack()
        mo.setCmd('cancelorder')
        mo = mo.packJson()
        return mo
Esempio n. 3
0
    def request(cls, mi):
        TyContext.ftlog.debug('---request---mi', mi)
        userId = mi.getParamInt('userId')
        chargeType = mi.getParamStr('chargeType')
        appId = mi.getParamInt('appId', 'na')
        clientId = mi.getParamStr('clientId', 'na')
        platformOrderId = mi.getParamStr('platformOrderId')
        shortId = 'na'
        if ShortOrderIdMap.is_short_order_id_format(platformOrderId):
            shortId, platformOrderId = platformOrderId, ShortOrderIdMap.get_long_order_id(platformOrderId)

        mo = TyContext.Cls_MsgPack()
        mo.setCmd('request')

        chargeKey = 'sdk.charge:' + platformOrderId
        state, chargeInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'charge')
        TyContext.ftlog.debug('TuyouPayRequest request: order', platformOrderId,
                              'state', state, 'charge', chargeInfo)
        if state is None or not chargeInfo:
            mo.setError(1, '充值错误,请关闭界面重试')
            return mo

        if state >= PayConst.CHARGE_STATE_ERROR_REQUEST:
            mo.setError(1, '充值失败,请关闭界面重试')
            return mo

        chargeInfo = json.loads(chargeInfo)
        if chargeInfo['uid'] != userId:
            mo.setError(1, '充值事务错误')
            return mo

        if 'chargeType' not in chargeInfo or chargeInfo['chargeType'] != chargeType:
            chargeInfo['chargeType'] = chargeType
            TyContext.RedisPayData.execute('HMSET', chargeKey, 'charge', json.dumps(chargeInfo))

        state = cls.__request__(chargeType, chargeInfo, mi, mo)
        if state == PayConst.CHARGE_STATE_REQUEST:
            TyContext.RedisPayData.execute('HSET', chargeKey, 'state', state)
            Order.log(platformOrderId, Order.REQUEST_OK, userId,
                      appId, clientId,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        elif state == PayConst.CHARGE_STATE_ERROR_REQUEST:
            # mo.setError(1, '充值请求失败')
            errInfo = mo.getErrorInfo()
            TyContext.RedisPayData.execute('HMSET', chargeKey, 'state', state,
                                           'errorInfo', errInfo)
            Order.log(platformOrderId, Order.REQUEST_ERROR, userId, appId,
                      clientId, info=errInfo,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        elif state == PayConst.CHARGE_STATE_REQUEST_RETRY \
                or state == PayConst.CHARGE_STATE_REQUEST_IGNORE:
            Order.log(platformOrderId, Order.REQUEST_RETRY, userId,
                      appId, clientId,
                      diamondid=chargeInfo.get('diamondId', 'na'),
                      charge_price=chargeInfo.get('chargeTotal', 'na'),
                      paytype=chargeType)
        else:
            raise Exception('not known state ' + state)
        mo.setResult('status', state)
        return mo