Example #1
0
    def doMiDaShiPayCallback(cls, rpath):
        # 由于设计到路径和请求方法,验签放到httpgateway里做了,这里只负责发货
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('TuYouPayMiDaShi->doMiDaShiPayCallback rparam: ',
                              rparam)
        if 'payitem' in rparam:
            payitem = rparam['payitem']
            appmeta = payitem.split('*')[0]
            platformOrderId = appmeta
        else:
            return cls.getReturnContent(4, 'payitem')

        if 'appmeta' in rparam:
            appmeta = rparam['appmeta']
            if '*' in appmeta:
                appmeta = appmeta.split('*')[1]
            thirdPayType = appmeta
        else:
            return cls.getReturnContent(4, 'appmeta')

        if 'amt' in rparam:
            total_fee = float(rparam['amt'])
        else:
            return cls.getReturnContent(4, 'amt')

        rparam['sub_paytype'] = thirdPayType
        PayHelperV4.callback_ok(platformOrderId, -1, rparam)
        return cls.getReturnContent(0)
Example #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': ''}
Example #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'
Example #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'
Example #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
         })
Example #6
0
 def doJinliCallback(cls, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('doJinliCallback', rparam)
     try:
         orderPlatformId = rparam['out_order_no']
         total_fee = rparam['deal_price']
     except Exception as e:
         TyContext.ftlog.error('doJinliCallback  ,param err,exception ', e)
         return 'exception in params'
     if not cls._check_sign(rparam):
         TyContext.ftlog.error('doJinliCallback ,check sign error!')
         return 'check sign error!'
     PayHelperV4.callback_ok(orderPlatformId, float(total_fee), rparam)
     return 'success'
Example #7
0
        def incr_user_diamond(orderId, amount):
            chargeKey = 'sdk.charge:' + platformOrderId
            chargeInfo = TyContext.RedisPayData.execute(
                'HMGET', chargeKey, 'charge')
            chargeInfo = TyContext.strutil.loads(chargeInfo, decodeutf8=True)
            userId = chargeInfo['uid']
            appId = chargeInfo.get('appId', "")
            UniversalUser().increase_user_charge_data(
                chargeInfo['uid'], chargeInfo['appId'], chargeInfo['clientId'],
                amount, chargeInfo.get('chargeType', 'na'))

            userKey = 'user:'******'charge.callback')

            # 增加用户的充值次数
            PayHelperV4.incr_paycount(userId)

            # 增加用户总体支付的数量
            TyContext.RedisUser.execute(userId, 'HINCRBYFLOAT', userKey,
                                        'chargeTotal', amount)

            # 增加用户的钻石购买的数据
            # RiskControlV4(userId).record_diamond(diamondId)

            if not is_orderId_valid(orderId, rparams, amount):
                return False
            incr_user_diamond(orderId, amount)
            PayHelperV4.notify_game_server_on_diamond_change({
                'appId':
                chargeInfo['appId'],
                'clientId':
                chargeInfo['clientId'],
                'userId':
                chargeInfo['uid'],
                'buttonId':
                chargeInfo['diamondId'],
                'diamonds':
                chargeInfo['chargedDiamonds'],
                'rmbs':
                amount
            })
            return True
Example #8
0
 def doCallback(cls, rpath):
     rparam = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('TuYouNow callback with: %s' % rparam)
     payNowAppId = rparam['appId']
     borui_paykeys = TyContext.Configure.get_global_item_json('borui_paykeys', {})
     try:
         payNowInfo = borui_paykeys[payNowAppId]
     except KeyError:
         payNowInfo = borui_paykeys
     appSecret = payNowInfo['appSecret']
     ## check signature
     keys = filter(lambda k: k not in ['signType', 'signature', ], rparam.keys())
     keys.sort()
     text = '&'.join(['%s=%s' % (k, rparam[k]) for k in keys])
     text = urllib.unquote(text)  # 转为utf-8编码
     s1 = hashlib.md5(appSecret).hexdigest()
     s2 = hashlib.md5('%s&%s' % (text, s1)).hexdigest()
     if rparam['signature'] != s2:
         TyContext.ftlog.error('TuYouNow->ERROR, sign error !! rparam=', rparam)
         return 'N'
     # do charge
     tradeStatus = rparam['tradeStatus']
     orderPlatformId = rparam['mhtOrderNo']
     if tradeStatus == 'A001':
         if PayHelperV4.callback_ok(orderPlatformId, -1, rparam):
             return 'Y'
     return 'N'
