def charge_data(cls, mi): chargeinfo = cls.get_charge_info(mi) packageName = chargeinfo['packageName'] appId = chargeinfo['appId'] buttonId = chargeinfo['diamondId'] clientId = chargeinfo['clientId'] # 先取多appId对应的支付配置 payData = None duokuAppId = mi.getParamStr('dksdk_appid', "") config = GameItemConfigure(appId).get_game_channel_configure_by_primarykey('duoku', 'dksdk_appid', duokuAppId, chargeinfo['mainChannel']) if config: prodconfig = config.get('products', {}) diamondList = filter(lambda x: buttonId in x.values(), prodconfig) payData = diamondList[0] if diamondList else {} if payData: orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData return cls.return_mo(0, chargeInfo=chargeinfo) prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids') if duokuAppId: config = prodconfig.get(duokuAppId, None) if config: payData = config.get(buttonId, None) if not payData: if packageName: try: appconfig = prodconfig[packageName] payData = appconfig[buttonId] except: TyContext.ftlog.exception() raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId) else: try: appconfig = prodconfig[str(appId)] payData = appconfig[buttonId] except Exception as e: TyContext.ftlog.exception() raise PayErrorV4(1, '【百度】找不到这个商品[%s]配置!' % buttonId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id(orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData return cls.return_mo(0, chargeInfo=chargeinfo)
def doBuyStraight(self, userId, params, mo): prodId = params['prodId'] appId = params['appId'] payCode = '' orderPhone = '10658077696611' if prodId == 'VOICE100': payCode = 'YX,258736,1,ff3f,1800529,611001' if prodId == 'MOONKEY': payCode = 'YX,258736,2,02fb,1800529,611001' if prodId == 'CARDMATCH10': payCode = 'YX,258736,3,0b75,1800529,611001' if prodId == 'T80K': payCode = 'YX,258736,4,3e00,1800529,611001' if prodId == 'T100K': payCode = 'YX,258736,5,9f1f,1800529,611001' if prodId == 'RAFFLE_NEW': payCode = 'YX,258736,6,a822,1800529,611001' if prodId == 'ZHUANYUN_MEZZO': payCode = 'YX,258736,7,c9ec,1800529,611001' orderPlatformId = ShortOrderIdMap.get_short_order_id( params['orderPlatformId']) payCode = payCode + ',' + orderPlatformId payData = {'msgOrderCode': payCode, 'orderPhone': orderPhone} params['payData'] = payData mo.setResult('payData', payData) mo.setResult('orderPlatformId', orderPlatformId) pass
def charge_data(cls, chargeinfo): userId = chargeinfo['uid'] price = int(float(chargeinfo['chargeTotal'])) platformOrderId = chargeinfo['platformOrderId'] shortOrderId = ShortOrderIdMap.get_short_order_id(platformOrderId) response, spnumber = cls.__create_order(price, shortOrderId) if len(response) == 1: TyContext.ftlog.error('TuYouPaySzty create_order failed for user', userId, 'orderid', platformOrderId, 'response', response) return sms_msg = response if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return messages = [(spnumber, sms_msg, 1000)] no_hint = chargeinfo.get('nohint', None) payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint) SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
def doBuyStraight(self, userId, params, mo): appId = params['appId'] prodId = params['prodId'] prodconfig = TyContext.Configure.get_global_item_json( 'IDO_prodids', {}) smscodeconfig = TyContext.Configure.get_global_item_json( 'IDO_smscodes', {}) data = prodconfig[str(appId)].get(prodId, None) if data: amount = data['price'] else: raise Exception('can not find IDO product define of prodId=' + prodId) orderPlatformId = params['orderPlatformId'] sortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) smsPort = '1065889920' smscode = smscodeconfig.get(str(amount), None) if smscode: smsMsg = smscode.format(orderId=sortOrderPlatformId + '00') else: raise Exception('can not find IDO smscode in the price=' + amount) # type是短信支付的方式,1代表的是发一条短信支付 smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort} mo.setResult('smsPayinfo', smsPayinfo)
def charge_data(cls, chargeinfo): appId = chargeinfo['appId'] buttonId = chargeinfo['buttonId'] clientId = chargeinfo['clientId'] packageName = chargeinfo.get('packageName') prodconfig = TyContext.Configure.get_global_item_json('duoku_prodids') if packageName: try: appconfig = prodconfig[packageName] payData = appconfig[buttonId] except: TyContext.ftlog.exception() raise Exception( 'can not find duoku product define: buttonId=' + buttonId + ' clientId=' + clientId) else: try: appconfig = prodconfig[str(appId)] payData = appconfig[buttonId] except Exception as e: TyContext.ftlog.exception() raise Exception( 'can not find duoku product define: buttonId=' + buttonId + ' clientId=' + clientId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) payData['orderPlatformId'] = shortOrderPlatformId chargeinfo['chargeData'] = payData
def charge_data(cls, chargeinfo): appId = chargeinfo['appId'] prodId = chargeinfo.get("prodId", chargeinfo['diamondId']) prodconfig = TyContext.Configure.get_global_item_json( 'IDO_prodids', {}) smscodeconfig = TyContext.Configure.get_global_item_json( 'IDO_smscodes', {}) data = prodconfig[str(appId)].get(prodId, None) if data: amount = data['price'] else: raise Exception('can not find IDO product define of prodId=' + prodId) orderPlatformId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id( orderPlatformId) smsPort = '1065889920' smscode = smscodeconfig.get(str(amount), None) if smscode: smsMsg = smscode.format(orderId=shortOrderPlatformId + '00') else: raise Exception('can not find IDO smscode in the price=' + amount) # type是短信支付的方式,1代表的是发一条短信支付 smsPayinfo = {'type': '1', 'smsMsg': smsMsg, 'smsPort': smsPort} chargeinfo['chargeData'] = {'smsPayinfo': smsPayinfo}
def charge_data(cls, chargeinfo): mdo_config = TyContext.Configure.get_global_item_json( 'zwmdo_configs', {}) price = int(float(chargeinfo['chargeTotal'])) if not str(price) in mdo_config['smscodes']: TyContext.ftlog.error( 'can not find zhuowang smscode in the price=', price) return orderPlatformId = chargeinfo['platformOrderId'] spnumber = mdo_config['spnumber'] smscode = mdo_config['smscodes'][str(price)] shortorderid = ShortOrderIdMap.get_short_order_id(orderPlatformId) sms_msg = smscode.format(orderId=shortorderid) # type是短信支付的方式,1代表的是发一条短信支付 userId = chargeinfo['uid'] if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber) else: no_hint = chargeinfo.get('nohint', None) messages = [] messages.append((spnumber, sms_msg, 1000)) payinfo = SmsPayInfo.build_sms_payinfo(messages, nohint=no_hint) SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo}
def doGetSmsBindCode(cls, rparams, mo): TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->rparams=', rparams) appId = rparams['appId'] clientId = rparams['clientId'] userId = rparams['userId'] bound = False if userId > 0: bindMobile = TyContext.RedisUser.execute(userId, 'HGET', 'user:'******'bindMobile') if bindMobile is not None and len(str(bindMobile)) == 11: bound = True if bound: mo.setResult('code', AccountConst.CODE_USER_MOBILE_BINDED) mo.setResult('info', '当前账号已绑定手机') return bindOrderId = TyContext.ServerControl.makeSmsBindOrderIdV3( userId, appId, clientId) shortId = ShortOrderIdMap.get_short_order_id(bindOrderId) smsconfig = TyContext.Configure.get_global_item_json( 'smsup_content', {}) sms = smsconfig['bindcode'] % int(shortId) mo.setResult('code', 0) mo.setResult('sms', sms) ### TyContext.RedisUserKeys.execute('HMSET', 'bindOrder:' + bindOrderId, 'state', AccountConst.MOBILE_BIND_PENDING, 'userId', userId, 'appId', appId, 'clientId', clientId) TyContext.RedisUserKeys.execute('EXPIRE', 'bindOrder:' + bindOrderId, 5 * 60) mo.setResult('bindOrderId', bindOrderId) smsup_port = TyContext.Configure.get_global_item_str('smsup_port') mo.setResult('port', smsup_port) TyContext.ftlog.info(cls.__name__, 'doGetSmsBindCode->bindOrderId=', bindOrderId, 'userid=', userId, 'sms', sms, 'port', smsup_port)
def doBuyStraight(self, userId, params, mo): prodId = params['prodId'] payCode = '' orderPhone = '' if prodId == 'T20K' or prodId == 'CARDMATCH10' or prodId == 'MOONKEY' or prodId == 'TGBOX1' or prodId == 'T3_NS_COIN_2' or prodId == 'COIN8' or prodId == 'TEXAS_COIN1' or prodId == 'C2': payCode = 'YY,11,10026' orderPhone = '10658035616002' sortOrderId = ShortOrderIdMap.get_short_order_id( params['orderPlatformId']) payData = { 'msgOrderCode': payCode, 'orderPhone': orderPhone, 'sortOrderId': sortOrderId } params['payData'] = payData mo.setResult('payData', payData) pass
def _charge_data(cls, chargeinfo): duandai_paytypes = TyContext.Configure.get_global_item_json("all_duandai_paytypes") noncfg_paytypes = TyContext.Configure.get_global_item_json("nonconfigured_duandai_paytypes") chargeType = chargeinfo['chargeType'] cfun, cdata = None, {} if chargeType in duandai_paytypes and chargeType not in noncfg_paytypes: phoneType = TyContext.UserSession.get_phone_type_code(chargeinfo['phoneType']) _, cdata = cls._get_duandai_paydata( chargeinfo['appId'], chargeinfo['buttonId'], chargeinfo['clientId'], phoneType, chargeinfo) chargeinfo['chargeData'] = cdata else: if chargeType in cls._charg_data_funs: cfun = cls._charg_data_funs[chargeType] else: if chargeType in TuyouPayChargeConf.CHARGE_DATA: cpath = TuyouPayChargeConf.CHARGE_DATA[chargeType] tks = cpath.split('.') mpackage = '.'.join(tks[0:-1]) clsName = tks[-1] clazz = None exec 'from %s import %s as clazz' % (mpackage, clsName) cfun = getattr(clazz, 'charge_data') cls._charg_data_funs[chargeType] = cfun else: cls._charg_data_funs[chargeType] = None if cfun: try: cfun(chargeinfo) cdata = chargeinfo['chargeData'] except: pass TyContext.ftlog.debug('_charge_data', 'chargeinfo', chargeinfo, 'cfun', cfun, 'cdata', cdata) if not cdata: return if cdata.get('need_short_order_id', 0) == 1: chargeinfo['shortDiamondOrderId'] = \ ShortOrderIdMap.get_short_order_id(chargeinfo['platformOrderId'])
def get_charge_data(cls, chargeinfo): ''' delegate to charge_data func of thirdpay ''' cfun = TuyouPayChargeConf.get_charge_data_func( chargeinfo['chargeType']) try: cfun(chargeinfo) except TyContext.FreetimeException as e: raise except Exception as e: TyContext.ftlog.exception() return if 'chargeData' not in chargeinfo and 'chargeCategories' not in chargeinfo: raise Exception( 'neither chargeData nor chargeCategories in chargeinfo') try: if chargeinfo['chargeData'].get('need_short_order_id', 0): chargeinfo[ 'shortDiamondOrderId'] = ShortOrderIdMap.get_short_order_id( chargeinfo['platformOrderId']) except: pass
def doBuyStraight(self, userId, params, mo): appId = params['appId'] prodId = params['prodId'] phoneType = params['phoneType'] # TyContext.ftlog.info("linkyun->params=",params) # 判断是移动, 缺省为移动 # if phoneType == 'chinaMobile': payCodeOne = '010' payCodeTwo = '020' payCodeThree = '050' # payCodeFour = '081' payCodeFour = '080' payCodeFive = '100' orderChannel = '98' orderPhoneOne = '1065800810025938' orderPhoneTwo = '1065800810025938' orderPhoneThree = '1065800810025938' orderPhoneFour = '1065800810025938' orderPhoneFive = '1065800810025938' orderVerifyPhone = '1065800810025938' orderVerifyPhone2 = '1065800810025938' ''' orderPhoneOne = '1065800810115938' orderPhoneTwo = '1065800810115938' orderPhoneThree = '1065800810115938' orderPhoneFour = '1065800810113130' orderVerifyPhone = '1065800810125938' orderVerifyPhone2 = '1065800810123130' ''' # 判断是联通 if phoneType == 'chinaUnion': payCodeOne = '3#HJ182' payCodeTwo = '4#HJ183' payCodeThree = '' orderChannel = '98' orderPhoneOne = '10655556076' orderPhoneTwo = '10655556152' orderPhoneThree = '' orderVerifyPhone = str(random.choice( TuYouPayLinkYun.union_mobiles)) # 判断是电信 if phoneType == 'chinaTelecom': payCodeOne = '177#HJ486' payCodeTwo = '1048#HJ487' payCodeThree = '104#HJ488' orderChannel = '98' orderPhoneOne = '1066916531' orderPhoneTwo = '1066916503' orderPhoneThree = '1066916535' orderVerifyPhone = str(random.choice(TuYouPayLinkYun.tel_mobiles)) payCode = payCodeThree orderPhone = orderPhoneThree if prodId == 'T20K' or prodId == 'CARDMATCH10' or prodId == 'TGBOX1' or prodId == 'T3_NS_COIN_2' or prodId == 'COIN8' or prodId == 'TEXAS_COIN1' or prodId == 'C2': payCode = payCodeTwo orderPhone = orderPhoneTwo if prodId == 'T50K' or prodId == 'TGBOX2' or prodId == 'RAFFLE_5' or prodId == 'T3_NS_COIN_5' or prodId == 'COIN7' or prodId == 'C5' or prodId == 'C5_LUCKY' or prodId == 'TEXAS_COIN6' or prodId == 'diamond5': payCode = payCodeThree orderPhone = orderPhoneThree if prodId == 'MOONKEY': payCode = payCodeTwo orderPhone = orderPhoneTwo if prodId == 'MOONKEY3': payCode = payCodeThree orderPhone = orderPhoneThree if prodId == 'VOICE100': payCode = payCodeOne orderPhone = orderPhoneOne if prodId == 'RAFFLE' and str(appId) == '6': payCode = payCodeThree orderPhone = orderPhoneThree if prodId == 'RAFFLE' and str(appId) != '6': payCode = payCodeTwo orderPhone = orderPhoneTwo if prodId == 'RAFFLE_NEW' or prodId == 'T80K' or prodId == 'ZHUANYUN_MEZZO' or prodId == 'C8' or prodId == 'C8_RAFFLE' or prodId == 'C8_LUCKY' or prodId == 'TEXAS_COIN_R8' or prodId == 'TEXAS_COIN_LUCKY_R8' or prodId == 'TGBOX9' or prodId == 'RAFFLE_8' or prodId == 'ZHUANYUN_8': payCode = payCodeFour orderPhone = orderPhoneFour orderVerifyPhone = orderVerifyPhone2 if prodId == 'T100K' or prodId == 'C10' or prodId == 'TEXAS_COIN2': payCode = payCodeFive orderPhone = orderPhoneFive payData = { 'msgOrderCode': payCode, 'orderChannel': orderChannel, 'orderPhone': orderPhone, 'orderVerifyPhone': orderVerifyPhone } params['payData'] = payData mo.setResult('payData', payData) mo.setResult( 'orderPlatformId', ShortOrderIdMap.get_short_order_id(params['orderPlatformId']))
def doBuyStraightDx(self, userId, params, mo): appId = params['appId'] prodId = params['prodId'] phoneType = params['phoneType'] payCodeOne = 'w01d10c' payCodeTwo = 'a02d10c' payCodeFive = 'f05d10c' payCodeSix = '106d10c' payCodeEight = '808d10c' payCodeTen = '910d10c' orderChannel = '98' # 1、2、5元端口 orderPhoneOne = '10661025' # 6元端口 orderPhoneTwo = '106598725' # 8元端口 orderPhoneThree = '1065987215' # 10元端口 orderPhoneFour = '1065987216' payCode = payCodeFive if prodId == 'T20K' or prodId == 'CARDMATCH10' or prodId == 'TGBOX1' or prodId == 'T3_NS_COIN_2' or prodId == 'COIN8' or prodId == 'TEXAS_COIN1' or prodId == 'C2': payCode = payCodeTwo orderPhone = orderPhoneOne if prodId == 'T50K' or prodId == 'TGBOX2' or prodId == 'T3_NS_COIN_5' or prodId == 'COIN7' or prodId == 'C5' or prodId == 'C5_LUCKY' or prodId == 'TEXAS_COIN6' or prodId == 'diamond5': payCode = payCodeFive orderPhone = orderPhoneOne if prodId == 'MOONKEY': payCode = payCodeTwo orderPhone = orderPhoneOne if prodId == 'MOONKEY3': payCode = payCodeFive orderPhone = orderPhoneOne if prodId == 'VOICE100': payCode = payCodeOne orderPhone = orderPhoneOne if prodId == 'RAFFLE' and str(appId) == '6': payCode = payCodeFive orderPhone = orderPhoneOne if prodId == 'RAFFLE' and str(appId) != '6': payCode = payCodeTwo orderPhone = orderPhoneOne if prodId == 'T60K' or prodId == 'ZHUANYUN_6' or prodId == 'RAFFLE_6' or prodId == 'TEXAS_COIN_R6' or prodId == 'TEXAS_COIN_LUCKY_R6' or prodId == 'C6' or prodId == 'C6_RAFFLE': payCode = payCodeSix orderPhone = orderPhoneTwo if prodId == 'RAFFLE_NEW' or prodId == 'T80K' or prodId == 'ZHUANYUN_MEZZO' or prodId == 'C8' or prodId == 'C8_RAFFLE' or prodId == 'C8_LUCKY' or prodId == 'TEXAS_COIN_R8' or prodId == 'TEXAS_COIN_LUCKY_R8' or prodId == 'TGBOX9' or prodId == 'RAFFLE_8' or prodId == 'ZHUANYUN_8': payCode = payCodeEight orderPhone = orderPhoneThree if prodId == 'T100K' or prodId == 'C10' or prodId == 'TEXAS_COIN2': payCode = payCodeTen orderPhone = orderPhoneFour payData = { 'msgOrderCode': payCode, 'orderChannel': orderChannel, 'orderPhone': orderPhone } params['payData'] = payData mo.setResult('payData', payData) mo.setResult( 'orderPlatformId', ShortOrderIdMap.get_short_order_id(params['orderPlatformId']))
def doBuyStraightLtsdk(self, userId, params, mo): mo.setResult( 'orderPlatformId', ShortOrderIdMap.get_short_order_id(params['orderPlatformId']))
def charge_data(self, mi): chargeinfo = self.get_charge_info(mi) userId, platformOrderId, phoneType = chargeinfo['uid'], chargeinfo[ 'platformOrderId'], chargeinfo['phoneType'] shortOrderId = ShortOrderIdMap.get_short_order_id(platformOrderId) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data platformOrderId:[%s] and shortOrderId:[%s]' % (platformOrderId, shortOrderId)) phoneType = TyContext.UserSession.get_phone_type_name(phoneType) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data phoneType:[%s].' % phoneType) reportBiParams = {} reportBiParams['platformOrderId'] = platformOrderId reportBiParams['userId'] = userId reportBiParams['appId'] = chargeinfo['appId'] reportBiParams['mobile'] = 'na' reportBiParams['clientId'] = chargeinfo['clientId'] reportBiParams['productId'] = chargeinfo.get( 'diamondId', chargeinfo.get('buttonId', chargeinfo.get('prodId', 'na'))) reportBiParams['payType'] = chargeinfo.get('chargeType', 'na') if 0 == cmp(phoneType, 'chinaMobile'): iccid = TyContext.UserSession.get_session_iccid(userId) citycode = self.getCityCode(iccid) if citycode == 1: self.chargeDataErrorMsg(chargeinfo, shortOrderId, citycode) return self.return_mo(0, chargeInfo=chargeinfo) elif citycode == 2: TyContext.ftlog.info( 'TuYouPayHuiYuanBaoYue->charge_data User client not support Monthly VIP, iccid: [%s]' % iccid) self.reportBi(Order.CLIENT_CANCELED, reportBiParams) self.chargeDataErrorMsg(chargeinfo, shortOrderId, citycode) return self.return_mo(0, chargeInfo=chargeinfo) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data citycode:[%s].' % citycode) smsConfigInfo = TyContext.Configure.get_global_item_json( 'chinaMobile_monthly_smsContent', {}) smsInfo = smsConfigInfo.get(str(citycode), None) if not smsInfo: self.chargeDataErrorMsg(chargeinfo, shortOrderId, 2) self.reportBi(Order.CLIENT_CANCELED, reportBiParams) TyContext.ftlog.info( 'TuYouPayHuiYuanBaoYue->charge_data User client not support Monthly VIP, iccid: [%s]' % iccid) return self.return_mo(0, chargeInfo=chargeinfo) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data smsInfo is: ', smsInfo) sms_msg, spnumber = smsInfo['subscribe'] autoReplyMsg = smsInfo['auto_reply'] unsub_sms_msg, unsub_spnumber = smsInfo['unsubscribe'] TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data sms_msg:[%s] and spnumber:[%s] and antuReplyMsg:[%s].' % (sms_msg, spnumber, autoReplyMsg)) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data unsub_sms_msg:[%s] and unsub_spnumber:[%s].' % (unsub_sms_msg, unsub_spnumber)) TyContext.RedisPayData.execute( 'SET', 'unsubMonthlySmsInfo:' + str(userId), self.getUnsubscribeSms(unsub_sms_msg, unsub_spnumber)) # 获取自动回复功能的短信监听内容 autoReplyListenContent = TyContext.Configure.get_global_item_json( 'monthly_vip_sms_auto_reply_listen_content', {}) listenContent = autoReplyListenContent[phoneType] messageContent = [autoReplyMsg, ""] messageContent += listenContent monthlyVipParams = TyContext.Configure.get_global_item_json( 'monthly_vip_params', {}) orderIdPhonenum = monthlyVipParams['orderIdPhonenum'] order_sms_msg = '1125ty' + shortOrderId messages = [] message1 = (orderIdPhonenum, order_sms_msg, 0) message2 = (spnumber, sms_msg, 0) message3 = ('', '', -1, messageContent) messages.append(message1) messages.append(message2) messages.append(message3) if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(5, order_sms_msg, orderIdPhonenum, sms_msg, spnumber) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return self.return_mo(0, chargeInfo=chargeinfo) no_hint = chargeinfo.get('nohint', None) payinfo = {'messages': messages} payinfo['support'] = 'true' if no_hint: payinfo['nohint'] = no_hint SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return self.return_mo(0, chargeInfo=chargeinfo) elif 0 == cmp(phoneType, 'chinaUnion'): iccid = TyContext.UserSession.get_session_iccid(userId) citycode = self.getChinaUnionCityCode(iccid) if citycode == 1: self.chargeDataErrorMsg(chargeinfo, shortOrderId, citycode) return self.return_mo(0, chargeInfo=chargeinfo) elif citycode == 2: self.reportBi(Order.CLIENT_CANCELED, reportBiParams) TyContext.ftlog.info( 'TuYouPayHuiYuanBaoYue->charge_data User client not support Monthly VIP, iccid [%s]' % iccid) self.chargeDataErrorMsg(chargeinfo, shortOrderId, citycode) return self.return_mo(0, chargeInfo=chargeinfo) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data citycode:[%s].' % citycode) smsConfigInfo = TyContext.Configure.get_global_item_json( 'chinaUnion_monthly_smsContent', {}) smsInfo = smsConfigInfo.get(str(citycode), None) if not smsInfo: self.chargeDataErrorMsg(chargeinfo, shortOrderId, 2) self.reportBi(Order.CLIENT_CANCELED, reportBiParams) TyContext.ftlog.info( 'TuYouPayHuiYuanBaoYue->charge_data User client not support Monthly VIP, iccid: [%s]' % iccid) return self.return_mo(0, chargeInfo=chargeinfo) TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data smsInfo is: ', smsInfo) sms_msg, spnumber = smsInfo['subscribe'] autoReplyMsg = smsInfo['auto_reply'] unsub_sms_msg, unsub_spnumber = smsInfo['unsubscribe'] TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data sms_msg:[%s] and spnumber:[%s] and antuReplyMsg:[%s].' % (sms_msg, spnumber, autoReplyMsg)) # 获取自动回复功能的短信监听内容 autoReplyListenContent = TyContext.Configure.get_global_item_json( 'monthly_vip_sms_auto_reply_listen_content', {}) listenContent = autoReplyListenContent[phoneType] messageContent = [autoReplyMsg, ""] messageContent += listenContent sms_msg = sms_msg + '_' + shortOrderId messages = [] message1 = (spnumber, sms_msg, 0) message2 = ('', '', -1, messageContent) messages.append(message1) messages.append(message2) elif 0 == cmp(phoneType, 'chinaTelecom'): smsConfigInfo = TyContext.Configure.get_global_item_json( 'chinaTelecom_monthly_smsContent', {}) sms_msg, spnumber = smsConfigInfo['subscribe'] autoReplyMsg = smsConfigInfo['auto_reply'] unsub_sms_msg, unsub_spnumber = smsConfigInfo['unsubscribe'] TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data sms_msg:[%s] and spnumber:[%s] and antuReplyMsg:[%s].' % (sms_msg, spnumber, autoReplyMsg)) # 获取自动回复功能的短信监听内容 autoReplyListenContent = TyContext.Configure.get_global_item_json( 'monthly_vip_sms_auto_reply_listen_content', {}) listenContent = autoReplyListenContent[phoneType] messageContent = [autoReplyMsg, ""] messageContent += listenContent sms_msg = sms_msg + '_' + shortOrderId messages = [] message1 = (spnumber, sms_msg, 0) message2 = ('', '', -1, messageContent) messages.append(message1) messages.append(message2) else: self.chargeDataErrorMsg(chargeinfo, shortOrderId, 1) return self.return_mo(0, chargeInfo=chargeinfo) # 联通和电信会走该逻辑 TyContext.ftlog.debug( 'TuYouPayHuiYuanBaoYue->charge_data unsub_sms_msg:[%s] and unsub_spnumber:[%s].' % (unsub_sms_msg, unsub_spnumber)) TyContext.RedisPayData.execute( 'SET', 'unsubMonthlySmsInfo:' + str(userId), self.getUnsubscribeSms(unsub_sms_msg, unsub_spnumber)) if not ClientRevision(userId).support_type0_smspayinfo: payinfo = SmsPayInfo.getSmsPayInfo(1, sms_msg, spnumber) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return self.return_mo(0, chargeInfo=chargeinfo) no_hint = chargeinfo.get('nohint', None) payinfo = {'messages': messages} payinfo['support'] = 'true' if no_hint: payinfo['nohint'] = no_hint SmsPayInfo.fill_in_dialog_text(payinfo, chargeinfo['buttonName'], chargeinfo['diamondPrice']) chargeinfo['chargeData'] = {'smsPayinfo': payinfo} return self.return_mo(0, chargeInfo=chargeinfo)
def _charge_begin_w_categories(cls, appId, appInfo, clientId, userId, authorCode, diamondId, diamondPrice, diamondCount, diamondName, diamondsPerUnit, mo, consumeinfo, payInfo, **kwds): mo.setCmd('charge') # 取得钻石的购买信息 if diamondCount <= 0: diamondCount = 1 else: diamondCount = int(diamondCount) if diamondCount != 1: TyContext.ftlog.error(cls.__name__, 'charge diamond count error') mo.setError(2, '钻石信息错误,请重新充值') return chargeTotal = diamondPrice * diamondCount # 建立充值事物 diamondOrderId = TyContext.ServerControl.makeChargeOrderIdV3(userId, appId, clientId) shortDiamondOrderId = diamondOrderId product = None if consumeinfo: prodId = consumeinfo['prodId'] product = TuyouPayProductList.product(appId, clientId, prodId) if product: buttonId = prodId buttonName = consumeinfo['prodName'] else: product = TuyouPayProductList.product(appId, clientId, diamondId) buttonId = diamondId buttonName = diamondName TyContext.ftlog.debug(cls.__name__, 'product', product) if product is None or 'charge_categories' not in product: TyContext.ftlog.error(cls.__name__, 'product not exist or ' 'charge_categories absent in product', product) mo.setError(2, '商品配置信息错误,请稍后重试') return chargeCategories = copy.deepcopy(product['charge_categories']) phoneType = TyContext.UserSession.get_session_phone_type(userId) is_shortcut = cls._process_shortcut_category(userId, clientId, chargeCategories) TyContext.ftlog.debug(cls.__name__, 'after _process_shortcut_category is_shortcut', is_shortcut, 'chargeCategories', chargeCategories) chargeinfo = {'uid': userId, 'appId': appId, 'appInfo': appInfo, 'clientId': clientId, 'diamondId': diamondId, 'diamondPrice': diamondPrice, 'diamondCount': diamondCount, 'diamondsPerUnit': diamondsPerUnit, 'diamondName': diamondName, 'chargeTotal': chargeTotal, 'platformOrderId': diamondOrderId, 'phoneType': phoneType, 'payInfo': payInfo, 'buttonId': buttonId, 'buttonName': buttonName, 'packageName': kwds.get('packageName', ''), 'channelName': kwds.get('channelName', ''), } if consumeinfo: chargeinfo['prodId'] = prodId has_duandai, needShort = cls._process_duandai_category( appId, userId, clientId, phoneType, buttonId, chargeCategories, chargeinfo) if has_duandai: if needShort: shortDiamondOrderId = ShortOrderIdMap.get_short_order_id(diamondOrderId) elif is_shortcut: chargeCategories = copy.deepcopy(product['charge_categories']) cls._remove_duandai_category(chargeCategories) is_shortcut = 0 TyContext.ftlog.debug(cls.__name__, 'after _process_duandai_category is_shortcut', is_shortcut, 'chargeCategories', chargeCategories) timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') if len(shortDiamondOrderId) < len(diamondOrderId): chargeinfo['shortDiamondOrderId'] = shortDiamondOrderId if is_shortcut: chargeinfo['chargeType'] = chargeCategories[0]['paytype'] chargeinfo['chargeData'] = chargeCategories[0]['payData'] else: chargeinfo['chargeCategories'] = chargeCategories chargeinfo_dump = json.dumps(chargeinfo) TyContext.ftlog.info('_charge_begin_w_categories transaction', chargeinfo_dump, consumeinfo) datas = ['state', PayConst.CHARGE_STATE_BEGIN, 'charge', chargeinfo_dump, 'createTime', timestamp] if consumeinfo: datas.append('consume') datas.append(json.dumps(consumeinfo)) TyContext.RedisPayData.execute('HMSET', 'sdk.charge:' + diamondOrderId, *datas) # 返回数据 mo.setResult('userId', userId) mo.setResult('appId', appId) mo.setResult('appInfo', appInfo) mo.setResult('clientId', clientId) mo.setResult('diamondId', diamondId) mo.setResult('diamondPrice', diamondPrice) mo.setResult('diamondCount', diamondCount) mo.setResult('diamondsPerUnit', diamondsPerUnit) mo.setResult('diamondName', diamondName) # 客户端SDK根据消息里是带chargeType还是chargeCategories来区分是老版支付 # 界面还是新版支付界面 if is_shortcut: mo.setResult('chargeType', chargeinfo['chargeType']) mo.setResult('chargeData', chargeinfo['chargeData']) else: mo.setResult('chargeCategories', chargeCategories) try: third_prodid = chargeinfo['chargeData']['paydata']['msgOrderCode'] except: third_prodid = 'na' pay_appid = Order.get_pay_appid(chargeinfo.get('chargeType', 'na'), payInfo, clientId) shortId = shortDiamondOrderId if len(shortDiamondOrderId) < len(diamondOrderId) else 'na' Order.log(diamondOrderId, Order.CREATE, userId, appId, clientId, diamondid=diamondId, prodid=prodId if consumeinfo else 'na', prod_price=consumeinfo['prodPrice'] if consumeinfo else 'na', paytype=chargeinfo.get('chargeType', 'na'), charge_price=chargeTotal, shortId=shortId, third_prodid=third_prodid, pay_appid=pay_appid) mo.setResult('platformOrderId', shortDiamondOrderId)
def make_order_id(self, userId, appId, clientId): orderId = TyContext.ServerControl.makeChargeOrderIdV4( userId, appId, clientId) if self.need_short_order_id: return ShortOrderIdMap.get_short_order_id(orderId) return orderId
def charge_data(cls, chargeinfo): TyContext.ftlog.debug('TuYouPayLinkYunApi charge_data', chargeinfo) smsMsg = '' smsPort = '' smsType = '1' userId = chargeinfo['uid'] appId = chargeinfo['appId'] phoneType = TyContext.UserSession.get_phone_type_name( chargeinfo['phoneType']) prodId = chargeinfo.get("prodId", chargeinfo['diamondId']) price = str(chargeinfo['chargeTotal']) platformOrderId = chargeinfo['platformOrderId'] shortOrderPlatformId = ShortOrderIdMap.get_short_order_id( platformOrderId) iccid = TyContext.UserSession.get_session_iccid(userId) postparams = {} postparams['ip_add'] = TyContext.RunHttp.get_client_ip() postparams['accessFlag'] = '0001' if phoneType == PHONETYPE_CHINAMOBILE: postparams['provider'] = 'YD' postparams['iccid'] = iccid postparams['channelNum'] = 'B2' postparams['SHParams'] = '00' + shortOrderPlatformId postparams['price'] = price if int(price) < 10: postparams['price'] = '0' + price postparams['sign'] = cls.__cal_mobile_sign(postparams) response, final_url = TyContext.WebPage.webget( cls.apiurl, postdata_=postparams) response = json.loads(response) return cls._get_sms_payinfo(chargeinfo, response) elif phoneType == PHONETYPE_CHINAUNION: postparams['provider'] = 'LT' postparams['appName'] = 'chenjinglong' postparams['callbackData'] = 'B2' postparams['totalFee'] = price postparams['outTradeNo'] = '00' + shortOrderPlatformId postparams['subject'] = 'good' postparams['timeStamp'] = str(datetime.datetime.now()).replace( ' ', '-') TyContext.ftlog.debug('doLinkyunapiCallback chinaunion timestamp:', postparams['timeStamp']) postparams['appKey'] = str(appId) postparams['sign'] = cls.__cal_union_sign(postparams) response, final_url = TyContext.WebPage.webget( cls.apiurl, postparams) response = json.loads(response) return cls._get_sms_payinfo(chargeinfo, response) elif phoneType == PHONETYPE_CHINATELECOM: postparams['provider'] = 'DX' postparams['iccid'] = iccid postparams['productID'] = '01' # XXX postparams['SHParams'] = '00' + shortOrderPlatformId postparams['price'] = price postparams['appKey'] = str(appId) postparams['channelNum'] = 'B2' postparams['sign'] = cls.__cal_telecom_sign(postparams) response, final_url = TyContext.WebPage.webget( cls.apiurl, postparams) response = json.loads(response) return cls._get_sms_payinfo(chargeinfo, response) else: TyContext.ftlog.error('TuYouPayLinkYunApi no phoneType=', phoneType) return