Esempio n. 1
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     zhuoyi_keys = TyContext.Configure.get_global_item_json(
         'zhuoyi_keys', {})
     buttonId = chargeinfo['buttonId']
     buttonName = chargeinfo['buttonName']
     packageName = chargeinfo['packageName']
     try:
         payInfo = zhuoyi_keys[packageName]
         codes = payInfo['codes']
         code = codes.get(buttonId, codes.get(buttonName))
     except:
         config = GameItemConfigure(
             chargeinfo['appId']).get_game_channel_configure_by_package(
                 'zhuoyi', packageName, chargeinfo['mainChannel'])
         prodConfig = config.get('products', {})
         diamondList = filter(lambda x: buttonId in x.values(), prodConfig)
         diamondConfig = diamondList[0] if diamondList else {}
         if not diamondConfig:
             raise PayErrorV4(1, "找不到商品%s的计费点配置" % buttonId)
         code = diamondConfig.get('code', '')
         payInfo = {
             'appId': config.get('zhuoyi_appId', ''),
             'appKey': config.get('zhuoyi_appKey', '')
         }
     chargeinfo['chargeData'] = {
         'platformOrderId': chargeinfo['platformOrderId'],
         'appId': payInfo['appId'],
         'appKey': payInfo['appKey'],
         'code': code
     }
     return cls.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 2
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     platformOrderId = chargeinfo['platformOrderId']
     packageName = chargeinfo['packageName']
     jolo_config = TyContext.Configure.get_global_item_json('jolo_keys', {})
     notifyUrl = 'http://open.touch4.me/v1/pay/jolo/callback'
     userId = chargeinfo['uid']
     snsId, snsinfo = TyContext.RedisUser.execute(userId, 'HMGET',
                                                  'user:%s' % userId,
                                                  'snsId', 'snsinfo')
     try:
         app_keys = jolo_config[packageName]
     except KeyError:
         config = GameItemConfigure(
             chargeinfo['appId']).get_game_channel_configure_by_package(
                 'htc', packageName, chargeinfo['mainChannel'])
         app_keys = {
             'gameCode': config.get('htc_gamecode'),
             'gameName': config.get('htc_gamename'),
             'privateKey': config.get('htc_jolo_private_key')
         }
     chargeData = {
         'gameCode': app_keys['gameCode'],
         'gameName': app_keys['gameName'],
         'privateKey': app_keys['privateKey'],
         'session': snsinfo,
         'notifyUrl': notifyUrl,
     }
     chargeinfo['chargeData'] = chargeData
     return cls.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 3
0
    def doGetUserInfo(cls, params, snsId):
        platfrom = params['ysdk_platform']
        appid = params['ysdk_appId']
        openid = params['ysdk_openId']
        openkey = params['ysdk_token']
        ysdk_model = params['ysdk_model']
        timestamp = int(time.time())

        config = TyContext.Configure.get_global_item_json('ysdk_keys', {})
        try:
            appkey = config[appid]['%s_appKey' % platfrom]
            request_url = config['%s_url' % ysdk_model]
        except:
            mainChannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(params['appId']).get_game_channel_configure_by_primarykey('ysdk', 'ysdk_appId',
                                                                                                 appid, mainChannel)
            appkey = config.get('ysdk_%s_appKey' % platfrom, "")
            request_url = config.get('ysdk_%s_url' % ysdk_model, "")
            if not appkey or not request_url:
                TyContext.ftlog.debug('AccountYsdk,cannot find ysdk sdkconfig %s' % appid)
                return False
        sig = md5('%s%s' % (appkey, timestamp)).hexdigest()
        rparams = {'timestamp': timestamp, 'appid': appid, 'sig': sig, 'openid': openid, 'openkey': openkey}
        _url = 'http://%s%s' % (request_url, cls.VALIDATE_URL[platfrom])

        response_msg, _ = TyContext.WebPage.webget(_url, rparams, method_='GET')
        TyContext.ftlog.debug('AccountYsdk -> response ->', response_msg)
        response = json.loads(response_msg)
        if str(response['ret']) == '0':
            return True
        else:
            return False
