Ejemplo n.º 1
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)
Ejemplo n.º 2
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)
Ejemplo 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
Ejemplo n.º 4
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
Ejemplo n.º 5
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)
Ejemplo n.º 6
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
Ejemplo n.º 7
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)
Ejemplo n.º 8
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
Ejemplo n.º 9
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)
Ejemplo n.º 10
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
Ejemplo n.º 11
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': ''}
Ejemplo n.º 12
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)
Ejemplo n.º 13
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)
Ejemplo n.º 14
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)
Ejemplo n.º 15
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)
Ejemplo n.º 16
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
Ejemplo n.º 17
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)
Ejemplo n.º 18
0
 def generate_sign(self, mi, chargeinfo):
     uc_uid = mi.getParamStr('uc_uid', '')
     params = {
         'amount': '%.2f' % chargeinfo['chargeTotal'],
         'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/uc/callback',
         'accountId': uc_uid,
         'signType': 'MD5',
         'callbackInfo': chargeinfo['userId'],
         'cpOrderId': chargeinfo['platformOrderId']
     }
     from hashlib import md5
     signStr = ''.join(k + '=' + str(params[k]) for k in sorted(params)
                       if k != 'sign' and k != 'signType')
     config = GameItemConfigure.get_game_channel_configure_by_orderId(
         params['cpOrderId'], 'uc')
     if not config:
         TyContext.ftlog.error(
             'TuYouPayUcV4,can not find uc config for package:',
             chargeinfo['packageName'])
         config = {}
     apiKey = config.get('apiKey', '')
     signStr += apiKey
     m = md5(signStr)
     params['sign'] = m.hexdigest().lower()
     return params
Ejemplo n.º 19
0
    def check_sign(self, rparams):
        sign = rparams['Sign']
        app_id = rparams['AppID']
        order_serial = rparams['OrderSerial']
        order_id = rparams['CooperatorOrderSerial']
        content = rparams['Content']

        config = TyContext.Configure.get_global_item_json("bdgame_keys", {})
        try:
            secret_key = config[str(app_id)]['secretKey']
        except:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                order_id, "bdgame")
            secret_key = config.get('bdgame_secretKey', "")
            if not secret_key:
                TyContext.ftlog.debug(
                    "do BdgameCallback ->cannot find sdkconfig for", app_id)
                return False
        text = '%s%s%s%s%s' % (app_id, order_serial, order_id, content,
                               secret_key)

        if sign == md5(text).hexdigest():
            return True
        else:
            return False
Ejemplo n.º 20
0
 def filter_payment(self, payment, prod_info, **kwargs):
     """
     支付方式列表中过滤检查,没有计费点得商品就不要显示此支付方式
     :param prodInfo:
     :param chargeInfo:
     :param kwargs:
     :return:
     """
     appId = kwargs['appId']
     clientId = kwargs['clientId']
     userId = kwargs['userId']
     wxpap_config = GameItemConfigure(appId).get_game_channel_configure(
         'wxpap_config')
     wxpap_contract_id, wxpap_contract_code = TyContext.RedisUser.execute(
         userId, 'HMGET', 'user:%s' % userId, 'wxpap_contract_id',
         'wxpap_contract_code')
     if wxpap_contract_id and wxpap_contract_code:
         payment['options'] = {
             'wxpap_sign': 1,
         }
     else:
         payment['options'] = {
             'wxpap_sign': 0,
         }
     return True
Ejemplo n.º 21
0
 def __verify_sign(cls, rparam, sign):
     ucconfig = TyContext.Configure.get_global_item_json('ucdj_config', {})
     gameid = rparam['gameId']
     apiKey = ""
     try:
         ucgameidconfig = ucconfig[gameid]
         if None != ucgameidconfig:
             apiKey = str(ucgameidconfig['apiKey'])
     except:
         orderPlatformId = rparam['orderId']
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             orderPlatformId, 'ucdanji')
         apiKey = config.get('apiKey', "")
     check_str = ''.join(
         [k + '=' + rparam[k] for k in sorted(rparam.keys())]) + apiKey
     digest = md5(check_str).hexdigest().lower()
     TyContext.ftlog.info(
         'TuYouPayUcDj->doUcDjCallback verify sign: expected sign', sign,
         'calculated', digest, 'rparam', rparam, 'check_str', check_str)
     if digest != sign:
         TyContext.ftlog.error(
             'TuYouPayUcDj->doUcDjCallback verify sign failed: expected sign',
             sign, 'calculated', digest, 'rparam', rparam, 'check_str',
             check_str)
         return False
     return True
