Esempio n. 1
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
Esempio n. 2
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)
Esempio n. 3
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)
Esempio n. 4
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
Esempio n. 5
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
Esempio n. 6
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. 7
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
Esempio n. 8
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
Esempio n. 9
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'
Esempio n. 10
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'
Esempio n. 11
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
Esempio n. 12
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'
Esempio n. 13
0
    def doIappayPayCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        transdata = rparam['transdata']
        transdata = json.loads(transdata)
        sign = rparam['sign']
        appid = transdata['appid']
        signtype = rparam['signtype']
        iappayConfig = TyContext.Configure.get_global_item_json(
            'iappay_config', {})
        try:
            pubkey = iappayConfig.get(appid)['pubkey'] if iappayConfig.get(
                appid) else ""
            orderPlatformId = transdata['cporderid']
            total_fee = transdata['money']
            result = transdata['result']
            ChargeModel.save_third_pay_order_id(orderPlatformId,
                                                transdata.get('transid'))
        except Exception as e:
            TyContext.ftlog.error('doIappayPayCallback->ERROR, exception', e,
                                  'rparam', transdata)
            return 'error'
        if not pubkey:
            chargeKey = 'sdk.charge:' + orderPlatformId
            chargeInfo = TyContext.RedisPayData.execute(
                'HGET', chargeKey, 'charge')
            if chargeInfo:
                chargeInfo = TyContext.strutil.loads(chargeInfo,
                                                     decodeutf8=True)
            else:
                return 'failed'
            chargeType = chargeInfo['chargeType']
            sdk = chargeType.split('.')[0]
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                orderPlatformId, sdk)
            pubkey = config.get('iappay_pubKey')
            if not pubkey:
                TyContext.ftlog.error(
                    'doIappayPayCallback->ERROR,cannot get sdkconfig for',
                    appid)
                return 'failed'
            pubkey = cls.loadRsaPublicKey(pubkey)
        if not cls._verify_sign(rparam, sign, pubkey):
            errinfo = '支付失败'
            PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
            return 'failed'

        if result != 0:
            errinfo = '支付失败'
            TyContext.ftlog.error(
                'doIappayPayCallback->ERROR, exception, result not 0')
            PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
            return 'failed'
        PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        return 'success'
Esempio n. 14
0
 def check_sign(cls, rparams):
     appId = rparams['appId']
     sign = rparams['sign']
     kuaiwan_keys = TyContext.Configure.get_global_item_json('kuaiwan_keys', {})
     try:
         appKey = kuaiwan_keys[appId]['appKey']
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(rparams['orderId'], 'kuaiwan')
         appKey = config.get('kuaiwan_appKey', "")
     params = filter(lambda x: x[0] != '' and x[0] != 'sign', rparams.items())
     params.sort(lambda x, y: cmp(x[0], y[0]))
     params = map(lambda x: '%s=%s' % x, params)
     text = '&'.join(params)
     if sign != hashlib.md5('%s%s' % (text, appKey)).hexdigest():
         return False
     return True
Esempio n. 15
0
 def _calc_sign(cls, rparam):
     meizu_config = TyContext.Configure.get_global_item_json(
         'meizu_config', {})
     try:
         app_key = meizu_config[rparam['app_id']]['appkey']
     except KeyError:
         orderId = rparam['cp_order_id']
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             orderId, 'meizu')
         app_key = config.get('mz_appSecret')
     query = "&".join(k + "=" + str(rparam[k]) for k in sorted(rparam.keys()) \
                      if k != 'sign' and k != 'sign_type')
     TyContext.ftlog.debug('TuYouMeizuPay _calc_sign ,query', query)
     m = md5()
     m.update(query + ':' + app_key)
     return m.hexdigest().lower()