Esempio n. 4
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        orderPlatformId = chargeinfo['platformOrderId']
        vivo_appId = mi.getParamStr('vivo_appId')
        appinfoconfig = TyContext.Configure.get_global_item_json('vivo_appkeys', {})
        appdata = appinfoconfig.get(str(vivo_appId), None)
        if not appdata:
            config = GameItemConfigure(chargeinfo['appId']).get_game_channel_configure_by_package('vivo', chargeinfo[
                'packageName'],
                                                                                                  chargeinfo[
                                                                                                      'mainChannel'])
            appdata = {
                'cpid': config.get('vivo_cpid'),
                'appid': config.get('vivo_appId'),
                'cpkey': config.get('vivo_cpkey'),
            }
        cpkey = appdata['cpkey']

        url = 'https://pay.vivo.com.cn/vcoin/trade'
        params = {
            'version': '1.0.0',
            # 'signature': '',
            'cpId': appdata['cpid'],
            'appId': appdata['appid'],
            'cpOrderNumber': orderPlatformId,
            'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/vivounion/callback',
            'orderTime': datetime.datetime.now().strftime('%Y%m%d%H%M%S'),
            'orderAmount': int(float(chargeinfo['chargeTotal']) * 100),
            'orderTitle': chargeinfo['buttonName'],
            'orderDesc': chargeinfo['buttonName'],
            'extInfo': orderPlatformId
        }

        sign = self.__cal_sign(params, cpkey)
        params['signature'] = sign
        params['signMethod'] = 'MD5'
        response, _ = TyContext.WebPage.webget(url, params)

        TyContext.ftlog.debug('TuYouPayVivounionV4 -> trade response ->', response)

        try:
            datas = json.loads(response)
            if int(datas['respCode']) != 200:
                raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url response ERROR, rspmsg=',
                                 datas['respMsg'])
            if not self.__verify_sign(datas, cpkey, datas['signature']):
                raise PayErrorV4(1, 'vivo 验签失败!')
            chargeinfo['chargeData'] = {'vivoOrder': datas['orderNumber'],
                                        'vivoSignature': datas['accessKey']}
            return self.return_mo(0, chargeInfo=chargeinfo)
        except:
            raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url return ERROR, response=', response)
Esempio n. 5
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        appId = str(chargeinfo['appId'])
        huawei_appId = mi.getParamStr('huaWei_appId')
        huawei_config = TyContext.Configure.get_global_item_json(
            'huawei_config', {})
        try:
            hwapps = huawei_config.get(huawei_appId, None)
            userName = hwapps['userName']  # 必填 不参与签名
            userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = hwapps[
                'hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        except KeyError:
            config = GameItemConfigure(
                appId).get_game_channel_configure_by_package(
                    'huawei', chargeinfo['packageName'],
                    chargeinfo['mainChannle'])
            userName = config.get('userName')  # 必填 不参与签名
            userID = config.get(
                'huaWei_payId')  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = config.get(
                'huaWei_appId')  # String    应用ID。 在开发者联盟上获取的APP ID    必填
            hwapps = {
                'pay_ras_pub_key': config.get('huaWei_publicKey'),
                'pay_ras_privat_key': config.get('huaWei_privateKey')
            }
        amount = '%.2f' % float(
            chargeinfo['chargeTotal']
        )  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = chargeinfo[
            'diamondName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = chargeinfo[
            'platformOrderId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = chargeinfo[
            'diamondName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {
            'userID': userID,
            'applicationID': applicationID,
            'amount': amount,
            'productName': productName,
            'requestId': requestId,
            'productDesc': productDesc,
        }
        sign = self.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain(
        ) + '/v1/pay/huawei/callback'
        chargeinfo['chargeData'] = rparam
        return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 6
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        appid = mi.getParamStr('iappay_appid', None)
        if not appid:
            raise PayErrorV4(1, "爱贝支付ID不存在")
        iappayConfig = TyContext.Configure.get_global_item_json(
            'iappay_config', {})
        appKey = iappayConfig.get(appid)['appkey'] if iappayConfig.get(
            appid) else ""
        if not appKey:
            chargeType = chargeinfo['chargeType']
            sdk = chargeType.split('.')[0]
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_package(
                    sdk, chargeinfo['packageName'], chargeinfo['mainChannel'])

            prodConfig = config.get('products', {})
            diamondList = filter(
                lambda x: chargeinfo['diamondId'] in x.values(), prodConfig)
            diamondConfig = diamondList[0] if diamondList else {}
            if not diamondConfig:
                raise PayErrorV4(1, '【爱贝】没有对应的计费点代码!')
            chargeinfo['chargeData'] = {
                'waresid': diamondConfig.get("feecode"),
                'appKey': config.get('iappay_appKey')
            }
            return self.return_mo(0, chargeInfo=chargeinfo)
        try:
            # if 'prodId' in chargeinfo:
            #    waresid = iappayConfig[appid]['payConfig'][chargeinfo['prodId']]
            # if 'buttonId' in chargeinfo:
            #     waresid = iappayConfig[appid]['payConfig'][chargeinfo['buttonId']]
            # elif 'diamondId' in chargeinfo:
            waresid = iappayConfig[appid]['payConfig'][chargeinfo['diamondId']]
            # else:
            #    waresid = None
        except:
            waresid = None
        if not waresid:
            raise PayErrorV4(1, '【爱贝】没有对应的计费点代码!')
        if not appKey:
            TyContext.ftlog.error('TuYooIappay this id has no key , id ',
                                  appid)
            raise PayErrorV4(1, '爱贝ID [%s] 没有找到对应的参数' % appid)
        if not waresid:
            TyContext.ftlog.error(
                'TuYooIappay this prodId has no waresid , chargeinfo ',
                chargeinfo)
        chargeinfo['chargeData'] = {'waresid': waresid, 'appKey': appKey}
        return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 7
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. 8
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        appId = mi.getParamStr('lenovodj_openId', None)
        if not appId:
            raise PayErrorV4(1, '请检查一下是否有联想单机的openId')

        diamondId = chargeinfo['buttonId']
        prodconfig = TyContext.Configure.get_global_item_json(
            'lenovodanji_prodids', {})
        data = None
        payCode = None
        bgname = None
        try:
            data = prodconfig[str(appId)].get(str(diamondId), None)
        except Exception as e:
            TyContext.ftlog.info('doLenovoDanji old app requested!, ', e)
        appKey = ''
        appConfig = TyContext.Configure.get_global_item_json(
            'lenovodanji_config', {})
        for item in appConfig:
            if 0 == cmp(str(appId), item['appId']):
                appKey = item['appKey']
                break
        else:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkey by appid:',
                appId)
            # raise PayErrorV4(1,'【联想单机】openId[%s]对应的参数没有找到!' % appId)

        # 前端不要private key开头和结尾的字符
        appKey = appKey.replace('-----BEGIN PRIVATE KEY-----\n',
                                '').replace('\n-----END PRIVATE KEY-----', '')
        if data:
            payCode = data['feecode']
        if not payCode or not appKey:
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_package(
                    'lenovodj', chargeinfo['packageName'],
                    chargeinfo['mainChannel'])
            prodconfig = config.get('products', {})
            diamondList = filter(lambda x: diamondId in x.values(), prodconfig)
            diamondConfig = diamondList[0] if diamondList else {}
            payCode = diamondConfig.get('code', '')
            appKey = config.get('lenovo_appKey', '')
            if not payCode or not appKey:
                raise PayErrorV4(1, '【联想单机】没有找到计费点!')
        chargeinfo['chargeData'] = {'msgOrderCode': payCode, 'appKey': appKey}
        return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 9
