Exemplo n.º 1
0
    def doGeFuBigPaySdkCallback(self, 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'
                PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
                return 'SUCCESS'
            else:
                errinfo = '支付失败'
                PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
                return 'FAILURE'
        else:
            errinfo = '签名校验失败'
            PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
            return 'FAILURE'
Exemplo n.º 2
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': ''}
Exemplo n.º 3
0
    def doiToolsPayCallback(self, rpath):
        postData = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug('TuYouPayiTools->doiToolsPayCallback postData: ',
                              postData)
        paramslist = postData.split('&')
        params = {}
        for k in paramslist:
            paramdata = k.split('=')
            params[paramdata[0]] = paramdata[1]
        TyContext.ftlog.debug(
            'TuYouPayiTools->doiToolsPayCallback postParams: ', params)

        for k in params.keys():
            params[k] = urllib.unquote(params[k])
        TyContext.ftlog.debug(
            'TuYouPayiTools->doiToolsPayCallback postParams_urldecode: ',
            params)

        pristr = params['notify_data']
        sign = params['sign']
        data = rsa_decrypto_with_publickey(pristr, iTools_pubkey_str, 1)
        TyContext.ftlog.debug(
            'TuYouPayiTools->doiToolsPayCallback iTools callback data: ', data)
        rparam = json.loads(data)
        TyContext.ftlog.debug(
            'TuYouPayiTools->doiToolsPayCallback notify_data: ', rparam)
        try:
            orderPlatformId = rparam['order_id_com']
            amount = rparam['amount']
            account = rparam['account']
            third_orderid = rparam['order_id']
            result = rparam['result']
            user_id = rparam['user_id']
        except:
            TyContext.ftlog.error(
                'TuYouPayiTools->doiToolsPayCallback Get params in iTools callback ERROR!'
            )
            return 'fail'
        if 0 != cmp('success', result):
            TyContext.ftlog.error(
                'TuYouPayiTools->doiToolsPayCallback Charge failed!')
            errormsg = 'user use ' + account + ' charge ' + result
            PayHelperV4.callback_error(orderPlatformId, errormsg, rparam)

        # veriry_result = cls.rsa_verify(data, sign, iTools_pubkey_str)
        veriry_result = _verify_with_publickey_pycrypto(
            data, sign, _iTools_pubkey_py)
        if not veriry_result:
            TyContext.ftlog.error(
                'TuYouPayiTools->doiToolsPayCallback Verify failed! data: %s, sign: %s, iTools_pubkey_str: %s'
                % (data, sign, iTools_pubkey_str))
            return 'fail'

        rparam['third_orderid'] = third_orderid
        PayHelperV4.callback_ok(orderPlatformId, amount, rparam)
        TyContext.ftlog.debug(
            'TuYouPayiTools->doiToolsPayCallback user %s charge % successed! '
            % (user_id, amount))
        return 'success'
Exemplo n.º 4
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'
Exemplo n.º 5
0
 def doMeizuPayCallback(cls, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('doMeizuPayCallback rparam', rparam)
     cp_order_id = None
     try:
         cp_order_id = rparam['cp_order_id']
         total_price = float(rparam['total_price'])
         trade_status = rparam['trade_status']
         ChargeModel.save_third_pay_order_id(cp_order_id,
                                             rparam.get('order_id', ''))
     except Exception as e:
         TyContext.ftlog.error('doMeizuCallback param error, exception', e,
                               'cp_order_id', cp_order_id)
         return json.dumps({
             'code': 900000,
             'message': '参数不匹配',
             'redirect': '',
             'value': None
         })
     if not cls._check_sign(rparam):
         TyContext.ftlog.error('TuYouPayMeizu _check_sign failed',
                               cp_order_id)
         return json.dumps({
             'code': 900000,
             'message': '签名错误',
             'redirect': '',
             'value': None
         })
     if trade_status == '3':
         PayHelperV4.callback_ok(cp_order_id, total_price, rparam)
         return json.dumps({
             'code': 200,
             'message': '充值成功',
             'redirect': '',
             'value': None
         })
     elif trade_status == '4':
         PayHelperV4.callback_error(cp_order_id, '订单取消', rparam)
         return json.dumps({
             'code': 900000,
             'message': '',
             'redirect': '',
             'value': None
         })
     elif trade_status == '1' or trade_status == '2':
         return json.dumps({
             'code': 90000,
             'message': '订单处理中',
             'redirect': '',
             'value': None
         })
     elif trade_status == '5':
         return json.dumps({
             'code': 90000,
             'message': '订单异常取消',
             'redirect': '',
             'value': None
         })
Exemplo n.º 6
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'
Exemplo n.º 7
0
    def doMaopaoPayCallback(cls, rpath):

        rparam = TyContext.RunHttp.convertArgsToDict()

        maopaoInfo = {}
        maopaoInfo['orderId'] = rparam['orderId']
        maopaoInfo['skyId'] = rparam['skyId']
        maopaoInfo['resultCode'] = rparam['resultCode']
        maopaoInfo['payNum'] = rparam['payNum']
        maopaoInfo['cardType'] = rparam['cardType']
        maopaoInfo['realAmount'] = rparam['realAmount']
        maopaoInfo['payTime'] = rparam['payTime']
        maopaoInfo['failure'] = rparam['failure']
        maopaoInfo['signMsg'] = rparam['signMsg']

        rparam['third_orderid'] = maopaoInfo['payNum']
        rparam['chargeType'] = 'maopao'
        maopaoConfig = TyContext.Configure.get_global_item_json(
            'maopao_config', {})
        md5key = maopaoConfig['md5key']

        signParams = rparam['orig_uri']
        signInfo = signParams[signParams.find('?') +
                              1:signParams.find('signMsg') -
                              1] + '&' + 'key' + '=' + md5key

        TyContext.ftlog.info('doMaopaoCallback signInfo', signInfo)

        total_fee = int(maopaoInfo['realAmount']) / 100
        orderPlatformId = maopaoInfo['orderId']

        sign = cls._cal_sign(signInfo)
        TyContext.ftlog.debug('doMaopaoCallback  sign', sign, 'signMsg',
                              maopaoInfo['signMsg'], 'signInfo', signInfo)

        if sign == maopaoInfo['signMsg']:
            if int(maopaoInfo['realAmount']) > 0:
                ChargeModel.save_third_pay_order_id(orderPlatformId,
                                                    maopaoInfo['payNum'])
                PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
                TyContext.ftlog.info('doMaopaoCallback->SUCCESSFUL rparam',
                                     rparam)
                return 'result=0'
            else:
                errinfo = '支付失败'
                PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
                TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc',
                                      errinfo, 'rparam', rparam)
        else:
            errinfo = '签名校验失败'
            PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
            TyContext.ftlog.error('doMaopaoCallback->ERROR, failDesc', errinfo,
                                  'rparam', rparam)
        return 'result=0'
Exemplo n.º 8
0
    def doUcDjCallback(cls, rpath):
        body = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug('TuYouPayUcDj->doUcDjCallback Request data: ',
                              body)
        rparam = TyContext.strutil.loads(body, decodeutf8=True)
        try:
            data = rparam['data']
            orderPlatformId = data['orderId']
            state = data['orderStatus']
            total_fee = data['amount']
            sign = rparam['sign']
            thirdorderid = data['tradeId']
        except:
            TyContext.ftlog.error(
                'TuYouPayUcDj->doUcDjCallback ERROR, param error !! rparam=',
                rparam)
            return 'FAILURE'
        # 签名校验
        if not cls.__verify_sign(data, sign):
            TyContext.ftlog.error(
                'TuYouPayUcDj->doUcDjCallback verify error !!')
            return 'FAILURE'
        # 充值状态校验
        if state != 'S':
            TyContext.ftlog.info(
                'TuYouPayUcDj->doUcDjCallback charge failed. fail reason:',
                data['failedDesc'])
            PayHelperV4.callback_error(orderPlatformId, data['failedDesc'],
                                       rparam)
            return 'SUCCESS'

        data['third_orderid'] = thirdorderid
        total_fee = float(total_fee)
        ChargeModel.save_third_pay_order_id(orderPlatformId, thirdorderid)
        PayHelperV4.callback_ok(orderPlatformId, total_fee, data)
        return 'SUCCESS'
Exemplo n.º 9
0
    def callback(cls, rpath):
        try:
            rparam = PayHelperV4.getArgsDict()
            TyContext.ftlog.info(cls.__name__, 'callback->rparam=', rparam)

            orderPlatformId = rparam['mer_trade_code']
            if orderPlatformId.find('-') > 0:
                orderPlatformId = orderPlatformId[0:orderPlatformId.find('-')]

            mer_code = rparam['mer_code']
            bank_pay_flag = rparam['bank_pay_flag']
            sign = rparam['sign']
            total_fee = rparam.get('pay_amount', rparam.get('rec_amount', -1))
            try:
                total_fee = float(total_fee)
            except:
                TyContext.ftlog.error(cls.__name__, 'callback fee error. total_fee', total_fee)
                total_fee = -1

            del rparam['sign']

            vSign = cls.__build_my_sign__(rparam)
            if sign != vSign:
                raise Exception('sign not equal')

            rparam['sign'] = sign

            if mer_code != cls.merchant_code:
                raise Exception('mer_code is not me !!!')

            rparam['third_orderid'] = rparam['gateway_trade_code']
            if bank_pay_flag == 'success':
                chargeType = cls.bank_code2charge_type_dict.get(rparam.get('bank_code', ''), None)
                if chargeType:
                    rparam['chargeType'] = chargeType

                isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
            else:
                bank_pay_flag = bank_pay_flag.decode('utf-8')
                isOk = PayHelperV4.callback_error(orderPlatformId, bank_pay_flag, rparam)
            if isOk:
                return 'success'
        except:
            TyContext.ftlog.exception()

        return 'error'
Exemplo n.º 10
0
class TuYouPayJinritoutiaoV4(PayBaseV4):
    @payv4_order('jinritoutiao')
    def charge_data(self, mi):
        return self.handle_order(mi)

    @payv4_callback('/open/ve/pay/jinritoutiao/callback')
    def doJinritoutiaoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doJinritoutiaoCallback rparam', rparam)

        try:
            total_fee = int(rparam['total_fee'])
            trade_status = rparam['trade_status']
            orderPlatformId = rparam['out_trade_no']
            appid = rparam['client_id']

        except Exception as e:
            TyContext.ftlog.error(
                'doJinritoutiaoCallback param error, '
                'exception', e)
            return 'error'

        configs = TyContext.Configure.get_global_item_json(
            'jinritoutiao_config', {})
        try:
            config = configs[appid]
            public_key = _import_rsa_key_(config['pay_ras_pub_key'])
        except Exception, e:
            TyContext.ftlog.error(
                'doJinritoutiaoCallback config or public_key invalid', e)
            return 'error'

        if not cls._check_ras_code(public_key, rparam):
            TyContext.ftlog.error(
                'doJinritoutiaoCallback check rsa sign error', orderPlatformId)
            return 'error'
        if trade_status != '3' and trade_status != '0':
            TyContext.ftlog.error('doJinritoutiaoCallback trade_status ',
                                  trade_status)
            PayHelperV4.callback_error(orderPlatformId, '支付失败', rparam)
            return 'error'
        PayHelperV4.callback_ok(orderPlatformId, total_fee / 100.0, rparam)
        return 'success'
Exemplo n.º 11
0
    def do_yipay_callback(cls, paytype):
        rparam = TyContext.RunHttp.convertArgsToDict()
        try:
            orderPlatformId = rparam['app_orderid']
            mobileId = rparam.get('phone', '')
            if not mobileId and 'phone' in rparam.keys():
                del rparam['phone']
            sign = rparam['sign']
            merc_id = rparam['merc_id']
            status = int(rparam['status'])
            user_id = rparam['userid']
            is_monthly = int(rparam['is_monthly'])
        except Exception as e:
            TyContext.ftlog.error('do_yipay_callback->ERROR, exception', e,
                                  'rparam', rparam)
            return 'error'

        # 签名校验
        appkey_config = TyContext.Configure.get_global_item_json(
            'yipay_appkey_config', {})
        try:
            appkey = appkey_config[merc_id]
        except:
            TyContext.ftlog.error(
                'do_yipay_callback appkey not configed'
                ' for merc_id', merc_id)
            return 'error'
        if not cls._verify_sign(rparam, sign, appkey):
            return 'error'

        rec_amount = rparam['rec_amount']
        pay_amount = rparam['pay_amount']
        if rec_amount != pay_amount:
            TyContext.ftlog.error('do_yipay_callback pay_amount', pay_amount,
                                  'not equal to rec_amount', rec_amount)
        total_fee = float(pay_amount) / 100
        rparam['third_orderid'] = rparam['orderid']
        rparam['sub_paytype'] = rparam['ch_type']
        rparam['chargeType'] = paytype
        rparam['mobileId'] = mobileId
        if status == 1:
            PayHelperV4.set_order_mobile(orderPlatformId, mobileId)
            # 判断用户购买的是不是包月会员
            if 2 == is_monthly:
                TyContext.ftlog.debug(
                    'TuYouPayYi->doYiPayCallback User [%s] buy monthly goods.'
                    % user_id)
                # 修改用户表,将用户状态置为会员状态
                '''
                if 'message' in rparam:
                    message = rparam['message']
                else:
                    TyContext.ftlog.info('TuYouPayYi->doYiPayCallback ERROR, Doesn\'t has message parameter.'
                                          'userid: [%s], platformorderid: [%s], third_id: [%s]'
                                          % (user_id, orderPlatformId, rparam['third_orderid']))
                    message = '退订请联系会员退订专用电话: 4008-098-000'
                '''
                message = '退订请联系会员退订专用电话: 4008-098-000'
                # 记录购买会员的appId、clientId
                chargeKey = 'sdk.charge:' + orderPlatformId
                chargeInfo = TyContext.RedisPayData.execute(
                    'HGET', chargeKey, 'charge')
                if chargeInfo == None:
                    chargeInfo = {}
                else:
                    chargeInfo = TyContext.strutil.loads(chargeInfo,
                                                         decodeutf8=True)

                appId = chargeInfo.get('appId', 9999)
                clientId = chargeInfo.get('clientId', '')

                TyContext.RedisUser.execute(user_id, 'HMSET',
                                            'user:'******'isYouyifuVipUser', '1',
                                            'youyifuVipMsg', message,
                                            'bugYouyifuVipAppid', appId,
                                            'bugYouyifuVipClientid', clientId)

                # 这个参数用来告诉游戏服务器,这个商品是一件优易付的会员包月商品
                rparam['isYouyifuMonthVip'] = '1'
                PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
                cls.reportBi(Order.SUBSCRIBE, rparam)
                TyContext.ftlog.info(
                    'TuYouPayYi->doYiPayCallback user %s has subscribed Monthly VIP.'
                    % user_id)
            else:
                PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
            return 'success'
        elif status == 3:
            # 包月退订,修改用户表,将用户状态置为非会员状态,并通知游戏服用户退订
            status = cls._NotifyGameServerUnsubscribe(orderPlatformId, user_id)
            if not status:
                TyContext.ftlog.error(
                    'TuYouPayYi->doYiPayCallback Notify Game server user [%s] unsubscribed ERROR!'
                    % user_id)
                return 'success'
            try:
                TyContext.MySqlSwap.checkUserDate(user_id)
            except:
                TyContext.ftlog.error(
                    'TuYouPayYi->doYiPayCallback get cold data')
            TyContext.RedisUser.execute(user_id, 'HSET', 'user:'******'isYouyifuVipUser', '0')
            cls.reportBi(Order.UNSUBSCRIBE, rparam)
            return 'success'
        else:
            errinfo = '支付失败' + str(rparam.get('status_desc', ''))
            PayHelperV4.callback_error(orderPlatformId, errinfo, rparam)
            return 'success'
Exemplo n.º 12
0
    def doLianTongWoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('TuYouPayLianTongWoV4.doLianTongWoCallback->rparam=', rparam)

        # 订单验证处理
        if 'serviceid' in rparam and rparam['serviceid'] == 'validateorderid':
            return cls._validate_orderid(rparam)

        # 成功回调处理
        xmldata = TyContext.RunHttp.get_body_content()
        # xmldata = '<callbackReq><orderid>XXX</orderid><ordertime>XXX</ordertime>
        # <cpid>XXX</cpid><appid>XXX</appid><fid>XXX</fid><consumeCode>XXX</consumeCode>
        # <payfee>XXX</payfee><payType>XXX</payType><hRet>XXX</hRet>
        # <status>XXX</status><signMsg>XXX</signMsg></callbackReq>'
        TyContext.ftlog.info('TuYouPayLianTongWoV4.doLianTongWoCallback in xmldata=', xmldata)

        try:
            xmlroot = ElementTree.fromstring(xmldata)

            orderid = xmlroot.find('orderid').text
            if len(orderid) == 24:
                orderPlatformId = orderid[10:]
            else:
                orderPlatformId = orderid

            ordertime = xmlroot.find('ordertime').text
            cpid = xmlroot.find('cpid').text

            if xmlroot.find('appid').text:
                appid = xmlroot.find('appid').text
            else:
                # appid = '905608778920130929155624363800'
                appid = ''

            # appid = xmlroot.find('appid').text
            if appid is None:
                appid = ''
            fid = xmlroot.find('fid').text
            consumeCode = xmlroot.find('consumeCode').text
            payfee = int(xmlroot.find('payfee').text)  # 单位:分
            payType = int(xmlroot.find('payType').text)
            hRet = int(xmlroot.find('hRet').text)
            status = xmlroot.find('status').text
            signMsg = xmlroot.find('signMsg').text
        except Exception as e:
            TyContext.ftlog.info('TuYouPayLianTongWoV4.doLianTongWoCallback->ERROR, exception', e)
            return TuYouPayLianTongWoV4.XML_ERRO

        appInfo = cls._get_order_info(orderPlatformId)
        clientId = appInfo.get('clientId', '')

        # tSign = 'orderid='+orderPlatformId+'&ordertime='+ordertime+'&cpid='+cpid
        # +'&appid='+appid+'&fid='+fid+'&consumeCode='+consumeCode
        # +'&payfee='+str(payfee)+'&payType='+str(payType)+'&hRet='+str(hRet)
        # +'&status='+status+'&Key='+TuYouPayLianTongWoV4V4.appkeys[str(appid)]
        TyContext.ftlog.debug(
            'TuYouPayLianTongWoV4V4.doLianTongWoCallback ->', orderid, ordertime,
            cpid, appid, fid, consumeCode, payfee, payType, hRet, status,
            TuYouPayLianTongWoV4.appkeys)
        tSign = 'orderid=' + orderid + '&ordertime=' + ordertime + '&cpid=' + cpid + '&appid=' + appid + \
                '&fid=' + fid + '&consumeCode=' + consumeCode + '&payfee=' + str(payfee) + '&payType=' + str(payType) + \
                '&hRet=' + str(hRet) + '&status=' + status + '&Key=' + TuYouPayLianTongWoV4._get_appkey(cpid, clientId)
        vSign = cls._calc_md5_sign(tSign)

        if signMsg != vSign:
            TyContext.ftlog.info('TuYouPayLianTongWoV4V4.doLianTongWoCallback->ERROR, sign error !! sign=', signMsg,
                                 'vSign=', vSign)
            return TuYouPayLianTongWoV4.XML_ERRO

        # TyContext.ftlog.info('TuYouPayLianTongWoV4.doLianTongWoCallback in orderPlatformId=', orderPlatformId, 'hRet=', hRet, 'status=', status)
        notifys = {'xml': xmldata, 'chargeType': 'liantong.wo',
                   'pay_appid': appid if appid else 'na',
                   'sub_paytype': payType, 'third_prodid': consumeCode}
        provinceid = TyContext.RedisPayData.execute(
            'HGET', 'liantongwo:' + str(orderPlatformId), 'provinceid')
        if provinceid:
            notifys['third_provid'] = provinceid
        # 联通集成其他短信支付以后status码会出现其他值,
        if str(hRet) == '0':  # and str(status) == '00000' :
            isOk = PayHelperV4.callback_ok(orderPlatformId, -1, notifys)
            if isOk:
                retXml = TuYouPayLianTongWoV4.XML_OK
            else:
                retXml = TuYouPayLianTongWoV4.XML_ERRO
        else:
            PayHelperV4.callback_error(orderPlatformId, str(hRet) + '|' + str(status), notifys)
            retXml = TuYouPayLianTongWoV4.XML_OK

        return retXml
Exemplo n.º 13
0
 def userSubscribeFailed(cls, param):
     PayHelperV4.callback_error(
         param['platformOrderId'],
         param['errorcode'] + ':' + param['errormsg'], param)
Exemplo n.º 14
0
class TuYouPayHaiMaWanV4(PayBaseV4):
    @payv4_order('haimawan')
    def charge_data(cls, mi):
        chargeinfo = cls.get_charge_info(mi)
        chargeinfo['chargeData'] = {'platformOrderId': chargeinfo['platformOrderId']}
        return cls.return_mo(0, chargeInfo=chargeinfo)

    @payv4_callback('/open/ve/pay/haimawan/callback')
    def doPayHaiMaWanCallback(cls, rpath):
        message = {
            0: '订单未支付',
            1: '订单支付成功',
            2: '请求订单失败',
            3: '订单签名失败',
            4: '订单支付失败',
            5: '其他失败',
        }
        rparam = OrderedDict()
        params = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('TuYouPayHaiMaWan->doHaiMaWanPayCallback params in Requrest is: ', params)

        # 获取回掉参数
        try:
            rparam['notify_time'] = params['notify_time']
            rparam['appid'] = params['appid']
            rparam['out_trade_no'] = params['out_trade_no']
            rparam['total_fee'] = params['total_fee']
            rparam['subject'] = params['subject']
            rparam['body'] = params['body']
            rparam['trade_status'] = params['trade_status']
            strSign = unquote(params['sign'])
        except Exception, e:
            TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback get callback param ERROR!', e)
            return 'fail'

        # 判断支付状态
        status = int(params['trade_status'])
        if status not in message or 1 != status:
            TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback pay failed, status is: ', message[status])
            PayHelperV4.callback_error(params["out_trade_no"], message[status], rparam)
            return 'fail'

        # 验证签名
        keyvalue = TyContext.Configure.get_global_item_json('haimawan_config', {})  # 获取海马玩的appkey
        for value in keyvalue:
            if 0 == cmp(value['appid'], params['appid']):
                appkey = value['appkey']
                break
        else:
            TyContext.ftlog.error('uYouPayHaiMaWan->doHaiMaWanPayCallback get appkey ERROR')
            return 'fail'

        rparam['trade_status'] = rparam['trade_status'] + appkey
        strBeforeSign = urlencode(rparam)
        strAfterSign = md5(strBeforeSign).hexdigest()
        TyContext.ftlog.debug('TuYouPayHaiMaWan->doHaiMaWanPayCallback Before sign: [', strBeforeSign, '] '
                                                                                                       'After sign: [',
                              strAfterSign, ']')
        if 0 != cmp(strSign, strAfterSign):
            TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback veriry sign failed')
            return 'fail'

        # 发货并返回结果
        orderPlatformId = params["out_trade_no"]
        total_fee = float(params["total_fee"])
        PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        TyContext.ftlog.debug('TuYouPayHaiMaWan->doHaiMaWanPayCallback deliver goods successed.')
        return 'success'
Exemplo n.º 15
0
    def doAnZhiCallback(cls, rpath):
        postData = TyContext.RunHttp.get_body_content()
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback original postData is:', postData)

        paramslist = postData.split('&')
        rparam = {}
        for k in paramslist:
            paramdata = k.split('=')
            rparam[paramdata[0]] = paramdata[1]
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback parame list(Before urldecode) is: ',
            rparam)

        for k in rparam.keys():
            rparam[k] = unquote(rparam[k])
        TyContext.ftlog.debug(
            'TuYouPayAnZhi->doAnZhiCallback parame list(After urldecode) is: ',
            rparam)

        if 'data' in rparam and 'appId' in rparam:
            data = rparam['data']
            appId = rparam['appId']
        else:
            TyContext.ftlog.error(
                'TuYouPayAnZhi->doAnZhiCallback ERROR There doesn\'t has data or appId in post data.'
            )
            return 'failed'
        anzhiconfig = TyContext.Configure.get_global_item_json(
            'anzhi_config', {})
        encryptKey = ""
        if anzhiconfig:
            for item in anzhiconfig:
                if 0 == cmp(item['appId'], appId):
                    encryptKey = item['appsecret']
                    break
            else:
                TyContext.ftlog.error(
                    'TuYouPayAnZhi->doAnZhiCallback ERROR Cann\'t find appsecert, appId is: ',
                    appId)
        else:
            TyContext.ftlog.error(
                'TuYouPayAnZhi->doAnZhiCallback ERROR cann\'t find anzhi_config.'
            )
        if not encryptKey:
            charge_key = 'sdk.charge:anzhi:%s' % appId
            encryptKey = TyContext.RedisPayData.execute(
                'HGET', charge_key, 'appSecret')
            TyContext.ftlog.debug('get sdk config from redis,', encryptKey)
        try:
            # 先用base64解码,再采用3des解密
            tripelDes = triple_des(encryptKey.encode('ascii'),
                                   mode=ECB,
                                   padmode=PAD_NORMAL)
            data = tripelDes.decrypt(base64.b64decode(data))
            data = "".join([data.rsplit("}", 1)[0], "}"])
            TyContext.ftlog.debug('TuYouPayAnZhi->doAnZhiCallback Data is: ',
                                  data)
            params = json.loads(data)
            params['third_orderid'] = params['orderId']  # 三方订单号
            orderPlatformId = params['cpInfo']  # 途游订单号
            orderAmount = params['orderAmount']  # 商品金额(分)
            redBagMoney = params['redBagMoney']
            code = int(params['code'])  # 订单状态 成功:1
            ChargeModel.save_third_pay_order_id(orderPlatformId,
                                                params['orderId'])
            TyContext.ftlog.info('TuYouPayAnZhi->doAnZhiCallback params: ',
                                 params, ' orderPlatformId is: ',
                                 orderPlatformId)
        except Exception as e:
            TyContext.ftlog.error('TuYouPayAnZhi->doAnZhiCallback ERROR: ', e)
            return 'success'

        # 安智的同事说,只会出现code==1的情况,这里只是为了以防万一
        if 1 != code:
            TyContext.ftlog.error()
            errinfo = '安智支付失败'
            PayHelperV4.callback_error(orderPlatformId, errinfo, params)

        # 2) orderAmount+redBagMoney 应等于道具金额,金额验证异常请返回”money_error”。
        chargeKey = 'sdk.charge:' + orderPlatformId
        chargeTotal = TyContext.RedisPayData.execute('HGET', chargeKey,
                                                     'chargeTotal')

        anzhiTotal = (float(orderAmount) + float(redBagMoney)) / 100

        if float(chargeTotal) != anzhiTotal:
            return 'money_error'

        PayHelperV4.callback_ok(orderPlatformId, anzhiTotal, params)
        return 'success'
