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
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
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