0
    def doGetUserInfo(cls, params, snsId):
        app_id = params['jusdk_appId']
        token_key = params['jusdk_token']

        config = TyContext.Configure.get_global_item_json("jusdk_keys", {})
        try:
            appkey = config[app_id]['appKey']
        except:
            mainChannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(
                params['appId']).get_game_channel_configure_by_primarykey(
                    'jusdk', 'jusdk_appId', app_id, mainChannel)
            appkey = config.get('jusdk_appKey', "")
            if not appkey:
                TyContext.ftlog.debug(
                    "AccountJusdk,cannot find jusdk config for", app_id)
                return False
        sign_text = '%s%s' % (appkey, token_key)
        sign = md5(sign_text).hexdigest()
        rparams = {'tokenKey': token_key, 'sign': sign}
        response_msg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                                   postdata_=rparams,
                                                   method_='POST')
        TyContext.ftlog.debug('AccountJusdk-> response ->', response_msg)
        # {"code":0,"msg":"", "data":{"guid":"s1234567890"}}
        response = json.loads(response_msg)
        if 0 == int(response['code']):
            jusdk_guid = response['data']['guid']
            params['snsId'] = 'jusdk:' + jusdk_guid
            TyContext.ftlog.debug('AccountJusdk-> guid ->', jusdk_guid)
            return True
        else:
            return False
Esempio n. 10
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     appId = chargeinfo['appId']
     diamondId = chargeinfo['buttonId']
     prodconfig = TyContext.Configure.get_global_item_json(
         'momo_prodids', {})
     data = prodconfig['6'].get(str(diamondId), None)
     if data:
         payCode = data['feecode']
     else:
         config = GameItemConfigure(
             chargeinfo['appId']).get_game_channel_configure_by_package(
                 'momo', chargeinfo['packageName'],
                 chargeinfo['mainChannel'])
         if not config:
             package = 'com.wemomo.game.ddz'
             channel = 'momo'
             config = GameItemConfigure(
                 chargeinfo['appId']).get_game_channel_configure_by_package(
                     'momo', package, channel)
         products = config.get('products', {})
         productConfig = filter(
             lambda x: x['diamondId'].strip() == diamondId, products)
         payCode = productConfig[0].get(
             'feecode', '') if len(productConfig) > 0 else ''
         if not payCode:
             raise PayErrorV4(
                 1, 'can not find momo product define of diamondId=' +
                 diamondId)
     chargeinfo['chargeData'] = {'msgOrderCode': payCode}
     return cls.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 11
0
 def need_continue_change_chargeinfo(self, chargeinfo):
     '''
         检查 ID是否配置,未配置 就进行配置
         :param chargeinfo:
         :return:
     '''
     chargeType = chargeinfo['chargeType']
     sdk = chargeType.split('.')[0]
     config = GameItemConfigure(
         chargeinfo['appId']).get_game_channel_configure_by_package(
             sdk, chargeinfo['packageName'], chargeinfo['mainChannel'])
     diamondId = chargeinfo['diamondId']
     prodConfig = config.get('products', {})
     diamondList = filter(lambda x: diamondId in x.values(), prodConfig)
     diamondConfig = diamondList[0] if diamondList else {}
     if diamondConfig:
         return False
     idSet = set([])
     for v in prodConfig:
         idSet.add(v.get('prodId'))  # 叫这个名字!!!
     # 配置为空,用其他方式修改 chargeinfo
     if not idSet:
         return True
     self.change_chargeinfo(idSet, chargeinfo)
     return False
