Esempio n. 1
0
    def doGeFuBigPaySdkCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()

        TyContext.ftlog.info('TuYouPayGeFuBigSdk Callback ', rparam)

        strtransdata = rparam['transdata']
        sign = rparam['sign'].replace(' ', '+')

        params = eval(str(rparam['transdata']))
        TyContext.ftlog.info('TuYouPayGeFuBigSdk callback transdata ', params)

        orderPlatformId = params['cporderid']
        total_fee = float(params['money'])

        if rsacrypto._verify_with_publickey_pycrypto_md5(
                strtransdata, sign, _aibei_pubkey_py):
            if 0 == params['result']:
                rparam['third_orderid'] = params['transid']
                rparam['chargeType'] = 'gefubig'
                PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
                return 'SUCCESS'
            else:
                errinfo = '支付失败'
                PayHelper.callback_error(orderPlatformId, errinfo, rparam)
                return 'FAILURE'
        else:
            errinfo = '签名校验失败'
            PayHelper.callback_error(orderPlatformId, errinfo, rparam)
            return 'FAILURE'
Esempio n. 2
0
    def doYouKuCallback(cls, rpath):
        cb_rsp = {}
        rparam = TyContext.RunHttp.convertArgsToDict()

        try:
            orderPlatformId = rparam['apporderID']
            price = rparam['price']
            uid = rparam['uid']
            sign = rparam['sign']
            youku_appId = rparam['passthrough']
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.info(
                'doYouKuCallback->ERROR, param error !! rparam=', rparam)
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '参数错误'
            return json.dumps(cb_rsp)

        paykey_dict = TyContext.Configure.get_global_item_json(
            'youku_paykeys', {})
        paykey = str(paykey_dict[str(youku_appId)])
        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            TyContext.ftlog.error(
                'TuYouPayYouKu.doYouKuCallback sign verify error !!')
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '签名验证失败'
            return json.dumps(cb_rsp)

        try:
            result = int(rparam['result'])
            success_amount = rparam['success_amount']
            if result < 1 or result > 2:
                TyContext.ftlog.error('doYouKuCallback got failed result:',
                                      result)
                cb_rsp['status'] = 'failed'
                cb_rsp['desc'] = 'result(%d) is not 1 or 2' % result
                PayHelper.callback_error(orderPlatformId,
                                         'result(%d) is not 1 or 2' % result,
                                         rparam)
                return json.dumps(cb_rsp)
            if result == 2:
                TyContext.ftlog.error(
                    'doYouKuCallback got partial success result:'
                    'success_amount is', success_amount)
        except:
            pass

        total_fee = float(price) / 100
        rparam['chargeType'] = 'youku'
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            cb_rsp['status'] = 'success'
            cb_rsp['desc'] = '发货成功'
            return json.dumps(cb_rsp)
        else:
            cb_rsp['status'] = 'failed'
            cb_rsp['desc'] = '发货失败'
            return json.dumps(cb_rsp)
Esempio n. 3
0
    def doCardCallback(cls, rpath):
        iHmacStr = TyContext.RunHttp.getRequestParam('hmac', '')
        cHmacStr = cls.getCallBackHmacString()
        if iHmacStr != cHmacStr:
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback, hmac verification error')
            return 'error'
        rparam = TyContext.RunHttp.convertArgsToDict()

        mer_code = TyContext.RunHttp.getRequestParam('p1_MerId')
        if mer_code != TuYouPayYee.p1_MerId:
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback error, mer_code is not me !!!')
            return 'error'

        platformOrderId = TyContext.RunHttp.getRequestParam('p2_Order')
        chargeKey = 'sdk.charge:' + platformOrderId
        chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey,
                                                    'charge')
        try:
            import json
            chargeInfo = json.loads(chargeInfo)
            rparam['chargeType'] = chargeInfo['chargeType']
        except:
            TyContext.ftlog.exception()

        rparam['chargeType'] = 'yee.card'
        rparam['sub_paytype'] = TyContext.RunHttp.getRequestParam(
            'p4_FrpId', 'na')
        r1_Code = TyContext.RunHttp.getRequestParam('r1_Code')
        if r1_Code != '1':
            # 长连接通知,客户端支付失败
            status = TyContext.RunHttp.getRequestParamInt(
                'p8_cardStatus', 10000)
            TyContext.ftlog.error(
                'TuYouPayYee.doCardCallback error, charge return error !!! status=',
                status)
            errorInfo = u'支付失败,' + TuYouPayYee.code_map.get(
                status, 'status' + str(status))
            PayHelper.callback_error(platformOrderId, errorInfo, rparam)
            return 'success'

        total_fee = float(rparam['p3_Amt'])
        isOK = PayHelper.callback_ok(platformOrderId, total_fee, rparam)
        if isOK:
            return 'success'
        else:
            return 'error'
Esempio n. 4
0
    def doCallback1(cls, rpath):
        datas = cls.__verify_callback__()
        if not datas:
            return '{"errorcode ":200024, "callback":1}'
        TyContext.ftlog.info('TuYouPayYee2.doCallback1 rpath', rpath, 'datas',
                             datas)

        if 'sign' in datas:
            del datas['sign']
        result = datas.get('status', 0)
        orderPlatformId = datas.get('orderid', '')
        if orderPlatformId.find('-') > 0:
            orderPlatformId = orderPlatformId.split('-')[0]

        total_fee = float(datas.get('amount', -1)) / 100
        datas['third_orderid'] = datas['yborderid']
        if result == 1:
            isOk = PayHelper.callback_ok(orderPlatformId, total_fee, datas)
        else:
            isOk = PayHelper.callback_error(orderPlatformId, str(result),
                                            datas)
        if isOk:
            return '{"errorcode ":0, "status":1, "callback":1}'
        else:
            return '{"errorcode ":200000, "status":1, "callback":1}'