Ejemplo n.º 22
0
    def _check_sign(self, rparams, app_id):
        serverid = rparams['serverid']
        custominfo = rparams['custominfo']
        openid = rparams['openid']
        ordernum = rparams['ordernum']
        status = rparams['status']
        paytype = rparams['paytype']
        amount = rparams['amount']
        errdesc = rparams['errdesc']
        paytime = rparams['paytime']
        sign = rparams['sign']

        config = TyContext.Configure.get_global_item_json('yiwan_keys', {})
        try:
            appKey = config[str(app_id)]['appKey']
        except KeyError:
            appConfig = GameItemConfigure.get_game_channel_configure_by_orderId(
                custominfo)
            appKey = appConfig.get('appKey')

        text = '%s|%s|%s|%s|%s|%s|%s|%s|%s|%s' % (
            serverid, custominfo, openid, ordernum, status, paytype, amount,
            errdesc, paytime, appKey)

        if sign == md5(text).hexdigest():
            return True
        else:
            return False
Ejemplo n.º 23
0
 def __verify_sign(cls, rparam, sign):
     ucconfig = TyContext.Configure.get_global_item_json('uc_config', {})
     gameid = rparam['gameId']
     try:
         ucgameidconfig = ucconfig[gameid]
         apiKey = str(ucgameidconfig['apiKey'])
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             rparam['cpOrderId'], 'uc')
         apiKey = config.get('apiKey')
     check_str = ('accountId=' + rparam['accountId'] + 'amount=' +
                  rparam['amount'] + 'callbackInfo=' +
                  rparam['callbackInfo'] + 'cpOrderId=' +
                  rparam['cpOrderId'] + 'creator=' + rparam['creator'] +
                  'failedDesc=' + rparam['failedDesc'] + 'gameId=' +
                  rparam['gameId'] + 'orderId=' + rparam['orderId'] +
                  'orderStatus=' + rparam['orderStatus'] + 'payWay=' +
                  rparam['payWay'] + apiKey)
     m = md5()
     m.update(check_str)
     digest = m.hexdigest()
     if digest != sign:
         TyContext.ftlog.error(
             'TuYouPayUc.doUcCallback verify sign failed: expected sign',
             sign, 'calculated', digest, 'rparam', rparam, 'check_str',
             check_str)
         return False
     return True
Ejemplo n.º 24
0
 def handle_weixinjs(self, mi):
     chargeInfo = self.get_charge_info(mi)
     # 必须采用途游棋牌的wxappId
     wxappId = 'wxb01a635a437adb75'  # mi.getParamStr('wxappId')
     openid = mi.getParamStr('openid', None)
     tradeType = mi.getParamStr('tradeType', 'WAP')
     wxconfig = TyContext.Configure.get_global_item_json('wx_config', {})
     config = wxconfig.get(str(wxappId), None)
     if config:
         wxappId = str(config['appId'])
         wxpaySignKey = str(config['paySignKey'])
         wxappSecret = str(config['appSecret'])
         wxpartnerId = str(config['partnerId'])
         wxpartnerKey = str(config['partnerKey'])
     else:
         appId = chargeInfo['appId']
         packageName = chargeInfo['packageName']
         config = GameItemConfigure(
             appId).get_game_channel_configure_by_package(
                 'weixin', packageName)
         if not config:
             raise PayErrorV4(
                 1, 'can not find wxpay config info define of wxappId=' +
                 str(wxappId))
         wxappId = str(config['WXAPPID'])
         wxpaySignKey = ""  # 用不到了
         wxappSecret = str(config['WXAPPKEY'])
         wxpartnerId = str(config['partnerId'])
         wxpartnerKey = str(config['partnerKey'])
     token = self.__get_accesstoken(wxappId, wxappSecret)
     payData = self.__get_prepayid_new(chargeInfo, token, wxappId,
                                       wxpaySignKey, wxpartnerId,
                                       wxpartnerKey, tradeType, openid)
     return self.return_mo(0, chargeInfo=chargeInfo, payData=payData)