Example #9
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'
Example #10
0
    def doCallback(self, rpath):
        rparams = TyContext.RunHttp.convertArgsToDict()
        order_id = rparams['dealseq']
        TyContext.ftlog.debug('TuYouPayJusdkV4->doCallback,rparams=', rparams)

        if not self.verify_sign(rparams):
            return 'failed'

        notify_data = rparams['notify_data']
        data = rsa_decrypto_with_publickey(notify_data, JUSDK_PUB_KEY, 1)
        TyContext.ftlog.debug('TuYouPayJusdkV4 -> de rsa notify data = ', data)
        notify_dict = dict((l.split('=') for l in data.split('&')))

        if notify_dict.get('dealseq') != rparams.get('dealseq'):
            TyContext.ftlog.debug('TuYouPayJusdkV4 -> dealseq Different')
            return 'failed'

        if int(notify_dict.get('payresult')) != 0:
            TyContext.ftlog.debug('TuYouPayJusdkV4 -> payresult Different')
            return 'failed'

        is_ok = PayHelperV4.callback_ok(order_id, -1, rparams)
        if is_ok:
            return 'success'
        else:
            TyContext.ftlog.debug('TuYouPayJusdkV4 -> not ok')
            return 'failed'
Example #11
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
Example #12
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)
Example #13
0
    def doJiuxiuCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.info('doJiuxiuCallback start rparam=', rparam)

        try:
            orderPlatformId = rparam['orderPlatformId']
            total_fee = rparam['amount']
            sign = rparam['sign']
            thirdorderid = rparam['orderId']
        except:
            TyContext.ftlog.error('doJiuxiuCallback->ERROR, param error !! rparam=', rparam)
            return 'fail'
        # 签名校验
        if not cls.__verify_sign(rparam, sign):
            TyContext.ftlog.error('TuYouPayJiuxiu.doJiuxiuCallback verify error !!')
            return 'fail'

        rparam['chargeType'] = '9xiu'
        rparam['third_orderid'] = thirdorderid
        total_fee = float(total_fee)
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return 'success'
        else:
            return 'fail'
Example #14
0
    def __check_callback(cls, rparam, appKey):
        signQuery = rparam['signature']
        del rparam['signature']

        sk = rparam.keys()
        sk.sort()
        queryStr = ""
        for k in sk:
            queryStr = queryStr + str(k) + '=' + str(rparam[k]) + '&'
        signData = queryStr[:-1]
        TyContext.ftlog.info('doXiaomiCallback->queryStr=', queryStr,
                             'signData=', signData)

        a = hmac.new(appKey, signData, sha1)
        sign = a.digest().encode('hex').upper()
        if signQuery.upper() != sign:
            TyContext.ftlog.info(
                'doXiaomiCallback->ERROR, sign error !! signQuery=', signQuery,
                'sign=', sign)
            return '{"errcode":1525}'

        orderPlatformId = rparam['cpOrderId']

        total_fee = float(rparam['payFee']) / 100
        ChargeModel.save_third_pay_order_id(orderPlatformId,
                                            rparam.get('orderId'))
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        if isOk:
            return '{"errcode":200}'
        else:
            return '{"errcode":1506}'
Example #15
0
 def charge_data(self, mi):
     chargeInfo = self.get_charge_info(mi)
     chargeInfo['chargeData'] = {
         'platformOrderId': chargeInfo['platformOrderId'],
         'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/bdgame/callback'
     }
     return self.return_mo(0, chargeInfo=chargeInfo)