Esempio n. 16
0
    def get_order(self, mi):
        chargeInfo = self.get_charge_info(mi)
        ali_appid = mi.getParamStr('ali_appid', '')
        platformOrderId = chargeInfo['platformOrderId']
        config = GameItemConfigure.get_game_channel_configure_by_orderId(
            platformOrderId, 'alipayapp')
        if not config:
            raise PayErrorV4(1, '请当前包的渠道参数配置')
        alipay_id = config.get('alipay_id')
        alipay_private_key = config.get('alipay_private_key')
        params = {
            'app_id':
            alipay_id,
            'method':
            'alipay.trade.app.pay',
            'format':
            'JSON',
            'charset':
            'utf-8',
            'sign_type':
            'RSA',
            'timestamp':
            datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'version':
            '1.0',
            'notify_url':
            PayHelperV4.getSdkDomain() + '/v1/pay/alinewpay/app/callback'
        }

        biz_content = {
            'subject': chargeInfo['buttonName'],
            'out_trade_no': platformOrderId,
            'timeout_express': '90m',
            'total_amount': '%.2f' % chargeInfo['chargeTotal'],
            'product_code': 'QUICK_MSECURITY_PAY',
            'goods_type': '0',
        }
        import json
        params['biz_content'] = json.dumps(biz_content)
        signStr = '&'.join(k + '=' + str(params[k]) for k in sorted(params))
        params['sign'] = self.rsaAliSign(signStr, alipay_private_key)
        orderStr = '&'.join(k + '=' + urllib.quote(str(params[k]))
                            for k in sorted(params))
        orderStr += '&sign=' + urllib.quote(
            self.rsaAliSign(signStr, alipay_private_key))
        payData = {'ali_config': orderStr}
        return self.return_mo(0, chargeInfo=chargeInfo, payData=payData)
Esempio n. 17
0
 def doXiaomiDanJiCallback(cls, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('doXiaomiDanJiCallback->rparam=', rparam)
     appkeys = TyContext.Configure.get_global_item_json(
         'xiaomidanji_paykeys', {})
     try:
         appKey = str(appkeys[rparam['appId']])
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             rparam['cpOrderId'], 'midanji')
         appKey = str(config.get('xiaomidanji_payKey', ""))
         if not appKey:
             TyContext.ftlog.error(
                 'xiaomidanji callback , cannot get  %s config' %
                 rparam['appId'])
             return '{"errcode":1515}'
     return cls.__check_callback(rparam, appKey)
Esempio n. 18
0
    def do360payCallback(cls, rpath):
        TyContext.ftlog.debug('do360payCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderPlatformId = rparam['app_order_id']
            appId = orderid.get_appid_frm_order_id(orderPlatformId)
            sign = rparam['sign']
        except:
            TyContext.ftlog.info(
                'do360payCallback->ERROR, param error !! rparam=', rparam)
            return "error"

        clientId = rparam['app_ext1']
        app_key = rparam['app_key']
        client_ids = TyContext.Configure.get_game_item_json(
            appId, 'account.360.client.version', {})
        clientver = ''
        if clientId in client_ids:
            clientver = str(client_ids[clientId])
        client_secret = TyContext.Configure.get_game_item_str(
            appId, 'account.360.client.secret.' + app_key)
        if not client_secret:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                orderPlatformId, "360")
            client_secret = config.get('QHOPENSDK_APPSECRET')
        if not client_secret:
            TyContext.ftlog.error(
                'Account360 the appinfo of QIHOO(appKey:%s)  is not found !' %
                app_key)
            return "error"

        # 签名校验
        if not cls.__verify_sign(rparam, client_secret, sign):
            TyContext.ftlog.error(
                'TuyouPay360pay.do360payCallbacksign verify error !!')
            return "error"

        total_fee = float(rparam['amount']) / 100
        ChargeModel.save_third_pay_order_id(orderPlatformId,
                                            rparam.get('order_id', ''))
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return "ok"
        else:
            return "error"