Ejemplo n.º 25
0
 def doXYZSDJPayCallback(cls, rpath):
     # 获取XY助手单机斗地主的appkey和paykey
     rparam = TyContext.RunHttp.convertArgsToDict()
     orderPlatformId = rparam["extra"]
     try:
         appid = rparam['orderid'].split('_')[0]
         keyvalue = TyContext.Configure.get_global_item_json(
             'XYDJSdk_config', {})
         if keyvalue and appid in keyvalue:
             appkey = keyvalue[appid]['appkey']
             paykey = keyvalue[appid]['paykey']
         else:
             config = GameItemConfigure.get_game_channel_configure_by_orderId(
                 orderPlatformId)
             appkey = config.get('appkey', "")
             paykey = config.get('paykey', "")
             if not appkey or not paykey:
                 TyContext.ftlog.error(
                     'TuYouPayXYZS->doXYZSDJPayCallback get appkey and paykey ERROR'
                 )
                 return cls._response_result(8)
     except:
         TyContext.ftlog.error(
             'TuYouPayXYZS->doXYZSDJPayCallback get appkey and paykey ERROR'
         )
         return cls._response_result(8)
     TyContext.ftlog.debug(
         'TuYouPayXYZS->doXYZSDJPayCallback rparam: [%s], appid: [%s], appkey: [%s], paykey: [%s]'
         % (rparam, appid, appkey, paykey))
     ChargeModel.save_third_pay_order_id(orderPlatformId,
                                         rparam.get('orderid', ''))
     return cls._docallback(appkey, paykey)
Ejemplo n.º 26
0
    def doVivoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        TyContext.ftlog.info('doVivoCallback->rparam=', rparam)
        orderPlatformId = rparam['storeOrder']

        try:
            appinfoconfig = TyContext.Configure.get_global_item_json(
                'vivo_appkeys', {})
            cpId = rparam['storeId']
            appdata = appinfoconfig[str(cpId)]
            appKey = appdata['cpkey']
        except KeyError:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                orderPlatformId, 'vivo')
            appKey = config.get('vivo_cpkey')
        sign = rparam['signature']
        if not cls.__verify_sign(rparam, appKey, sign):
            return 'ERROR'
        total_fee = float(rparam['orderAmount'])
        ChargeModel.save_third_pay_order_id(rparam.get('vivoOrder', ''))
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'SUCCESS'
        else:
            return 'ERROR'
Ejemplo n.º 27
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     cporderid = chargeinfo.get('platformOrderId', '')
     config = GameItemConfigure.get_game_channel_configure_by_orderId(cporderid, 'more')
     appkey = config.get('more_appkey', '')
     chargeinfo['chargeData'] = {'callbackUrl': PayHelperV4.getSdkDomain() + '/v1/pay/more/callback'}
     return cls.return_mo(0, chargeInfo=chargeinfo)
Ejemplo n.º 28
0
    def doZhangYueCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        try:
            appId = rparam['appId']
            transData = json.loads(rparam['transData'])
            orderPlatformId = transData['merOrderId']
            price = transData['payAmt']
            sign = transData['md5SignValue']
        except:
            TyContext.ftlog.info(
                'TuYouPayZhangYueV4 -> ERROR, param error !! rparam=', rparam)
            return 'error'

        config = GameItemConfigure.get_game_channel_configure_by_orderId(
            orderPlatformId, 'zhangyue')
        paykey = config['zhangyue_md5_key']

        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            TyContext.ftlog.error(
                'TuYouPayZhangYue.doZhangYueCallback sign verify error !!')
            return 'error'

        total_fee = float(price)
        rparam['chargeType'] = 'zhangyue'
        rparam['third_orderid'] = transData['orderId']
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        TyContext.ftlog.info("TuYouPayZhangYueV4 payhelper callback=", isOk)
        if isOk:
            return 'success'
        else:
            return 'error'