Example #16
0
 def charge_data_direct(self, mi):
     chargeInfo = self.get_charge_info(mi)
     chargeInfo['chargeData'] = {
         'platformOrderId': chargeInfo['platformOrderId'],
         'notifyUrl': PayHelperV4.getSdkDomain() + '/v1/pay/ysdk/callback',
         'paymentUrl': self.getPaymentUrl(mi, chargeInfo)
     }
     return self.return_mo(0, chargeInfo=chargeInfo)
Example #17
0
 def charge_data(cls, mi):
     chargeinfo = cls.get_charge_info(mi)
     notifyurl = PayHelperV4.getSdkDomain() + '/v1/pay/uc/callback'
     TyContext.ftlog.debug('TuYouPayUc charge_data callback url=',
                           notifyurl)
     paydata = cls.generate_sign(mi, chargeinfo)
     chargeinfo['chargeData'] = {'notifyUrl': notifyurl, 'payData': paydata}
     return cls.return_mo(0, chargeInfo=chargeinfo)
Example #18
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'
Example #19
0
    def notifyGameServerDelivery(self, rparam):
        TyContext.ftlog.debug(
            'TuYouPayHuiYuanBaoYue->notifyGameServerDelivery User[%s, mobile:%s, orderid:%s] '
            'subscribe monthly vip!' %
            (rparam['userId'], rparam['mobile'], rparam['platformOrderId']))
        TyContext.RedisUser.execute(rparam['userId'], 'HMSET',
                                    'user:'******'userId'],
                                    'isYouyifuVipUser', '1', 'youyifuVipMsg',
                                    rparam['message'])

        # 这个参数用来告诉游戏服务器,这个商品是一件会员包月商品
        rparam['isYouyifuMonthVip'] = '1'
        PayHelperV4.callback_ok(rparam['platformOrderId'], rparam['total_fee'],
                                rparam)
        self.changeUserInfoStatus('vipuser:'******'mobile'], 'success')
        TyContext.ftlog.info(
            'TuYouPayHuiYuanBaoYue->notifyGameServerDelivery %s has subscribed Monthly VIP.'
            % self.getLogUserInfo(rparam))
Example #20
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'
Example #21
0
    def _pay_request(cls, chargeInfo, mi, mo, bankIndex):

        rparam = cls._get_pay_requset_params(chargeInfo, mi, mo, bankIndex)
        if not rparam:
            return PayConst.CHARGE_STATE_REQUEST_RETRY

        purl = cls.pay_request_url + PayHelperV4.createLinkString4Get(rparam)

        TyContext.ftlog.info(cls.__name__, '_pay_request->return bankIndex=', bankIndex, 'purl=', purl)
        response, purl = TyContext.WebPage.webget(purl)
        TyContext.ftlog.info(cls.__name__, '_pay_request->return bankIndex=', bankIndex, 'purl=', purl, 'response=',
                             response)

        if response == None:
            response = ''
        else:
            response = response.strip()

        mo.setResult('payData', '')
        if response[0:7] == 'success':
            return PayConst.CHARGE_STATE_REQUEST
        elif response[0] == '{':
            try:
                jsondatas = json.loads(response)
                if jsondatas['code'] == 'success':
                    mo.setResult('payData', jsondatas['paydata'])
                else:
                    if 'info' in jsondatas:
                        errInfo = jsondatas['info']
                        mo.setResult('info', jsondatas['info'])
                    else:
                        errInfo = '360充值请求错误'
                        raise PayErrorV4(1, errInfo)
                    mo.setError(1, errInfo)
                return PayConst.CHARGE_STATE_REQUEST
            except:
                pass

        i = response.find('<h2>[')
        if i > 0:
            j = response.find('</h2>', i)
            errInfo = response[i + 4: j]
            errInfo = errInfo.decode('gb2312')
            mo.setError(1, errInfo)
            return PayConst.CHARGE_STATE_REQUEST_IGNORE
        else:
            try:
                errInfo = response.decode('gb2312')
            except:
                errInfo = response
            if errInfo.find('failed:') == 0:
                errInfo = errInfo[7:]
                raise PayErrorV4(1, errInfo)
            mo.setError(1, errInfo)
            return PayConst.CHARGE_STATE_ERROR_REQUEST