Esempio n. 19
0
 def handle_callback(self, rpath):
     rparams = TyContext.RunHttp.convertArgsToDict()
     platformOrderId = rparams['out_trade_no']
     aliOrder = rparams['trade_no']
     config = GameItemConfigure.get_game_channel_configure_by_orderId(
         platformOrderId, 'alipayapp')
     pubkey = config.get('alipay_publick_key')
     if not self.rsaVerify(self.createLinkString(rparams), rparams['sign'],
                           pubkey):
         return 'failure'
     if rparams['trade_status'] != 'TRADE_SUCCESS' and rparams[
             'trade_status'] != 'TRADE_SUCCESS':
         return 'failure'
     total_fee = rparams['total_amount']
     rparams['third_orderid'] = aliOrder
     ChargeModel.save_third_pay_order_id(platformOrderId, aliOrder)
     PayHelperV4.callback_ok(platformOrderId, total_fee, rparams)
     return 'success'
Esempio n. 20
0
    def doDuoKuCallback(cls, rpath):
        TyContext.ftlog.info('doDuoKuCallback start')
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            shortOrderPlatformId = rparam['cpdefinepart']
            orderPlatformId = ShortOrderIdMap.get_long_order_id(shortOrderPlatformId)
            appId = rparam['appid']
            sign = rparam['sign']
            unit = rparam['unit']
            amount = rparam['amount']
            status = rparam['status']
            mobileId = rparam.get('phone', '')
        except:
            TyContext.ftlog.info('doDuoKuCallback->ERROR, param error !! rparam=', rparam)
            TyContext.ftlog.exception()
            return 'failure'
        if status != 'success':
            PayHelperV4.callback_error(orderPlatformId, 'pay fail', rparam)
            return 'failure'
        paykey_dict = TyContext.Configure.get_global_item_json('duoku_paykeys', {})
        paykey = paykey_dict.get(appId, "")
        if not paykey:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(orderPlatformId)
            paykey = config.get('dksdk_appsecret', "")
            if not paykey:
                TyContext.ftlog.error("doDuokuCallback", "cannot get %s sdkconfig" % appId)
        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            return 'failure'

        if unit == 'fen':
            total_fee = float(amount) / 100
        else:
            total_fee = float(amount)
        ChargeModel.save_third_pay_order_id(orderPlatformId, rparam.get('orderid'))
        rparam['chargeType'] = 'duoku'
        rparam['third_orderid'] = rparam['orderid']
        PayHelperV4.set_order_mobile(orderPlatformId, mobileId)
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'failure'
Esempio n. 21
0
    def doCallback(self, rpath):
        rparams = TyContext.RunHttp.convertArgsToDict()
        order_id = rparams['orderId']
        price_coin = rparams['price']
        config = TyContext.Configure.get_global_item_json('ysdk_keys', {})
        app_id = rparams['ysdk_appid']
        ysdk_model = rparams['ysdk_model']
        ysdk_openId = rparams.get('ysdk_openid', '')
        ChargeModel.save_third_pay_order_id(order_id, 'openId:%s' % ysdk_openId)
        try:
            self.request_url = 'https://' + config['%s_url' % ysdk_model]
            app_key = config[app_id]['%s_appKey' % ysdk_model]
        except:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(order_id, 'ysdk')
            self.request_url = 'https://' + config.get('ysdk_%s_url' % ysdk_model, "")
            app_key = config.get('ysdk_%s_appKey' % ysdk_model, "")
            if not self.request_url or not app_key:
                return 'check sign fail'
        # 验签
        if not self.check_sign(rparams):
            return 'check sign fail'

        # 轮询金币是否到账
        has_balance = self.get_balance_m('/mpay/get_balance_m', app_key, rparams)

        if not has_balance:
            return '充值金币未到账'

        # 尝试扣除金币
        pay_response = self.pay_m('/mpay/pay_m', app_key, rparams)
        if 0 == int(pay_response['ret']) and order_id == pay_response['billno']:
            # 尝试发货
            isOk = PayHelperV4.callback_ok(order_id, -1, rparams)
            if isOk:
                return '发货成功'
            else:
                # 发货失败尝试取消扣费
                return self.cancel_pay_m('/mpay/cancel_pay_m', app_key, rparams)
        elif 1004 == int(pay_response['ret']):
            return '余额不足'
        elif 1018 == int(pay_response['ret']):
            return '登录校验失败'
        else:
            return '扣费失败'