Exemplo n.º 16
0
    def doKuaiYongPingGuoPayCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug(
            'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  rparam',
            rparam)
        '''
        uid = rparam['uid']
        subject = rparam['subject']
        version = rparam['version']
        '''

        thirdId = rparam['orderid']
        platformOrderId = rparam['dealseq']
        encryptData = rparam['notify_data']
        sign = rparam['sign']

        verifySign = ''.join([
            k + '=' + str(rparam[k]) + '&' for k in sorted(rparam.keys())
            if k != 'sign'
        ])
        verifySign = verifySign[0:-1]
        TyContext.ftlog.debug(
            'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  verifySign',
            verifySign)
        # 公钥验签
        if not _verify_with_publickey_pycrypto(verifySign, sign,
                                               _kuaiyongpingguo_pubkey_py):
            TyContext.ftlog.error(
                'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback public verify fail'
            )
            return 'failed'

        # 公钥解密:加载.so文件,python嵌入动态库
        decryptData = rsa_decrypto_with_publickey(encryptData,
                                                  KUAIYONGPINGGUO_PUB_KEY, 1)
        TyContext.ftlog.debug(
            'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  decryptData',
            decryptData)

        # 将dealseq=20130219160809567&fee=0 .01&payresult=0转化为dict结构.
        responseStatus = {}
        attr = decryptData.split('&')
        for param in attr:
            params = param.split('=')
            responseStatus[params[0]] = params[1]
        TyContext.ftlog.debug(
            'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  responseStatus',
            responseStatus)

        rparam['third_orderid'] = thirdId
        rparam['chargeType'] = 'kuaiyongpingguo'
        if 0 == int(responseStatus['payresult']):
            total_fee = int(float(responseStatus['fee']))
            chargeKey = 'sdk.charge:' + platformOrderId
            chargeInfo = TyContext.RedisPayData.execute(
                'HGET', chargeKey, 'charge')
            chargeInfo = json.loads(chargeInfo)
            # 当返回的fee和商品定价不一致时,采用商品本身的价格
            TyContext.ftlog.debug(
                'TuYouPayKuaiYongPingGuo->doKuaiYongPingGuoPayCallback  chargeInfo',
                chargeInfo, chargeInfo['chargeTotal'], total_fee)
            if chargeInfo['chargeTotal'] != total_fee:
                total_fee = chargeInfo['chargeTotal']
            ChargeModel.save_third_pay_order_id(platformOrderId, thirdId)
            PayHelperV4.callback_ok(platformOrderId, total_fee, rparam)
            return 'success'
        else:
            errinfo = '支付失败'
            PayHelperV4.callback_error(platformOrderId, errinfo, rparam)
            return 'failed'