Esempio n. 12
0
 def doMomoCallback(cls, rpath):
     rparam = TyContext.RunHttp.get_body_content()
     import json
     rparam = json.loads(rparam)
     orderinfo = rparam.get('orderinfo', {})
     statusMsg = rparam.get('statusMsg', '')
     sign = rparam.get('sign')
     signKey = ['cporderid', 'payorderid', 'ordertime', 'status', 'amount', 'currency', 'pname', 'appid', 'cid']
     cporderid = orderinfo.get('cporderid', '')
     config = GameItemConfigure.get_game_channel_configure_by_orderId(cporderid, 'more')
     appkey = config.get('more_appkey', '')
     # 读取默认参数配置
     if not appkey:
         packageName = 'com.sdk.more.default'
         channel = 'kuyuoka'
         appId = '9999'
         config = GameItemConfigure(appId).get_game_channel_configure_by_package('more', packageName, channel)
     appkey = config.get('more_appkey', '')
     signStr = appkey + ''.join(str(orderinfo[k]) for k in signKey)
     from hashlib import md5
     m = md5(signStr)
     if m.hexdigest().lower() != sign:
         PayHelperV4.callback_error(cporderid, '验签失败', rparam)
         return {'returnCode': 0, 'returnMsg': '失败'}
     total_fee = float(orderinfo.get('amount')) / 100
     PayHelperV4.callback_ok(cporderid, total_fee, rparam)
     return {'returnCode': 1, 'returnMsg': ''}
Esempio n. 13
0
    def charge_data(cls, mi):
        chargeinfo = cls.get_charge_info(mi)
        appId = chargeinfo['appId']
        if 'payInfo' in chargeinfo and chargeinfo['payInfo']:
            payInfo = chargeinfo['payInfo']
            if 'appid' in payInfo and payInfo['appid']['lenovo']:
                appId = payInfo['appid']['lenovo']
        diamondId = chargeinfo['buttonId']
        prodconfig = TyContext.Configure.get_global_item_json(
            'lenovo_prodids', {})
        try:
            data = prodconfig[str(appId)].get(str(diamondId), {})
            payCode = data['feecode']
        except KeyError:
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_package(
                    'lenovo', chargeinfo['packageName'],
                    chargeinfo['mainChannel'])
            prodconfig = config.get('products', {})
            diamondList = filter(lambda x: diamondId in x.values(), prodconfig)
            diamondConfig = diamondList[0]
            payCode = diamondConfig['code']

        chargeinfo['chargeData'] = {
            'msgOrderCode': payCode,
            'waresid': payCode,
            'cpprivateinfo': chargeinfo['platformOrderId'],
            'notifyUrl':
            PayHelper.getSdkDomain() + '/open/ve/pay/lenovo/callback'
        }
        return cls.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 14
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     chargeinfo['chargeData'] = {
         'platformOrderId': chargeinfo['platformOrderId'],
     }
     mumayi_keys = TyContext.Configure.get_global_item_json(
         'mumayi_keys', {})
     packageName = chargeinfo['packageName']
     try:
         appKey = mumayi_keys[packageName]
     except:
         config = GameItemConfigure(
             chargeinfo['appId']).get_game_channel_configure_by_package(
                 'mumayi', chargeinfo['packageName'],
                 chargeinfo['mainChannel'])
         appKey = config.get('mumayi_appKey', "")
         if not appKey:
             raise PayErrorV4(1, "找不到木螞蟻的配置")
     userId = chargeinfo['uid']
     chargeKey = 'sdk.charge:mumayi:%s' % userId
     TyContext.RedisPayData.execute('HMSET', chargeKey, 'platformOrderId',
                                    chargeinfo['platformOrderId'], 'appKey',
                                    appKey)
     TyContext.RedisPayData.execute('EXPIRE', chargeKey, 60 * 60)
     return cls.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 15
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        app_id = mi.getParamStr('nubia_appId')
        uid = mi.getParamStr('nubia_uid')
        config = TyContext.Configure.get_global_item_json('nubia_keys', {})
        try:
            secret = config[app_id]['secret']
        except KeyError:
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_primarykey(
                    'nubia', 'nubia_appId', app_id, chargeinfo['mainChannel'])
            secret = config.get('secret')
        timestamp = int(time.time())
        price = chargeinfo['diamondPrice']
        order_id = chargeinfo['platformOrderId']
        number = chargeinfo['diamondCount']
        goodsname = chargeinfo['diamondName']

        charge_key = 'sdk.charge:nubia:%s' % order_id
        TyContext.RedisPayData.execute('HSET', charge_key, 'appId', app_id)
        TyContext.RedisPayData.execute('EXPIRE', charge_key, 60 * 60)
        text = 'amount=%s&app_id=%s&cp_order_id=%s&data_timestamp=%s&number=%s&product_des=%s&product_name=%s&uid=%s' \
               ':%s:%s' % (price, app_id, order_id, timestamp, number, goodsname, goodsname, uid, app_id, secret)

        sign = md5(text).hexdigest()

        chargeinfo['chargeData'] = {
            'platformOrderId': order_id,
            'timestamp': timestamp,
            'uid': uid,
            'sign': sign
        }
        return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 16