Esempio n. 5
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':
            PayHelper.callback_error(orderPlatformId, 'pay fail', rparam)
            return 'failure'

        paykey_dict = TyContext.Configure.get_global_item_json(
            'duoku_paykeys', {})
        paykey = str(paykey_dict[str(appId)])

        # 签名校验
        if not cls.__verify_sign(rparam, paykey, sign):
            return 'failure'

        if unit == 'fen':
            total_fee = float(amount) / 100
        else:
            total_fee = float(amount)

        rparam['chargeType'] = 'duoku'
        rparam['third_orderid'] = rparam['orderid']
        PayHelper.set_order_mobile(orderPlatformId, mobileId)
        isOk = PayHelper.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'failure'
Esempio n. 6
0
    def doIosCallback(cls, rpath):

        platformOrderId = TyContext.RunHttp.getRequestParam('iosOrderId', '')
        TyContext.RunMode.get_server_link(platformOrderId)

        isReturn, params = AccountCheck.normal_check(rpath, True)
        if isReturn:
            return params
        userId = params['userId']
        appId = params['appId']
        clientId = params['clientId']
        appInfo = TyContext.RunHttp.getRequestParam('appInfo', '')

        isMock = bool(TyContext.RunHttp.getRequestParam('isMock'))

        receipt = TyContext.RunHttp.getRequestParam('receipt', '')
        receiptData = {'receiptJsonStr': '{"receipt-data" : "' + receipt + '"}',
                       'platformOrder': platformOrderId, 'userId': userId}

        TyContext.ftlog.info('IOS->doIosCallback->userId', userId, 'appId', appId,
                             'clientId', clientId, 'appInfo', appInfo,
                             'platformOrderId', platformOrderId, 'receipt', receipt,
                             'isMock', isMock)

        rparam = PayHelper.getArgsDict()
        rparam['chargeType'] = 'tuyooios'
        rparam['userId'] = params['userId']
        rparam['appId'] = params['appId']
        rparam['clientId'] = params['clientId']

        isSandbox = is_sandbox_receipt(receipt)
        ret = cls.doIosCallbackVerify(receiptData, isSandbox, isMock)
        TyContext.ftlog.debug('IOS->doIosCallback->doIosCallbackVerify ret=', ret)

        if ret != 'ok' and ret != 'uuid_prohibit':
            PayHelper.callback_error(platformOrderId, ret, rparam)
            return ret
        # 如果是被封禁的uuid,不进行发货处理
        if ret == 'uuid_prohibit':
            return 'success'

        transaction_id = receiptData['original_transaction_id']
        rparam['third_orderid'] = transaction_id
        rparam['third_prodid'] = receiptData.get('product_id', 'na')
        rparam['isTestOrder'] = receiptData.get('sandbox', False)

        if cls._is_ios_transaction_delivered(transaction_id):
            PayHelper.callback_error(platformOrderId, 'error-transaction-already-delivered', rparam)
            TyContext.ftlog.info('IOS->doIosCallback error-transaction-already-delivered '
                                 'userId', userId, 'platformOrder', platformOrderId)
            return 'error-transaction-already-delivered'

        if not platformOrderId:
            ret = cls._deliver_missing_order(rparam)
            if not ret:
                return 'error-platform-order-missing'
            else:
                platformOrderId = ret
        # 根据商品Id过滤刷单的订单---------------start
        try:
            chargeKey = 'sdk.charge:' + platformOrderId
            chargeInfo = TyContext.RedisPayData.execute('HGET', chargeKey, 'charge')
            if chargeInfo == None:
                TyContext.ftlog.info('IOS->doIosCallback error-platformOrderId-not-found '
                                     'userId', userId, 'platformOrder', platformOrderId)
                return 'error-platform-order-missing'

            chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True)
            if 'chargeData' in chargeInfo and 'orderIosCode' in chargeInfo['chargeData'] and chargeInfo['chargeData'][
                'orderIosCode'] != rparam['third_prodid']:
                TyContext.ftlog.info('IOS->doIosCallback error-product_id '
                                     'userId', userId, 'platformOrder', platformOrderId, 'orderIosCode',
                                     chargeInfo['chargeData']['orderIosCode'], 'receipt_product_id',
                                     rparam['third_prodid'])
                return 'error-product_id'
        except:
            pass

        from paytuyooios import TuYouPayMyIos
        product = TuYouPayMyIos.get_pay_ios_product(appId, rparam['third_prodid'], clientId, 'iosid')
        if not product:
            TyContext.ftlog.error('get_pay_ios_product products not found!'
                                  ' appId=', appId, 'iosId=', rparam['third_prodid'],
                                  'clientId=', clientId, 'checkIdKey=iosid')
            return 'error-product_id'
        # 根据商品Id过滤刷单的订单---------------end

        isOk = PayHelper.callback_ok(platformOrderId, -1, rparam)
        if isOk:
            cls._mark_ios_transaction_as_delivered(transaction_id)
            try:
                # 328 & 628 第一次购买后只能使用微信支付
                ios_control = TyContext.Configure.get_global_item_json('ios_weinxin_pay_control', {})
                if product['tyid'] in ios_control.get('weixin_products', []):
                    wxpay_count = TyContext.RedisUser.execute(userId, 'HGET', 'user:'******'wxpay_flag')
                    if not wxpay_count:
                        wxpay_count = 0
                    TyContext.RedisUser.execute(userId, 'HSET', 'user:'******'wxpay_flag',
                                                int(wxpay_count) + 1)
            except:
                TyContext.ftlog.exception()
            return 'success'
        else:
            return 'error-handle-callback'