Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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}
Esempio n. 4
0
    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)
Esempio n. 5
0
    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
Esempio n. 6
0
    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}
Esempio n. 7
0
    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}
Esempio n. 8
0
    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)
Esempio n. 9
0
    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
Esempio n. 10
0
    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'])
Esempio n. 11
0
    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
Esempio n. 12
0
    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']))
Esempio n. 13
0
    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']))
Esempio n. 14
0
    def doBuyStraightLtsdk(self, userId, params, mo):

        mo.setResult(
            'orderPlatformId',
            ShortOrderIdMap.get_short_order_id(params['orderPlatformId']))
Esempio n. 15
0
    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)
Esempio n. 16
0
    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)
Esempio n. 17
0
 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
Esempio n. 18
0
    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