0
 def doGetUserInfo(cls, params, snsId):
     uid = params['uid']
     access_token = params['access_token']
     app_id = params['app_id']
     rparams = {'uid': uid, 'access_token': access_token, 'app_id': app_id}
     config = TyContext.Configure.get_global_item_json('zhuoyi_keys', {})
     for keys in config.values():
         if keys['appId'] == app_id:
             appKey = keys['paySecret']
             break
     else:
         mainChannel = params['clientId'].split('.')[-2]
         config = GameItemConfigure(
             params['appId']).get_game_channel_configure_by_primarykey(
                 'zhuoyi', 'zhuoyi_appId', app_id, mainChannel)
         appKey = config.get('zhuoyi_paySecret', "")
         if not appKey:
             return False
             # return False
     text = 'uid=%s&access_token=%s&app_id=%s&key=%s' % (uid, access_token,
                                                         app_id, appKey)
     sign = md5(text).hexdigest()
     rparams['sign'] = sign
     responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                               rparams,
                                               method_='GET')
     TyContext.ftlog.debug('AccountZhuoyi-> response->', responseMsg)
     response = json.loads(responseMsg)
     # 0:成功 1:无效的 token 2:用户不存在 3:会话超时
     if '0' == str(response['code']):
         return True
     else:
         return False
Esempio n. 17
0
 def doGetUserInfo(cls, params, snsId):
     uid = params['uid']
     app_key = params['app_key']
     token = params['token']
     rparams = {'uid': uid, 'app_key': app_key, 'token': token}
     config = TyContext.Configure.get_global_item_json('papa_keys', {})
     try:
         secretKey = config[app_key]['secretKey']
     except KeyError:
         mainChannel = params['clientId'].split('.')[-2]
         config = GameItemConfigure(
             params['appId']).get_game_channel_configure_by_primarykey(
                 "papa", 'papa_app_key', app_key, mainChannel)
         secretKey = config.get('papa_secret', "")
         if not secretKey:
             TyContext.ftlog.debug(cls.__name__,
                                   'cannot get sdkconfig papa')
             return False
     sign = md5('%s%sapp_key=%s&token=%s&uid=%s' %
                (app_key, secretKey, app_key, token, uid)).hexdigest()
     rparams['sign'] = sign
     responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                               postdata_=rparams,
                                               method_='POST')
     TyContext.ftlog.debug('AccountPapa-> response->', responseMsg)
     response = json.loads(responseMsg)
     # 0:成功 1:无效的 token 2:用户不存在 3:会话超时
     if '0' == str(response['error']) and response['data']['is_success']:
         return True
     else:
         return False
Esempio n. 18
0
 def doPayRequst(self, rpaht):
     mo = TyContext.MsgPack()
     params = TyContext.RunHttp.convertArgsToDict()
     mobile = params.get('mobile', '')
     platformOrderId = params.get('platformOrderId', '')
     imsi = params.get('imsi', '')
     imei = params.get('imei', '')
     chargeInfo = self.get_charge_info_data(platformOrderId)
     price = chargeInfo.get('chargeTotal')
     config = GameItemConfigure(chargeInfo.get('appId')).get_game_channel_configure_by_package('wyxt', chargeInfo[
         'packageName'],
                                                                                               chargeInfo[
                                                                                                   'mainChannel'])
     if not config:
         package = "com.tuyou.doudizhu.main"
         channel = 'wyxt'
         appId = '9999'
         config = GameItemConfigure(appId).get_game_channel_configure_by_package('wyxt', package, channel)
     config = config.get('app_config_%s' % price, {})
     if not config:
         mo.setResult('info', '计费点未配置,请检查')
         mo.setResult('code', 1)
         return mo
     postParams = {
         'mobile': mobile,
         'channelid': config.get('channel_id'),
         'app_name': config.get('app_name'),
         'itemid': config.get('itemid'),
         'imsi': imsi,
         'p_price': config.get('price'),
         'imei': imei,
         'callbackdata': platformOrderId,
     }
     try:
         response, _ = TyContext.WebPage.webget(self.get_order_url, postParams)
     except:
         mo.setResult('info', '支付请求失败,请稍后重试')
         mo.setResult('code', 1)
         return mo
     if 'ok' in response:
         mo.setResult('info', '支付请求成功')
         mo.setResult('code', 0)
     else:
         mo.setResult('info', '支付请求失败,请稍后重试')
         mo.setResult('code', 1)
     return mo
Esempio n. 19
0
 def charge_data(self, mi):
     chargeinfo = self.get_charge_info(mi)
     chargeinfo['chargeData'] = {
         'platformOrderId': chargeinfo['platformOrderId'],
     }
     m4399_keys = TyContext.Configure.get_global_item_json('m4399_keys', {})
     packageName = chargeinfo['packageName']
     try:
         appInfo = m4399_keys[packageName]
         appKey = appInfo['appKey']
         appSecret = appInfo['appSecret']
     except KeyError:
         config = GameItemConfigure(
             chargeinfo['appId']).get_game_channel_configure_by_package(
                 '4399', packageName, chargeinfo['mainChannel'])
         appKey = config.get('m4399_appKey')
         appSecret = config.get('m4399_appSecret')
     chargeKey = 'sdk.charge:m4399:%s' % chargeinfo['platformOrderId']
     TyContext.RedisPayData.execute('HMSET', chargeKey, 'appKey', appKey,
                                    'appSecret', appSecret)
     TyContext.RedisPayData.execute('EXPIRE', chargeKey, 60 * 60)
     return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 20