Example #22
0
 def doCallback(cls, rpath):
     rparams = TyContext.RunHttp.convertArgsToDict()
     platformOrderId = rparams['extend']
     TyContext.ftlog.debug('TuYouPayLizi->doCallback, rparams=', rparams)
     if not cls.verify_sign(rparams):
         return 'failure'
     isOk = PayHelperV4.callback_ok(platformOrderId, -1, rparams)
     if isOk:
         return 'success'
     else:
         return 'failure'
Example #23
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'
Example #24
0
    def doMomoCallback(cls, rpath):
        rparam = TyContext.RunHttp.convertArgsToDict()
        momo_paykeys = TyContext.Configure.get_global_item_json(
            'momo_paykeys', {})
        TyContext.ftlog.debug('doMomoCallback->rparam=', rparam)
        try:
            orderPlatformId = rparam['app_trade_no']
            trade_no = rparam['trade_no']
            appid = rparam['appid']
            postparams = {}
            postparams['appid'] = appid
            postparams['sign'] = rparam['sign']
            postparams['trade_no'] = trade_no
            postparams['app_secret'] = momo_paykeys[str(appid)]
            response, _ = TyContext.WebPage.webget(cls.checkorder_url,
                                                   postdata_=postparams)
            response = json.loads(response)
            if int(response['ec']) != 0:
                TyContext.ftlog.error(
                    'doMomoCallback->ERROR, check momo order fail, response=',
                    response)
                return 'fail'
        except:
            TyContext.ftlog.exception()
            TyContext.ftlog.error('doMomoCallback->ERROR, rparam=', rparam)
            return 'fail'

        if int(rparam['currency_type']) == 0:
            total_fee = float(rparam['total_fee'])
        else:
            total_fee = float(rparam['total_fee']) / 10
        rparam['third_orderid'] = trade_no
        rparam['chargeType'] = 'momo'
        # channel_type   string 支付渠道 0-苹果 1-支付宝 2-短信 3-陌陌币 4-网页版
        rparam['sub_paytype'] = rparam['channel_type']
        try:
            chargeKey = 'sdk.charge:' + orderPlatformId
            chargeInfo = TyContext.RedisPayData.execute(
                'HGET', chargeKey, 'charge')
            if chargeInfo == None:
                chargeInfo = {}
            else:
                chargeInfo = TyContext.strutil.loads(chargeInfo,
                                                     decodeutf8=True)
            chargeInfo['sub_paytype'] = rparam['channel_type']
            TyContext.RedisPayData.execute('HSET', chargeKey, 'charge',
                                           json.dumps(chargeInfo))
        except:
            TyContext.ftlog.error()

        ChargeModel.save_third_pay_order_id(orderPlatformId, trade_no)
        isOk = PayHelperV4.callback_ok(orderPlatformId, total_fee, rparam)
        return 'success'