Exemplo n.º 17
0
    def doAiDongManCallback(cls, rpath):
        xmlData = TyContext.RunHttp.getRequestParam('requestData', '')
        xmlroot = ElementTree.fromstring(xmlData)
        TyContext.ftlog.info('doAiDongManCallback rparam xmlData', xmlData)

        params = OrderedDict()

        params['Behavior'] = xmlroot.find('Behavior').text
        params['Trade_status'] = xmlroot.find('Trade_status').text
        params['Trade_no'] = xmlroot.find('Trade_no').text
        params['Buyer_id'] = xmlroot.find('Buyer_id').text
        params['Extension'] = xmlroot.find('Extension').text

        sign = params['Behavior'] + params['Trade_status'] + params[
            'Trade_no'] + params['Buyer_id'] + params['Extension']

        params['Product_id'] = xmlroot.find('Product_id').text
        params['Product_name'] = xmlroot.find('Product_name').text
        params['Price'] = int(float(xmlroot.find('Price').text))
        params['App_id'] = xmlroot.find('App_id').text
        params['sign'] = xmlroot.find('Sign').text.replace(' ', '+')
        params['sign'] = ''.join(params['sign'].split())

        TyContext.ftlog.info('doAiDongManCallback params', params)

        aidongmanconfig = TyContext.Configure.get_global_item_json(
            'aidongmanpay_config', {})
        if aidongmanconfig:
            cls.encryptKey = aidongmanconfig['3des']['encryptKey']

        # 采用3des加密
        padByte = chr(int(8 - len(sign) % 8))
        ivBytes = ''
        ivSource = aidongmanconfig['3des']['iv']
        for i in ivSource:
            ivBytes = ivBytes + chr(int(i))

        tripelDes = triple_des(unhexlify(cls.encryptKey),
                               mode=CBC,
                               pad=padByte,
                               IV=ivBytes,
                               padmode=PAD_NORMAL)
        sign = tripelDes.encrypt(sign)
        sign = base64.b64encode(sign)

        plantformId = params['Extension'][23:]
        TradeNo = xmlroot.find('Trade_no').text

        params['chargeType'] = 'aidongman'
        params['third_orderid'] = params['Trade_no']

        PayHelperV4.set_order_mobile(plantformId, params['Buyer_id'])

        TyContext.ftlog.info('doAiDongManCallback sign', sign, 'params[sign]',
                             params['sign'])

        ResponseBody = ElementTree.Element('ResponseBody')
        Trade_no = ElementTree.SubElement(ResponseBody, 'Trade_no')
        Status = ElementTree.SubElement(ResponseBody, 'Status')
        Trade_no.text = str(TradeNo)
        Status.text = '1'
        mo = ElementTree.tostring(ResponseBody)
        if sign == params['sign']:
            if int(params['Trade_status']) == 0 or int(
                    params['Trade_status']) == 1:
                PayHelperV4.callback_ok(plantformId, float(params['Price']),
                                        params)
                Status.text = '0'
                mo = ElementTree.tostring(ResponseBody)
                TyContext.ftlog.info('doAiDongManCallback->SUCCESS rparams',
                                     params, 'mo', mo)
                return mo
            else:
                errinfo = '爱动漫支付失败'
                PayHelperV4.callback_error(plantformId, errinfo, params)
                TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc',
                                      errinfo, 'rparams', params, 'mo', mo)
                return mo
        else:
            errinfo = '签名校验失败'
            PayHelperV4.callback_error(plantformId, errinfo, params)
            TyContext.ftlog.error('doAiDongManCallback->ERROR, failDesc',
                                  errinfo, 'rparams', params)

        return mo