0
    def _check_session(cls, params, accountId):
        TyContext.ftlog.debug(
            'AccountMeizu _check_session , params from client', params)

        try:
            client_sessionId, client_appId = params['snsToken'][6:].split(' ')
        except Exception as e:
            TyContext.ftlog.error('AccountMeizu _check_session ,exception:', e)
            return False
        meizu_config = TyContext.Configure.get_global_item_json(
            'meizu_config', {})
        try:
            appkey = meizu_config[client_appId]['appkey']
        except KeyError:
            mainchannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(
                params['appId']).get_game_channel_configure_by_primarykey(
                    'meizu', 'mz_appId', client_appId, mainchannel)
            if not config:
                TyContext.ftlog.debug(
                    cls.__name__,
                    'meizu,can not get config for appId:%s ' % client_appId)
                return False
            appkey = config.get('mz_appSecret', '')

        server_time = int(time.time())
        md5_str = cls._calc_sign(client_appId, client_sessionId, server_time,
                                 accountId, appkey)
        post_param = 'app_id=%s&session_id=%s&ts=%s&uid=%s&sign_type=md5&sign=%s' % (
            client_appId, client_sessionId, server_time, accountId, md5_str)
        url = 'https://api.game.meizu.com/game/security/checksession'
        try:
            response, _ = TyContext.WebPage.webget(url, postdata_=post_param)
        except Exception as e:
            TyContext.ftlog.error(
                'AccountMeizu _check_session error, exception', e)
            return False
        try:
            infos = json.loads(response)
        except Exception as e:
            TyContext.ftlog.error(
                'AccountMeizu _check_session->infourl json'
                ' wrong, response=', response, 'exception', e)
            return False
        TyContext.ftlog.info('AccountMeizu _check_session responseinfo ',
                             infos)
        if int(infos['code']) != 200:
            return False
        return True
Esempio n. 21
0
 def need_continue_change_charge_info(self, chargeinfo):
     diamondId = chargeinfo['buttonId']
     config = GameItemConfigure(
         chargeinfo['appId']).get_game_channel_configure_by_package(
             'lenovo', chargeinfo['packageName'], chargeinfo['mainChannel'])
     prodConfig = config.get('products', {})
     diamondList = filter(lambda x: diamondId in x.values(), prodConfig)
     if diamondList:
         return False
     idSet = set([])
     for v in prodConfig:
         idSet.add(v.get('diamondId'))
     # 配置为空,用其他方式修改 chargeinfo
     if not idSet:
         return True
     self.change_chargeinfo(idSet, chargeinfo)
     return False
Esempio n. 22
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        TyContext.ftlog.debug('TuYouAiDongManPay charge_data chargeinfo',
                              chargeinfo)

        phonenum = chargeinfo.get('phone', '')
        appId = chargeinfo['appId']
        prodId = chargeinfo['diamondId']
        orderId = chargeinfo['platformOrderId']

        aidongmanConfig = TyContext.Configure.get_global_item_json(
            'aidongmanpay_config', {})
        if aidongmanConfig:
            self.createorderUrl = aidongmanConfig['createorderUrl']

        aidongmanProdIds = TyContext.Configure.get_global_item_json(
            'aidongmanpay_prodids', {})
        TyContext.ftlog.info('TuYouAiDongManPay charge_data aidongmanProdIds',
                             aidongmanProdIds)
        try:
            payCode = aidongmanProdIds[str(appId)]
        except Exception as e:
            mainchannel = chargeinfo['clientId'].split(
                '.')[-2] if chargeinfo['clientId'].split('.') else ""
            config = GameItemConfigure(
                appId).get_game_channel_configure_by_package(
                    'aidongman', chargeinfo['packageName'], mainchannel)
            productConfig = config.get('products')
            if productConfig:
                finalConfig = filter(lambda x: prodId in x.values(),
                                     productConfig)
                finalConfig = finalConfig[0] if finalConfig else []

        # 采短透传方式,短信内容(23位) + 订单信息. callback字段 Extension 返回订单信息
        paymessages = payCode[prodId]['smscodes'] + orderId

        messages = [(payCode[prodId]['smsports'], paymessages, 0)]
        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}

        return self.return_mo(0, chargeInfo=chargeinfo)