Example #25
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}
Example #26
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
Example #27
0
    def doTongBuTuiPayCallback(cls, rpath):
        success = json.dumps({'status': 'success'})
        fail = json.dumps({'status': 'fail'})
        params = TyContext.RunHttp.convertArgsToDict()
        TyContext.ftlog.debug('TuYouPayTongBuTui->doPayTongBuTuiCallback Request Params: ', params)
        rparam = OrderedDict()
        try:
            rparam['source'] = params['source']
            rparam['trade_no'] = params['trade_no']
            rparam['amount'] = params['amount']
            rparam['partner'] = params['partner']
            rparam['paydes'] = params['paydes']
            rparam['debug'] = params['debug']
            rparam['tborder'] = params['tborder']
            rparam['sign'] = params['sign']
        except Exception as e:
            TyContext.ftlog.error('TuYouPayTongBuTui->doPayTongBuTuiCallback Get Params ERROR. ', e)
            return fail
        # appid = 150918, appkey = rBODan#VKXuF8He2B4Olyn@KhXu8RG2q
        # 获取key,根据partner
        keyvalue = TyContext.Configure.get_global_item_json('tongbutui_config', {})  # 获取同步推的key
        for value in keyvalue:
            if 0 == cmp(value['appid'], params['partner']):
                appkey = value['appkey']
                break
        else:
            TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback get appkey ERROR')
            return 'fail'
        rparam['key'] = appkey
        sign = cls.generate_verifysign(rparam)
        if 0 != cmp(sign, rparam['sign']):
            TyContext.ftlog.error('TuYouPayHaiMaWan->doHaiMaWanPayCallback verify sign ERROR.'
                                  'sign: [%s], verify_sign: [%s]' % (rparam['sign'], sign))
            return fail

        # 通知游戏服发货
        rparam['third_orderid'] = rparam['tborder']
        ChargeModel.save_third_pay_order_id(rparam['trade_no'], rparam['tborder'])
        PayHelperV4.callback_ok(rparam['trade_no'], float(rparam['amount']) / 100, rparam)
        return success
Example #28
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'
Example #29
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        orderPlatformId = chargeinfo['platformOrderId']
        vivo_appId = mi.getParamStr('vivo_appId')
        appinfoconfig = TyContext.Configure.get_global_item_json('vivo_appkeys', {})
        appdata = appinfoconfig.get(str(vivo_appId), None)
        if not appdata:
            config = GameItemConfigure(chargeinfo['appId']).get_game_channel_configure_by_package('vivo', chargeinfo[
                'packageName'],
                                                                                                  chargeinfo[
                                                                                                      'mainChannel'])
            appdata = {
                'cpid': config.get('vivo_cpid'),
                'appid': config.get('vivo_appId'),
                'cpkey': config.get('vivo_cpkey'),
            }
        cpkey = appdata['cpkey']

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

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

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

        try:
            datas = json.loads(response)
            if int(datas['respCode']) != 200:
                raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url response ERROR, rspmsg=',
                                 datas['respMsg'])
            if not self.__verify_sign(datas, cpkey, datas['signature']):
                raise PayErrorV4(1, 'vivo 验签失败!')
            chargeinfo['chargeData'] = {'vivoOrder': datas['orderNumber'],
                                        'vivoSignature': datas['accessKey']}
            return self.return_mo(0, chargeInfo=chargeinfo)
        except:
            raise PayErrorV4(1, 'TuYouPayVivo charge_data->order push url return ERROR, response=', response)
Example #30
0
 def _get_pay_requset_params(cls, chargeInfo, mi, mo, bankIndex):
     cls.reqSeq += 1
     rparam = {}
     # 如果同一个事务,发送第一次请求,失败,360认为此事务已被占用,必须使用不同的事务ID
     rparam['mer_trade_code'] = chargeInfo['platformOrderId'] + '-' + str(cls.reqSeq)
     rparam['rec_amount'] = float(chargeInfo['chargeTotal'])
     rparam['product_name'] = chargeInfo['buttonName']
     rparam['mer_code'] = cls.merchant_code
     rparam['trans_service'] = cls.trans_service
     rparam['input_cha'] = cls.input_cha
     rparam['sign_type'] = cls.sign_type
     rparam['notify_url'] = PayHelperV4.getSdkDomain() + cls.notify_url
     rparam['return_url'] = cls.no_notify_url
     rparam['bank_code'] = cls.bank_code[bankIndex]
     if bankIndex in (1, 2, 3):
         if not PayHelperV4.checkCardParam(mi, mo):
             return None
         rparam['card_amount'] = mi.getParamInt('card_amount')
         rparam['card_number'] = mi.getParamStr('card_number')
         rparam['card_pwd'] = mi.getParamStr('card_pwd')
     rparam['sign'] = cls.__build_my_sign__(rparam)
     return rparam