Esempio n. 22
0
 def check_sign(cls, rparams):
     app_id = rparams['app_id']
     sign = rparams['sign']
     config = TyContext.Configure.get_global_item_json('letv_keys', {})
     try:
         app_key = config[app_id]['scrkey']
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             rparams['cooperator_order_no'])
         app_key = config.get('scrkey')
     params = filter(lambda x: x[0] != '' and x[0] != 'sign',
                     rparams.items())
     params.sort(lambda x, y: cmp(x[0], y[0]))
     params = map(lambda x: '%s=%s' % x, params)
     text = '&'.join(params)
     if sign != md5('%s&key=%s' % (text, app_key)).hexdigest():
         return False
     else:
         return True
Esempio n. 23
0
 def check_sign(self, rparams):
     gid = rparams['gid']
     platformOrderId = rparams['appdata']
     sougou_keys = TyContext.Configure.get_global_item_json(
         'sougou_keys', {})
     try:
         paySecret = sougou_keys[gid]['paySecret']
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             platformOrderId, 'sogou')
         paySecret = config.get("sogou_paySecret")
     text = filter(lambda x: x[0] != 'auth', rparams.items())
     text.sort(lambda x, y: cmp(x[0], y[0]))
     text = ['%s=%s' % x for x in text]
     text.append(paySecret)
     myauth = hashlib.md5('&'.join(text)).hexdigest()
     if rparams['auth'] == myauth:
         return True
     return False
Esempio n. 24
0
    def check_sign(self, rparams, app_id):
        order_no = rparams['order_no']
        data_timestamp = rparams['data_timestamp']
        config = TyContext.Configure.get_global_item_json('nubia_keys', {})
        try:
            secret = config[app_id]['secret']
        except KeyError:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                order_no)
            secret = config.get('secret')
        sign = rparams['sign']

        text = 'data_timestamp=%s&order_no=%s:%s:%s' % (
            data_timestamp, order_no, app_id, secret)

        if sign != md5(text).hexdigest():
            return False
        else:
            return True
Esempio n. 25
0
    def doPPSCallback(cls, rpath):
        cb_rsp = {}
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderPlatformId = rparam['userData'].split(',')[0]
            appId = rparam['userData'].split(',')[1]
            price = rparam['money']
            sign = rparam['sign']
        except:
            TyContext.ftlog.info(
                'doPPSCallback->ERROR, param error !! rparam=', rparam)
            cb_rsp['result'] = '-2'
            cb_rsp['message'] = 'Parameters error'
            return json.dumps(cb_rsp)

        paykey_dict = TyContext.Configure.get_global_item_json(
            'pps_paykeys', {})
        try:
            paykey = str(paykey_dict[str(appId)])
        except KeyError:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                orderPlatformId, 'pps')
            paykey = config.get('pps_payKey', "")
        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            TyContext.ftlog.error(
                'TuYouPayPPS.doPPSCallback sign verify error !!')
            cb_rsp['result'] = '-1'
            cb_rsp['message'] = 'Sign error'
            return json.dumps(cb_rsp)

        total_fee = float(price)
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            cb_rsp['result'] = '0'
            cb_rsp['message'] = 'success'
            return json.dumps(cb_rsp)
        else:
            cb_rsp['result'] = '-6'
            cb_rsp['message'] = 'Other errors'
            return json.dumps(cb_rsp)
Esempio n. 26
0
 def check_sign(cls, rparams):
     app_key = rparams['app_key']
     sign = rparams['sign']
     # find payKey by appId
     papa_keys = TyContext.Configure.get_global_item_json('papa_keys', {})
     try:
         appSecret = papa_keys[app_key]['secretKey']
     except KeyError:
         config = GameItemConfigure.get_game_channel_configure_by_orderId(
             rparams['app_order_id'], 'papa')
         appSecret = config.get('papa_secret', '')
     params = filter(lambda x: x[0] != '' and x[0] != 'sign',
                     rparams.items())
     params.sort(lambda x, y: cmp(x[0], y[0]))
     params = map(lambda x: '%s=%s' % x, params)
     text = '&'.join(params)
     if sign != hashlib.md5('%s%s%s' %
                            (app_key, appSecret, text)).hexdigest():
         return False
     return True