Esempio n. 23
0
    def doGetUserInfo(cls, params, snsId):
        yiwan_appId = params['yiwan_appId']
        openid = params['yiwan_openid']
        token = params['yiwan_token']
        sign = params['yiwan_sign']

        config = TyContext.Configure.get_global_item_json('yiwan_keys', {})
        appKey = config.get(yiwan_appId)['appKey'] if config.get(yiwan_appId) else ""
        if not appKey:
            appId = params.get('appId', '')
            mainChannel = params['clientId'].split('.')[-2]
            appConfig = GameItemConfigure(appId).get_game_channel_configure_by_primarykey('yiwan', 'yiwan_appId',
                                                                                          yiwan_appId, mainChannel)
            appKey = appConfig.get('appKey')
        text = '%s|%s|%s' % (openid, token, appKey)
        if sign == md5(text).hexdigest():
            return True
        else:
            return False
Esempio n. 24
0
    def __get_userid(cls, params, sid):
        uc_config = TyContext.Configure.get_global_item_json('uc_config', {})
        gameId = params['snsAppId']
        try:
            apiKey = uc_config[gameId]['apiKey']
        except KeyError:
            mainchannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(params['appId']).get_game_channel_configure_by_package('uc', 'uc_appId', gameId,
                                                                                              mainchannel)
            if not config:
                TyContext.ftlog.error('AccountUC __get_userid not uc apiKey the gameId=' + gameId)
            # 补丁 按照包名+主渠道 读取参数
            if not config:
                config = GameItemConfigure(params['appId']).get_game_channel_configure_by_package('uc', params.get(
                    'packageName'),
                                                                                                  mainchannel)
                if not config:
                    return False
            apiKey = config.get('apiKey')
        postparam = {}
        postparam['id'] = str(int(time.time()))
        data = {}
        data['sid'] = sid
        game = {}
        game['gameId'] = int(gameId)
        postparam['data'] = data
        postparam['game'] = game
        postparam['sign'] = cls.__cal_sign(sid, apiKey)

        getidurl = 'http://sdk.g.uc.cn/cp/account.verifySession'
        TyContext.ftlog.debug('AccountUC->access url->', getidurl, 'param:', postparam)
        response, tokenurl = TyContext.WebPage.webget(getidurl, postdata_=json.dumps(postparam))

        try:
            datas = json.loads(response)
            ucid = datas['data']['accountId']
            params['snsId'] = 'uc:' + ucid
        except:
            TyContext.ftlog.error('AccountUC->get userid url return ERROR, response=', response)
            return False
        return True
Esempio n. 25
0
    def do168xCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        signKey = ['game_key', 'game_orderno', 'nonce', 'subject', 'timestamp', 'total_fee']
        platformOrderId = rparam.get('game_orderno')
        signStr = '&'.join(k + '=' + str(rparam.get(k)) for k in signKey)
        config = GameItemConfigure.get_game_channel_configure_by_orderId(platformOrderId)
        if not config:
            appId = '9999'
            sdk = '168x'
            mainChannel = '168x'
            packageName = 'com.sdk.168x.default'
            config = GameItemConfigure(appId).get_game_channel_configure_by_package(sdk, packageName, mainChannel)
        secret = config.get('game_sceret')
        signStr = signStr + '&' + secret
        from hashlib import md5
        m = md5(signStr)
        if m.hexdigest().lower() != rparam.get('signature'):
            return 1
        PayHelperV4.callback_ok(platformOrderId, rparam.get('total_fee'), rparam)
        return 0
Esempio n. 26
0
    def doGetUserInfo(cls, params, snsId):
        appId = params['bdgame_appId']
        uid = params['bdgame_uid']
        accessToken = params['bdgame_accessToken']

        config = TyContext.Configure.get_global_item_json('bdgame_keys', {})
        try:
            secretKey = config[appId]['secretKey']
        except:
            mainChannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(
                params['appId']).get_game_channel_configure_by_primarykey(
                    'bdgame', 'bdgame_appId', appId, mainChannel)
            secretKey = config.get('bdgame_secretKey', "")
            if not secretKey:
                TyContext.ftlog.debug(
                    "AccountBDgame,cannot find sdkconfig for ", appId)
                return False
        sign = md5('%s%s%s' % (appId, accessToken, secretKey)).hexdigest()

        rparams = {'AppID': appId, 'AccessToken': accessToken, 'Sign': sign}
        response_msg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                                   postdata_=rparams,
                                                   method_='POST')
        TyContext.ftlog.debug('AccountBDGame-> response ->', response_msg)

        response = json.loads(response_msg)

        check_sign = response['Sign']
        check_text = '%s%s%s%s' % (response['AppID'], response['ResultCode'],
                                   response['Content'], secretKey)
        if check_sign != md5(check_text).hexdigest():
            return False
        # content是一个json字符串,先urldeconde,再base64解码
        content = b64decode(unquote(response['Content']))
        item = json.loads(content)
        if str(item['UID']) == uid:
            return True
        else:
            return False
