def doLinkYunApiCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.info('doLinkYunApiCallback rparam', rparam) try: shortOrderPlatformId = rparam['cpparam'][2:] mobile = rparam['mobile'] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doLinkYunApiCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuYouPayLinkYunApi.doLinkYunApiCallback verify error !!') return 'error' rparam['chargeType'] = 'linkyun.api' rparam['third_orderid'] = rparam['orderId'] total_fee = float(rparam['price']) / 100 PayHelper.set_order_mobile(orderPlatformId, mobile) isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return '0||' else: return 'error'
def doSztyPayCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() clientip = TyContext.RunHttp.get_client_ip() sztyconfig = TyContext.Configure.get_global_item_json( 'shuzitianyu_config', {}) callback_ip = str(sztyconfig['callback_ip']) if clientip != callback_ip: TyContext.ftlog.error('doSztyPayCallback->ERROR, ip error !! ip =', clientip) return 'error' try: shortorderPlatformId = rparam['linkid'][7:] mobileId = rparam.get('mobile', '') status = int(rparam['status']) except: TyContext.ftlog.error( 'doSztyPayCallback->ERROR, param error !! rparam=', rparam) return 'error' orderPlatformId = ShortOrderIdMap.get_long_order_id( shortorderPlatformId) rparam['chargeType'] = 'shuzitianyu' if status == 1: PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, -1, rparam) # Youyifu will resend the callback if the response is NOT 'success' return 'success' else: PayHelper.callback_error(orderPlatformId, '支付失败', rparam) return 'success'
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 doLinkYunConfirm(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info('doLinkYunConfirm->args=', rparam) try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] price = rparam['price'] goodsInf = rparam['goodsInf'] sign = rparam['sign'] # 效验sign isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey) if isOk: orderPlatformId = str(goodsInf)[2:] orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute('HGET', 'sdk.charge:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) >= PayConst.CHARGE_STATE_BEGIN and int( order_state) < PayConst.CHARGE_STATE_DONE: return 'Y' return 'N' else: TyContext.ftlog.error('doLinkYunConfirm->ERROR, sign error !! ') return 'N' except: TyContext.ftlog.exception() TyContext.ftlog.error('doLinkYunConfirm->ERROR, exception error !! ', rparam) return 'N'
def doIDOCallback(cls, rpath): TyContext.ftlog.info('doIDOCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: orderidconfig = TyContext.Configure.get_global_item_json( 'IDO_orderid', {}) start = orderidconfig.get(str(rparam['price']), None)[0] end = orderidconfig.get(str(rparam['price']), None)[1] sortOrderPlatformId = rparam['order_code'][start:end] orderPlatformId = ShortOrderIdMap.get_long_order_id( sortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doIDOCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuyouPayIDO.doIDOCallbacksign verify error !!') return 'error' from tysdk.entity.pay.pay import TuyouPay trade_status = 'TRADE_FINISHED' isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1, trade_status, rparam) if isOk: return 'successful' else: return 'error'
def doIDOCallback(cls, rpath): TyContext.ftlog.info('doIDOCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: orderidconfig = TyContext.Configure.get_global_item_json( 'IDO_orderid', {}) start = orderidconfig.get(str(rparam['price']), None)[0] end = orderidconfig.get(str(rparam['price']), None)[1] shortOrderPlatformId = rparam['order_code'][start:end] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) sign = rparam['sign'] except: TyContext.ftlog.error( 'doIDOCallback->ERROR, param error !! rparam=', rparam) return 'error' # 签名校验 if not cls.__verify_sign(rparam, sign): TyContext.ftlog.error( 'TuyouPayIDO.doIDOCallbacksign verify error !!') return 'error' rparam['chargeType'] = 'linkyun.ido' rparam['third_orderid'] = rparam['orderID'] total_fee = float(rparam['price']) / 100 isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'successful' else: return 'error'
def doLinkYunUnionConfirm(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionConfirm->args=', rparam) try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderId = rparam['orderid'] orderPlatformId = str(rparam['orderid'])[2:] sign = rparam['sign'] # 效验sign=mobile#serviceid#orderid#密钥 isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#', orderId, '#', cls.sign_skey) if isOk: orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute( 'HGET', 'sdk.charge:' + str(orderPlatformId), 'state') if order_state is not None and int( order_state) >= PayConst.CHARGE_STATE_BEGIN and int( order_state) < PayConst.CHARGE_STATE_DONE: return '0' except: TyContext.ftlog.exception() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionConfirm->ERROR, rparam=', rparam) return '1'
def getUserInfo(cls, smsContent, mobile, status, OrderId, phoneType='na'): # 只有当用户订阅的时候,smsContent中才有可能会有订单号,是在_或者ty后面 redisKey = 'vipuser:'******'TuYouPayHuiYuanBaoYue->getUserInfo status is:[%s] redisKey is:[%s].' % (status, redisKey)) # 联通和电信用户订阅时,由客户端发送的短信息,含有_订单号;移动用户订阅时,由客户端发短信,第三方回掉,含有ty订单号 # 第一层控制,通过status,让特定的情况修改redis if status and ('_' in smsContent or 'ty' in smsContent): if '_' in smsContent: shortOrderId = smsContent.split('_')[1] else: shortOrderId = smsContent.split('ty')[1] # 第二层控制,判断短订单号是否和之前的相同 if HttpGateWay.isShortOrderIdSame(mobile, shortOrderId): return HttpGateWay.getUserInfoParam(mobile) OrderId[0] = platformOrderId = ShortOrderIdMap.get_long_order_id(shortOrderId) TyContext.ftlog.debug('TuYouPayHuiYuanBaoYue->getUserInfo shortOrderId : [%s], platformOrderId :[%s]' % (shortOrderId, platformOrderId)) retValue = TyContext.RedisPayData.execute('EXISTS', redisKey) if int(retValue) == 1: UserInfostatus = cls.getUserInfoStatus(redisKey) # 第三层控制,判断之前的订单是否是成功的 if 0 == cmp(UserInfostatus, 'success'): TyContext.ftlog.error( 'TuYouPayHuiYuanBaoYue->getUserInfo Mobile [%s] has already bind to somebody already. ' % mobile) return None # 程序能走到这里,只有含有订单号信息的回调、无绑定记录的电话号码、之前绑定的订单号的状态是失败的,这几种情况才可以 # 举个例子:用户重发订阅时含有订单号的短信,用户再次订阅,联通的状态为91022的回调都不会都到这儿来 chargeInfo = cls.getChargeInfo(platformOrderId, mobile) if not chargeInfo: TyContext.ftlog.error( 'TuYouPayHuiYuanBaoYue->getUserInfo Doesn\'t exit chargeInfo, key is: sdk.charge:', platformOrderId) return None try: params = { 'userId': str(chargeInfo['uid']), 'mobile': mobile, 'phoneType': phoneType, 'iccid': TyContext.UserSession.get_session_iccid(str(chargeInfo['uid'])), 'platformOrderId': platformOrderId, 'shortOrderId': shortOrderId, 'productId': chargeInfo.get('diamondId', chargeInfo.get('buttonId', chargeInfo.get('prodId', 'na'))), 'payType': chargeInfo.get('chargeType', 'na'), 'total_fee': chargeInfo['chargeTotal'], 'appId': str(chargeInfo['appId']), 'clientId': chargeInfo['clientId'], 'subscribeTime': time.strftime('%Y-%m-%d %H:%M:%S'), 'status': 'create', } except Exception, e: TyContext.ftlog.error('TuYouPayHuiYuanBaoYue->getUserInfo ERROR: ', e) return None paramsStr = json.dumps(params) TyContext.RedisPayData.execute('SET', redisKey, paramsStr)
def doZhuoWangCallback(self, rpath): xmldata = TyContext.RunHttp.get_body_content() xmldata = xmldata.replace('encoding="gbk"', 'encoding="utf-8"') xmldata = unicode(xmldata, encoding='gbk').encode('utf-8') TyContext.ftlog.info('zhuowangMdo encode->xmldata=', xmldata) transactionId = '' try: xmlroot = ElementTree.fromstring(xmldata) checkCode = xmlroot.find('checkCode').text transactionId = xmlroot.find('transactionId').text serviceId = xmlroot.find('serviceId').text spId = xmlroot.find('spId').text serviceType = xmlroot.find('serviceType').text feeType = xmlroot.find('feeType').text # 获取orderPlatformId orderPlatformId = '' parmMap = xmlroot.getiterator("paramMap")[0] for x in parmMap: k, v = x.getchildren() if k.text == 'command': orderPlatformId = v.text orderPlatformId = orderPlatformId.split(',')[-1] orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doZhuoWangCallback->ERROR, param error !! xmldata=', xmldata) return TuYouPayZhuoWang.XML_RET % (transactionId, '0') if len(orderPlatformId) != 14: TyContext.ftlog.info( 'doZhuoWangCallback->ERROR, orderPlatformId error !!', 'orderPlatformId=', orderPlatformId) return TuYouPayZhuoWang.XML_RET % (transactionId, '0') TyContext.RunMode.get_server_link(orderPlatformId) if str(checkCode) == '000': from tysdk.entity.pay.pay import TuyouPay trade_status = 'TRADE_FINISHED' notifys = {'xml': xmldata} isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, -1, trade_status, notifys) if isOk: ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '1') else: ret_msg = TuYouPayZhuoWang.XML_RET % (transactionId, '0') ret_msg = unicode(ret_msg, encoding='utf-8').encode('gbk') return ret_msg pass
def doLinkYunCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] # productCode = rparam['productCode'] price = rparam['price'] goodsInf = rparam['goodsInf'] orderPlatformId = str(goodsInf)[2:] sign = rparam['sign'] except: TyContext.ftlog.info( 'doLinkYunCallback->ERROR, param error !! rparam=', rparam) return '1||param error' # 效验sign tSign = str(orderId) + str(mobileId) + str(price) + str( goodsInf) + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunCallback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '1||sign error' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId, 'goodsInf=', goodsInf) return '1||orderPlatformId error' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) rparam['third_orderid'] = orderId total_fee = int(float(price) / 100) isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, total_fee, 'TRADE_FINISHED', rparam) if isOk: return '0||' else: return '1||charge fail'
def doLinkYunUnionCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderPlatformId = str(rparam['orderid'])[2:] msgcontent = rparam['msgcontent'] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, param error !! rparam=', rparam) return '0' # 效验sign tSign = str(mobileId) + '#' + str(serviceid) + '#' + str( msgcontent) + '#' + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '0' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunUnionCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId) return '0' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) if msgcontent == '0:0': TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED', rparam) return '0'
def doDuoKuCallback(cls, rpath): TyContext.ftlog.info('doDuoKuCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: shortOrderPlatformId = rparam['cpdefinepart'] orderPlatformId = ShortOrderIdMap.get_long_order_id( shortOrderPlatformId) appId = rparam['appid'] sign = rparam['sign'] unit = rparam['unit'] amount = rparam['amount'] status = rparam['status'] mobileId = rparam.get('phone', '') except: TyContext.ftlog.info( 'doDuoKuCallback->ERROR, param error !! rparam=', rparam) TyContext.ftlog.exception() return 'failure' if status != 'success': PayHelper.callback_error(orderPlatformId, 'pay fail', rparam) return 'failure' paykey_dict = TyContext.Configure.get_global_item_json( 'duoku_paykeys', {}) paykey = str(paykey_dict[str(appId)]) # 签名校验 if not cls.__verify_sign(rparam, paykey, sign): return 'failure' if unit == 'fen': total_fee = float(amount) / 100 else: total_fee = float(amount) rparam['chargeType'] = 'duoku' rparam['third_orderid'] = rparam['orderid'] PayHelper.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'failure'
def doDuoKuCallback(cls, rpath): TyContext.ftlog.info('doDuoKuCallback start') rparam = TyContext.RunHttp.convertArgsToDict() try: shortOrderPlatformId = rparam['cpdefinepart'] orderPlatformId = ShortOrderIdMap.get_long_order_id(shortOrderPlatformId) appId = rparam['appid'] sign = rparam['sign'] unit = rparam['unit'] amount = rparam['amount'] status = rparam['status'] mobileId = rparam.get('phone', '') except: TyContext.ftlog.info('doDuoKuCallback->ERROR, param error !! rparam=', rparam) TyContext.ftlog.exception() return 'failure' if status != 'success': PayHelperV4.callback_error(orderPlatformId, 'pay fail', rparam) return 'failure' paykey_dict = TyContext.Configure.get_global_item_json('duoku_paykeys', {}) paykey = paykey_dict.get(appId, "") if not paykey: config = GameItemConfigure.get_game_channel_configure_by_orderId(orderPlatformId) paykey = config.get('dksdk_appsecret', "") if not paykey: TyContext.ftlog.error("doDuokuCallback", "cannot get %s sdkconfig" % appId) # 签名校验 if not cls.__verify_sign(rparam, paykey, sign): return 'failure' if unit == 'fen': total_fee = float(amount) / 100 else: total_fee = float(amount) ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderid')) rparam['chargeType'] = 'duoku' rparam['third_orderid'] = rparam['orderid'] PayHelperV4.set_order_mobile(orderPlatformId, mobileId) isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam) if isOk: return 'success' else: return 'failure'
def doLinkYunUnionCallback(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionCallback->args=', rparam) try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderPlatformId = str(rparam['orderid'])[2:] msgcontent = rparam['msgcontent'] sign = rparam['sign'] # 效验sign isOk = PayHelper.verify_md5(sign, mobileId, '#', serviceid, '#', msgcontent, '#', cls.sign_skey) if isOk: # 对凌云充值的订单,把手机号补充到订单信息里 orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) PayHelper.set_order_mobile(orderPlatformId, mobileId) operator = PayHelper.get_mobile_operator(mobileId) if operator == 'chinaunicom': rparam['chargeType'] = 'linkyununion' elif operator == 'chinatelecom': rparam['chargeType'] = 'linkyundx' else: TyContext.ftlog.error( cls.__name__, 'doLinkYunUnionCallback->ERROR get_mobile_operator for', mobileId) if msgcontent == '0:0': PayHelper.callback_ok(orderPlatformId, -1, rparam) return '0' else: PayHelper.callback_error(orderPlatformId, '', rparam) except: TyContext.ftlog.exception() TyContext.ftlog.info(cls.__name__, 'doLinkYunUnionCallback->ERROR, rparam=', rparam) return '0'
def doLinkYunLtsdkCallback(self, rpath): clientIp = TyContext.RunHttp.get_client_ip() TyContext.ftlog.info('doLinkYunLtsdkCallback in clientIp=', clientIp) ''' if not clientIp in ('219.238.157.144','125.39.218.102'): return '1' ''' rparam = TyContext.RunHttp.convertArgsToDict() orderPlatformId = '' try: mobileId = rparam['mobile'] transactionId = rparam['transactionId'] orderPlatformId = rparam['outTradeNo'] status = rparam['status'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunLtsdkCallback->ERROR, param error !! rparam=', rparam) return '1' if orderPlatformId == '': TyContext.ftlog.info( 'doLinkYunLtsdkCallback->ERROR, orderPlatformId error !! orderPlatformId=', orderPlatformId) return '1' orderPlatformId = ShortOrderIdMap.get_long_order_id(orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 对凌云充值的订单,把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) if int(status) == 4: TuyouPay.doBuyChargeCallback(orderPlatformId, -1, 'TRADE_FINISHED', rparam) return '0'
def doLinkYunConfirm(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] # productCode = rparam['productCode'] price = rparam['price'] goodsInf = rparam['goodsInf'] orderPlatformId = str(goodsInf)[2:] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunConfirm->ERROR, param error !! rparam=', rparam) return 'N' # 效验sign tSign = str(orderId) + str(mobileId) + str(price) + str( goodsInf) + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunConfirm->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return 'N' else: orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) # 新增对订单状态确认,避免玩家重复发同一订单的问题 # 获取订单状态,如果订单状态大于1,则返回凌云N order_state = TyContext.RedisPayData.execute( 'HGET', 'platformOrder:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) > 1: return 'N' return 'Y'
def doLinkYunUnionConfirm(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() try: mobileId = rparam['mobile'] serviceid = rparam['serviceid'] orderId = rparam['orderid'] orderPlatformId = str(rparam['orderid'])[2:] sign = rparam['sign'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doLinkYunUnionConfirm->ERROR, param error !! rparam=', rparam) return '1' # 效验sign=mobile#serviceid#orderid#密钥 tSign = str(mobileId) + '#' + str(serviceid) + '#' + str( orderId) + '#' + TuYouPayLinkYun.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doLinkYunUnionConfirm->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return '1' else: # 新增对订单状态确认,避免玩家重复发同一订单的问题 # 获取订单状态,如果订单状态大于1,则返回凌云N orderPlatformId = ShortOrderIdMap.get_long_order_id( orderPlatformId) TyContext.RunMode.get_server_link(orderPlatformId) order_state = TyContext.RedisPayData.execute( 'HGET', 'platformOrder:' + str(orderPlatformId), 'state') if order_state != None and int(order_state) > 1: return '1' return '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
def doLinkYunCallback(cls, rpath): rparam = PayHelper.getArgsDict() TyContext.ftlog.info('doLinkYunCallback->args=', rparam) try: orderId = rparam['orderId'] mobileId = rparam['mobileId'] price = rparam['price'] goodsInf = rparam['goodsInf'] sign = rparam['sign'] isOk = PayHelper.verify_md5(sign, orderId, mobileId, price, goodsInf, cls.sign_skey) # 效验sign if not isOk: TyContext.ftlog.info('doLinkYunCallback->ERROR, sign error !!') return '1||sign error' platformOrderId = str(goodsInf)[2:] if not platformOrderId: TyContext.ftlog.info('doLinkYunCallback->ERROR, platformOrderId error !!') return '1||orderPlatformId error' # 对凌云充值的订单,把手机号补充到订单信息里 platformOrderId = ShortOrderIdMap.get_long_order_id(platformOrderId) TyContext.RunMode.get_server_link(platformOrderId) PayHelper.set_order_mobile(platformOrderId, mobileId) rparam['chargeType'] = 'linkyun' rparam['third_orderid'] = orderId total_fee = float(price) / 100 isOk = PayHelper.callback_ok(platformOrderId, total_fee, rparam) if isOk: return '0||' else: return '1||charge fail' except: TyContext.ftlog.exception() TyContext.ftlog.info('doLinkYunCallback->ERROR, param error !! rparam=', rparam) return '1||charge exception'
def doZhuowangCallback(cls, rpath): rparam = TyContext.RunHttp.convertArgsToDict() TyContext.ftlog.debug('doZhuowangCallback start, rparam=', rparam) try: sts = rparam['sts'] shortorderid = rparam['cmd'].split(',')[-1] except: TyContext.ftlog.error( 'doZhuowangCallback->ERROR, param error !! rparam=', rparam) return 'error' orderPlatformId = ShortOrderIdMap.get_long_order_id(shortorderid) mobileId = rparam.get('usernumber', 'na') PayHelper.set_order_mobile(orderPlatformId, mobileId) rparam['third_orderid'] = rparam.get('tnsid', 'na') rparam['sub_paytype'] = rparam.get('feetype', 'na') if int(sts) != 0: errinfo = 'sts(%s) not 0' % sts PayHelper.callback_error(orderPlatformId, errinfo, rparam) else: total_fee = float(rparam['feecode']) / 100 isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam) return '0' # success
def doSmsBindCallBack(cls, rparams): TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->rparams=', rparams) mobile = rparams['mobile'] sms = rparams['sms'] try: template = TyContext.Configure.get_global_item_json( 'smsup_content', decodeutf8=True) smsre = template['bindcode_re'] if smsre and isinstance(smsre, unicode): smsre = smsre.encode('utf8') shortId = re.match(smsre, sms).group(1) if not shortId: raise Exception('fail get new format smsupcontent') bindOrderId = ShortOrderIdMap.get_long_order_id(shortId) TyContext.RunMode.get_server_link(bindOrderId) # V4版本绑定手机号 if TyContext.RedisUserKeys.execute('EXISTS', 'bindOrderV4:%s' % bindOrderId): TyContext.RedisUserKeys.execute( 'HMSET', 'bindOrderV4:%s' % bindOrderId, 'mobile', mobile, 'state', AccountConst.MOBILE_BIND_SUCCESS) TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bindOrderV4', mobile, bindOrderId) return ### 用来保存订单和手机号的对于关系 userId, appId, clientId = TyContext.RedisUserKeys.execute( 'HMGET', 'bindOrder:' + bindOrderId, 'userId', 'appId', 'clientId') if not userId or not clientId: TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bind user timed out', mobile, bindOrderId) TyContext.RunMode.del_server_link(bindOrderId) return except Exception as e: TyContext.ftlog.debug( '_get_sms_orderid error parsing new format bindOrderId exception', e) sms = AccountVerify.decode64(sms) datas = sms.split('|') bindOrderId = datas[0] userId = int(datas[1]) clientId = datas[2] appId = int(datas[3]) TyContext.RunMode.get_server_link(bindOrderId) TyContext.ftlog.info(cls.__name__, 'doSmsBindCallBack->bind user of', mobile, bindOrderId, appId, userId, clientId) bindparams = { 'mobile': mobile, 'userId': userId, 'appId': appId, 'clientId': clientId, 'bindOrderId': bindOrderId, } mo = TyContext.Cls_MsgPack() AccountBind.doBindByMobile(bindparams, mo) TyContext.RunMode.del_server_link(bindOrderId)
def doZhangQuCallback(self, rpath): rparam = TyContext.RunHttp.convertArgsToDict() sortOrderId = '' linkid = '' feecode = 0 try: mobileId = rparam['mobile'] productCode = rparam['code'] region = rparam['region'] feecode = rparam['feecode'] linkid = rparam['linkid'] goodsInf = rparam['p'] sortOrderId = str(goodsInf)[-6:] sign = rparam['sign'] desc = rparam['desc'] except: TyContext.ftlog.exception() TyContext.ftlog.info( 'doZhangQuCallback->ERROR, param error !! rparam=', rparam) return 'param error' # 效验sign tSign = str(mobileId) + str(linkid) + str( productCode) + TuYouPayZhangQu.sign_skey m = md5() m.update(tSign) vSign = m.hexdigest() if sign != vSign: TyContext.ftlog.info( 'doZhangQuCallback->ERROR, sign error !! sign=', sign, 'vSign=', vSign) return 'sign error' if sortOrderId == '': TyContext.ftlog.info( 'doZhangQuCallback->ERROR, orderPlatformId error !! sortOrderId=', sortOrderId, 'goodsInf=', goodsInf) return 'orderPlatformId error' orderPlatformId = ShortOrderIdMap.get_long_order_id(sortOrderId) if len(orderPlatformId) != 14: TyContext.ftlog.info( 'doZhangQuCallback->ERROR, orderPlatformId error !! sortOrderId=', sortOrderId, 'goodsInf=', goodsInf, 'orderPlatformId=', orderPlatformId) return 'orderPlatformId error' TyContext.RunMode.get_server_link(orderPlatformId) # 把手机号补充到订单信息里 self.__set_order_mobile__(orderPlatformId, mobileId) if str(productCode) == '21000': from tysdk.entity.pay.pay import TuyouPay trade_status = 'TRADE_FINISHED' total_fee = int(int(feecode) / 100) isOk = TuyouPay.doBuyChargeCallback(orderPlatformId, total_fee, trade_status, rparam) if isOk: return linkid else: return 'charge fail' return 'charge fail' pass
def status(cls, mi): platformOrderId = mi.getParamStr('platformOrderId') platformOrderId = ShortOrderIdMap.get_long_order_id(platformOrderId) querynums = mi.getParamInt('querynums') appId = mi.getParamInt('appId') userId = mi.getParamInt('userId') clientId = mi.getParamStr('clientId', 'na') paytype = mi.getParamStr('payType', 'na') mo = TyContext.Cls_MsgPack() mo.setCmd('status') chargeKey = 'sdk.charge:' + platformOrderId state, chargeInfo, consumemo, errorInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'charge', 'consume:mo', 'errorInfo') if state == None or chargeInfo == None: mo.setError(1, 'platformOrderId参数错误') return mo chargeInfo = json.loads(chargeInfo) if paytype != 'na': chargeInfo['chargeType'] = paytype isOK = cls.__query_ext_status__(chargeInfo) if isOK: state, consumemo, errorInfo = TyContext.RedisPayData.execute('HMGET', chargeKey, 'state', 'consume:mo', 'errorInfo') if state < PayConst.CHARGE_STATE_CLIENT_PAY_DONE: TyContext.RedisPayData.execute('HMSET', chargeKey, 'state', PayConst.CHARGE_STATE_CLIENT_PAY_DONE) Order.log(platformOrderId, Order.CLIENT_FINISHED, userId, appId, clientId, paytype=paytype, diamondid=chargeInfo.get('diamondId', 'na'), charge_price=chargeInfo.get('chargeTotal', 'na'), ) # 对完成客户端请求的订单进行风控,之前在callback里进行风控效果不好,这里把total_fee=0 # appids -> {"paytype": "appid"} appids = PayCodes(clientId).appids duandais = TyContext.Configure.get_global_item_json('all_duandai_paytypes', {}) if paytype in appids.keys() and paytype in duandais: paytype = '_'.join([paytype, appids[paytype]]) RiskControl(userId).record_usage(paytype, 0) # 充值中 if state < PayConst.CHARGE_STATE_DONE: return cls.__get_query_mo(mo, state, 'process', chargeInfo, paytype, querynums) # 购买成功 if state == PayConst.CHARGE_STATE_DONE: return cls.__get_query_mo(mo, state, 'success', chargeInfo, paytype, querynums) # 充值成功 if state == PayConst.CHARGE_STATE_DONE_CONSUME: return cls.__get_query_mo(mo, state, 'success', chargeInfo, paytype, querynums) # 发货失败 if state == PayConst.CHARGE_STATE_ERROR_CONSUME: return cls.__get_query_mo(mo, state, 'bug', chargeInfo, paytype, querynums) # 支付失败 if state == PayConst.CHARGE_STATE_ERROR_CALLBACK: # 支付失败返回更多支付方式 failreturnconfig = TyContext.Configure.get_global_item_json('payfail_returnconfig', {}) payconfig = TyContext.Configure.get_global_item_json('store_payment', clientid=clientId) if payconfig and 'payment' in payconfig and 'more_categories' in payconfig['payment']: TyContext.ftlog.debug('CHARGE_STATE_ERROR_CALLBACK', payconfig['payment']['more_categories'], 'diamondId', chargeInfo['diamondId']) if payconfig['payment']['more_categories'] in failreturnconfig and chargeInfo[ 'diamondId'] in failreturnconfig: mo.setResult('des', failreturnconfig[chargeInfo['diamondId']]['des']) paytemplate = failreturnconfig[payconfig['payment']['more_categories']] paytemplateconfig = TyContext.Configure.get_global_item_json(paytemplate) mo.setResult('morepaytype', paytemplateconfig) mo.setResult('priority', paytemplateconfig[0]['paytype']) return cls.__get_query_mo(mo, state, 'fail', chargeInfo, paytype, querynums) # 充值失败 if errorInfo == None: errorInfo = '' else: errorInfo = u'充值失败原因:' + unicode(errorInfo) # 支付失败返回更多支付方式 failreturnconfig = TyContext.Configure.get_global_item_json('payfail_returnconfig', {}) payconfig = TyContext.Configure.get_global_item_json('store_payment', clientid=clientId) if payconfig and 'payment' in payconfig and 'more_categories' in payconfig['payment']: TyContext.ftlog.debug('CHARGE_STATE_ERROR_CALLBACK', payconfig['payment']['more_categories'], 'diamondId', chargeInfo['diamondId']) if payconfig['payment']['more_categories'] in failreturnconfig and chargeInfo[ 'diamondId'] in failreturnconfig: mo.setResult('des', failreturnconfig[chargeInfo['diamondId']]['des']) paytemplate = failreturnconfig[payconfig['payment']['more_categories']] paytemplateconfig = TyContext.Configure.get_global_item_json(paytemplate) mo.setResult('morepaytype', paytemplateconfig) mo.setResult('priority', paytemplateconfig[0]['paytype']) return cls.__get_query_mo(mo, state, 'fail', chargeInfo, paytype, querynums, errorInfo)
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