Esempio n. 27
0
    def doPPZhuShouPayCallback(cls, rpath):
        postData = TyContext.RunHttp.get_body_content()
        jsondata = json.loads(postData)
        TyContext.ftlog.info('TuYouPayPPZhuShou->jsondata', jsondata)

        param = eval(''.join(str(jsondata).replace('&', '').split()))

        TyContext.ftlog.debug('TuYouPayPPZhuShou->param after eval()', param)
        # 去除字符串中的回车和换行符
        rparams = param['data']
        orderPlatformId = rparams['orderId']
        config = GameItemConfigure.get_game_channel_configure_by_orderId(
            orderPlatformId, 'ppzhushou')
        if config:
            md5key = config.get('PPZHUSHOU_md5key', "")
        else:
            ppzhushouconfig = TyContext.Configure.get_global_item_json(
                'ppzhushou_config', {})
            md5key = ppzhushouconfig['md5key']
        strSign = cls._cal_sign(rparams, md5key)
        TyContext.ftlog.debug('TuYouPayPPZhuShou->strSign', strSign, 'sign',
                              param['sign'])

        total_fee = float(rparams['amount'])
        rparams['third_orderid'] = rparams['tradeId']
        rparams['chargeType'] = 'ppzhushou'

        if strSign == param['sign']:
            if 'S' == rparams['orderStatus']:
                PayHelperV4.callback_ok(orderPlatformId, total_fee, rparams)
                return 'SUCCESS'
            else:
                errorInfo = '错误订单,等待正确订单......'
                TyContext.ftlog.info('TuYouPayPPZhuShou->errorInfo', errorInfo,
                                     'failedDesc', rparams['failedDesc'])
                return 'SUCCESS'

        else:
            errorInfo = '签名校验错误'
            TyContext.ftlog.error('TuYouPayPPZhuShou->errorInfo', errorInfo)
            return 'FAILURE'
Esempio n. 28
0
    def doVivoCallback(cls, rpath):
        rparams = TyContext.RunHttp.convertArgsToDict()
        appId = rparams.get('verdorCode')
        platformOrderId = rparams.get('orderId')
        config = GameItemConfigure.get_game_channel_configure_by_orderId(
            platformOrderId, '16wifi')

        md5key = config.get('16wifi_key')

        signStr = '&'.join(k + '=' + rparams[k] for k in sorted(rparams.keys())
                           if rparams[k] and k != 'sign')

        signStr += '&key=%s' % md5key
        m = md5(signStr)
        if m.hexdigest().upper() != rparams['sign']:
            return {'ReturnCode': 1}
        total_fee = rparams.get('cashAmount')
        ChargeModel.save_third_pay_order_id(platformOrderId,
                                            rparams.get('payCode'))
        PayHelperV4.callback_ok(platformOrderId, total_fee, rparams)
        return {'ReturnCode': 200}
Esempio n. 29
0
    def verify_sign(cls, rparams):
        sign = rparams['sign']
        appId = rparams['appId']
        platformOrderId = rparams['extend']
        lizi_keys = TyContext.Configure.get_global_item_json('lizi_keys', {})
        try:
            rparams['serverKey'] = lizi_keys[appId]['serverKey']
        except:
            config = GameItemConfigure.get_game_channel_configure_by_orderId(
                platformOrderId, 'lizi')
            rparams['serverKey'] = config.get('serverKey')
        params = filter(lambda x: x[0] != '' and x[0] != 'sign',
                        rparams.items())
        params.sort(lambda x, y: cmp(x[0], y[0]))
        params = map(lambda x: '%s' % x[1], params)

        text = ''.join(params)
        calcSign = md5(text).hexdigest()
        if sign != calcSign:
            return False
        return True
Esempio n. 30
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