Esempio n. 27
0
 def doGetUserInfo(cls, params, snsId):
     momo_appid = params.get('momo_appid')
     token = params.get('momo_login_code')
     config = TyContext.Configure.get_global_item_json('momo_paykeys', {})
     momo_secret = config.get(momo_appid, '')
     if not momo_secret:
         config = GameItemConfigure(
             params['appId']).get_game_channel_configure_by_primarykey(
                 'momo', 'momo_appid', momo_appid, 'momo')
         momo_secret = config.get('momo_secret', '')
         if not momo_secret:
             return False
     post_params = {
         'appid': momo_appid,
         'app_secret': momo_secret,
         'vtoken': token,
         'userid': snsId.split(':')[1]
     }
     repsonse, _ = TyContext.WebPage.webget(cls.check_url, post_params)
     try:
         import json
         response = json.loads(repsonse)
     except:
         return False
     data = response.get('data', {})
     if data.get('sex') == 'M':
         sex = 0
     else:
         sex = 1
     picdata = data.get('photo', [])
     if len(picdata) > 0:
         pic = picdata[0]
         pic_url = 'https://img.momocdn.com/album/%s/%s/%s_S.jpg' % (
             pic[0:2], pic[2:4], pic)
         params['purl'] = pic_url
         params['headurl'] = pic_url
     params['sex'] = sex
     params['name'] = data.get('name')
     params['snsinfo'] = data.get('name')
     return True
Esempio n. 28
0
    def doGetUserInfo(cls, params, snsId):
        uid = params['nubia_uid']
        session = params['nubia_session']
        app_id = str(params['nubiya_appId'])
        config = TyContext.Configure.get_global_item_json('nubia_keys', {})
        try:
            secret = config[app_id]['secret']
        except KeyError:
            mainChannel = params['clientId'].split('.')[-2]
            config = GameItemConfigure(
                params['appId']).get_game_channel_configure_by_primarykey(
                    'nubia', 'nubia_appId', app_id, mainChannel)
            if not config:
                TyContext.ftlog.debug(cls.__name__,
                                      'cannot get nubia sdkconfig!')
                return False
            secret = config.get('secret')
        timestamp = int(time.time())

        rparams = {
            'uid': uid,
            'session_id': session,
            'data_timestamp': timestamp
        }
        text = 'data_timestamp=%s&session_id=%s&uid=%s:%s:%s' % (
            timestamp, session, uid, app_id, secret)
        sign = md5(text).hexdigest()
        rparams['sign'] = sign

        responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                                  postdata_=rparams,
                                                  method_='POST')
        TyContext.ftlog.debug('AccountNubia-> response ->', responseMsg)

        response = json.loads(responseMsg)
        # 返回结果0 校验正确3 未登录7 验证参数有为空10 校验失败 uid 与 sessionId 不匹配
        if '0' == str(response['code']):
            return True
        else:
            return False
Esempio n. 29
0
 def doGetUserInfo(cls, params, snsId):
     client_id = params['client_id']
     code = params['coolpad_code']
     coolpad_keys = TyContext.Configure.get_global_item_json(
         'coolpad_keys', {})
     try:
         client_secret = coolpad_keys[client_id]['appKey']
     except KeyError:
         mainChannel = params['clientId'].split('.')[-2]
         config = GameItemConfigure(
             params['appId']).get_game_channel_configure_by_primarykey(
                 'coolpad', 'coolpad_appId', client_id, mainChannel)
         client_secret = config.get('coolpad_appKey')
         if not client_secret:
             TyContext.ftlog.error(
                 cls.__name__,
                 'cannot get coolpad sdkconfig,appid:%s' % client_id)
     redirect_uri = client_secret
     rparams = {
         'grant_type': 'authorization_code',
         'client_id': client_id,
         'code': code,
         'client_secret': client_secret,
         'redirect_uri': redirect_uri
     }
     # get appSecret by gid
     TyContext.ftlog.debug('AccountCoolpad-> VALIDATE_URL->',
                           cls.VALIDATE_URL, 'rparams', rparams)
     responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL,
                                               rparams,
                                               method_='GET')
     TyContext.ftlog.debug('AccountCoolpad-> response->', responseMsg)
     ret = json.loads(responseMsg)
     if ret.get('openid'):
         params['snsId'] = 'coolpad:%s' % ret['openid']
         params['snsinfo'] = ret['access_token']
         return True
     else:
         return ''
Esempio n. 30
0
 def doGetUserInfo(cls, params, snsId):
     userid = params['kw_userid']
     appId = params['kw_appId']
     rparams = {'userid': userid, 'specialid': appId}
     config = TyContext.Configure.get_global_item_json('kuaiwan_keys', {})
     try:
         appKey = config[appId]['appKey']
     except KeyError:
         mainChannel = params['clientId'].split('.')[-2]
         config = GameItemConfigure(params['appId']).get_game_channel_configure_by_primarykey('kuaiwan',
                                                                                              'kuaiwan_appId',
                                                                                              appId, mainChannel)
         appKey = config.get('kuaiwan_appKey', '')
     text = 'specialid=%s&userid=%s%s' % (appId, userid, appKey)
     sign = md5(text).hexdigest()
     rparams['sign'] = sign
     responseMsg, _ = TyContext.WebPage.webget(cls.VALIDATE_URL, postdata_=rparams, method_='POST')
     TyContext.ftlog.debug('AccountKuaiwan-> response->', responseMsg)
     response = json.loads(responseMsg)
     if '1' == str(response['result']):
         return True
     else:
         return False