Ejemplo n.º 29
0
    def doWXpayCallback(self, rpath):
        xmldata = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.info('TuyouPayWXpay.doWXpayCallback in xmldata=',
                             xmldata)
        xmlroot = ElementTree.fromstring(xmldata)
        wxappId = xmlroot.find('appid').text
        openId = xmlroot.find('openid').text

        rparam = {}
        for node in xmlroot.iter():
            if 'xml' != node.tag:
                rparam[node.tag] = node.text
        TyContext.ftlog.debug('TuyouPayWXpay.doWXpayCallback in rparam=',
                              rparam)

        responseXml = ElementTree.Element('xml')
        returnCode = ElementTree.SubElement(responseXml, 'return_code')
        returnMsg = ElementTree.SubElement(responseXml, 'return_msg')

        try:
            orderPlatformId = rparam['out_trade_no']
            total_fee = float(rparam['total_fee']) / 100
            wxconfig = TyContext.Configure.get_global_item_json(
                'wx_config', {})
            config = wxconfig.get(str(wxappId), None)
            if not config:
                appConfig = GameItemConfigure.get_game_channel_configure_by_orderId(
                    orderPlatformId, 'weixin')
            wxpartnerKey = str(config['partnerKey'])
            sign = rparam['sign']
        except:
            TyContext.ftlog.info(
                'doWXpayCallback->ERROR, param error !! rparam=', rparam)
            returnCode.text = 'FAIL'
            returnMsg.text = '参数格式校验错误'
            responseStr = ElementTree.tostring(responseXml)
            return responseStr

        # 签名校验
        if not self.__verify_sign(rparam, wxpartnerKey, sign):
            TyContext.ftlog.error(
                'TuyouPayWXpay.doWXpayCallback verify error !!')
            returnCode.text = 'FAIL'
            returnMsg.text = '签名失败'
            responseStr = ElementTree.tostring(responseXml)
            return responseStr

        rparam['third_orderid'] = openId
        rparam['chargeType'] = 'wxpay'
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            returnCode.text = 'SUCCESS'
            returnMsg.text = 'OK'
        else:
            returnCode.text = 'FAIL'
            returnMsg.text = '发货失败'

        responseStr = ElementTree.tostring(responseXml)
        return responseStr
Ejemplo n.º 30
0
    def doLenovoDanjiCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doLenovoDanjiCallback->rparam=', rparam)
        try:
            transdata = rparam['transdata']
            verifyData = transdata
            signStr = rparam['sign']
            transdata = json.loads(transdata)
            TyContext.ftlog.debug(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback transdata: ',
                transdata)
            orderPlatformId = transdata['cpprivate']
            appid = transdata['appid']
            total_fee = transdata['money']
            result = transdata['result']
            paytype = transdata['paytype']
            ChargeModel.save_third_pay_order_id(orderPlatformId,
                                                transdata.get('transid'))
        except Exception as e:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR:', e)
            return 'FAILURE'

        if '0' != str(result):
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error !! rparam=',
                rparam, 'sign=', sign)
            PayHelperV4.callback_error(orderPlatformId, '支付失败', transdata)
            return 'FAILURE'

        appkeyconfig = TyContext.Configure.get_global_item_json(
            'lenovodanji_config', {})
        if not appkeyconfig:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkeyconfig by lenovodanji_config'
            )

        for item in appkeyconfig:
            if 0 == cmp(appid, item['appId']):
                lenovodanji_prikey_str = item['appKey']
                break
        else:
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback Doesn\'t find appkey by appid:',
                appid)
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                orderPlatformId, 'lenovodj')
            lenovodanji_prikey_str = cls.loadRsaPrivateKey(
                config.get('lenovo_appKey', ""))

        if not cls.verifySign(lenovodanji_prikey_str, verifyData, signStr):
            TyContext.ftlog.error(
                'TuYouPayLenovoDanji->doLenovoDanjiCallback ERROR, sign error')
            return 'FAILURE'

        transdata['sub_paytype'] = paytype
        PayHelperV4.callback_ok(orderPlatformId,
                                float(total_fee) / 100, transdata)
        return 'SUCCESS'