예제 #1
0
 def get_sign_and_pay_params(self, chargeInfo):
     sParaTemp = {}
     sParaTemp["service"] = "alipay.acquire.page.createandpay"
     appId = chargeInfo['appId']
     packageName = chargeInfo.get('packageName')
     partnerParam = self.getPartnerParam(appId=appId,
                                         packageName=packageName)
     if not partnerParam:
         sParaTemp["partner"] = self.PARTNER
     else:
         sParaTemp["partner"] = partnerParam['partnerId']
     external_user_id = '%s@%s' % (chargeInfo['userId'],
                                   chargeInfo['appId'])
     # sParaTemp["seller_id"] =  self.SELLER_ID
     sParaTemp["_input_charset"] = 'utf-8'
     sParaTemp['out_trade_no'] = chargeInfo['platformOrderId']
     sParaTemp['subject'] = chargeInfo['buttonName']
     sParaTemp['product_code'] = 'GENERAL_WITHHOLDING'
     sParaTemp['integration_type'] = 'ALIAPP'
     sParaTemp[
         'agreement_sign_parameters'] = '{"productCode":"GENERAL_WITHHOLDING_P","signValidityPeriod":"12m","externalUserId":"%s", "notifyUrl":"%s"}' % (
             external_user_id, PayHelper.getSdkDomain() +
             '/open/gateway/alifree/sign_callback')
     sParaTemp['total_fee'] = chargeInfo['chargeTotal']
     ### 签约参数
     ###
     sParaTemp["return_url"] = chargeInfo['return_url']
     sParaTemp["request_from_url"] = chargeInfo['return_url']
     sParaTemp["notify_url"] = PayHelper.getSdkDomain(
     ) + '/open/gateway/alifree/order_callback'
     sParaTemp['external_user_id'] = external_user_id
     sParaTemp['sign'] = self.calcSignMD5(**sParaTemp)
     sParaTemp['sign_type'] = 'MD5'
     return sParaTemp
예제 #2
0
 def mock(cls, params):
     ''' args: paytype, pay version (v1/v3), platformOrderId, price,
     expect (expected result) '''
     postparams = {}
     postparams['r0_Cmd'] = 'ChargeCardDirect'
     postparams['pc_BalanceAct'] = ''
     postparams['p5_CardNo'] = '14128110398186699'
     postparams['p2_Order'] = params['platformOrderId']
     postparams['p9_MP'] = ''
     postparams['pb_BalanceAmt'] = ''
     postparams['p1_MerId'] = '10012097952'
     failcallback = params.get('failcallback', 0)
     if failcallback:
         postparams['r1_Code'] = '0'
         postparams['p8_cardStatus'] = '7'
     else:
         postparams['r1_Code'] = '1'
         postparams['p8_cardStatus'] = '0'
     postparams['p4_FrpId'] = 'SZX'
     postparams['r2_TrxId'] = '315261293636892I'
     postparams['p7_realAmount'] = str(float(params['price']))
     postparams['p3_Amt'] = str(float(params['price']))
     postparams['p6_confirmAmount'] = str(float(params['price']))
     postparams['hmac'] = cls.getHmacString(postparams)
     cburl = PayHelper.getSdkDomain() + '/v1/pay/yee/callback'
     # use GET instead of POST for now
     response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
     return 'yee.card ok'
예제 #3
0
    def charge_data(cls, mi):
        chargeinfo = cls.get_charge_info(mi)
        appId = chargeinfo['appId']
        if 'payInfo' in chargeinfo and chargeinfo['payInfo']:
            payInfo = chargeinfo['payInfo']
            if 'appid' in payInfo and payInfo['appid']['lenovo']:
                appId = payInfo['appid']['lenovo']
        diamondId = chargeinfo['buttonId']
        prodconfig = TyContext.Configure.get_global_item_json(
            'lenovo_prodids', {})
        try:
            data = prodconfig[str(appId)].get(str(diamondId), {})
            payCode = data['feecode']
        except KeyError:
            config = GameItemConfigure(
                chargeinfo['appId']).get_game_channel_configure_by_package(
                    'lenovo', chargeinfo['packageName'],
                    chargeinfo['mainChannel'])
            prodconfig = config.get('products', {})
            diamondList = filter(lambda x: diamondId in x.values(), prodconfig)
            diamondConfig = diamondList[0]
            payCode = diamondConfig['code']

        chargeinfo['chargeData'] = {
            'msgOrderCode': payCode,
            'waresid': payCode,
            'cpprivateinfo': chargeinfo['platformOrderId'],
            'notifyUrl':
            PayHelper.getSdkDomain() + '/open/ve/pay/lenovo/callback'
        }
        return cls.return_mo(0, chargeInfo=chargeinfo)
예제 #4
0
    def _getPayRequsetParams(self, datas, bankIndex):
        httpdomain = PayHelper.getSdkDomain()
        rparam = {}
        # 游戏分配的订单号,这个必须是没用到过的,如果用过的trade_code,会返回-1004错误
        rparam['mer_trade_code'] = datas['orderPlatformId']
        # 商户发送的支付金额
        rparam['rec_amount'] = int(datas['orderPrice'])
        #         if TuYouPay360.DEBUG360 :
        #             rparam['rec_amount'] = 0.01

        rparam['product_name'] = 'TYB' + str(rparam['rec_amount'] * CHARGE_RATE_RMB)
        # 商户ID
        rparam['mer_code'] = TuYouPay360.merchant_code
        rparam['trans_service'] = TuYouPay360.trans_service
        rparam['input_cha'] = TuYouPay360.input_cha
        rparam['sign_type'] = TuYouPay360.sign_type
        rparam['notify_url'] = httpdomain + TuYouPay360.notify_url
        rparam['return_url'] = TuYouPay360.no_notify_url
        rparam['bank_code'] = TuYouPay360.bank_code[bankIndex]  # "MOBILE_ZFB",子支付的区分 MOBILE_ZFB 支付宝
        if bankIndex in (1, 2, 3):
            rparam['card_amount'] = datas['card_amount']
            rparam['card_number'] = datas['card_number']
            rparam['card_pwd'] = datas['card_pwd']
        rparam['sign'] = self.buildMySign(rparam)

        TyContext.ftlog.info('TuYouPay360->params=', rparam)
        return rparam
예제 #5
0
    def charge_data(cls, chargeinfo):
        appId = str(chargeinfo['appId'])
        clientId = str(chargeinfo['clientId'])
        if 'payInfo' in chargeinfo and chargeinfo['payInfo']:
            payInfo = chargeinfo['payInfo']
            if 'appid' in payInfo and payInfo['appid']['huawei']:
                clientId = payInfo['appid']['huawei']
        huawei_config = TyContext.Configure.get_global_item_json('huawei_config', {})
        hwapps = huawei_config.get(clientId, None)
        if hwapps:
            userName = hwapps['userName']  # 必填 不参与签名
            userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = hwapps['hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        else:
            raise Exception('TuYouPayHuaWei can not find huawei config of clientId=' + clientId)
        amount = '%.2f' % float(chargeinfo[
                                    'chargeTotal'])  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = chargeinfo['diamondName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = chargeinfo['platformOrderId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = chargeinfo['diamondName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {'userID': userID,
                  'applicationID': applicationID,
                  'amount': amount,
                  'productName': productName,
                  'requestId': requestId,
                  'productDesc': productDesc,
                  }
        sign = cls.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain() + '/v1/pay/huawei/callback'
        chargeinfo['chargeData'] = rparam
예제 #6
0
파일: payhuawei.py 프로젝트: lordsky/hall0
    def doBuyStraight(cls, userId, params, mo):
        appId = str(params['appId'])
        hwapps = TuyouPayHuaWei.HWAPPS[appId]

        userName = hwapps['userName']  # 必填 不参与签名
        userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
        applicationID = hwapps['hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        amount = '%d.00' % int(
            params['orderPrice'])  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = params['orderName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = params['orderPlatformId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = params['orderName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {'userID': userID,
                  'applicationID': applicationID,
                  'amount': amount,
                  'productName': productName,
                  'requestId': requestId,
                  'productDesc': productDesc,
                  }
        sign = cls.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain() + '/v1/pay/huawei/callback'
        mo.setResult('payData', rparam)
        pass
예제 #7
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId,
        expect (expected result) '''

        failcallback = params.get('failcallback', 0)
        if failcallback:
            trade_status = 'TRADE_CLOSED'
        else:
            trade_status = 'TRADE_FINISHED'
        cburl = PayHelper.getSdkDomain() + '/v1/pay/alipay/callback'
        xmldata = cls.xmlrequest_template.format(
            platformOrderId=params['platformOrderId'],
            price=float(params['price']),
            status=trade_status,
        )
        postparams = {}
        postparams['notify_data'] = xmldata
        postparams['sign'] = cls.__calc_sign('notify_data=' + xmldata)
        postparams['sign_type'] = "RSA"
        postparams['mock'] = "true"
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl,
                                               postdata_=postparams,
                                               method_='POST')
        return 'tuyou ali ok'
예제 #8
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, smstext,
        expect (expected result) '''

        paytype = params['paytype']
        smstext = params['smstext']
        payCode = smstext
        channelId = 1
        appId = payCode[:12]
        appKey = cls.get_app_key(appId)
        params['payCode'] = payCode
        params['appId'] = payCode[:12]
        params['appKey'] = appKey
        params['channelId'] = channelId
        failcallback = params.get('failcallback', 0)
        if failcallback:
            params['orderId'] = cls.fail_orderid
        else:
            params['orderId'] = cls.orderid
        cburl = PayHelper.getSdkDomain() + '/v1/pay/ydmm/callback'
        xmldata = cls.xmlrequest_template.format(
            orderId=params['orderId'],
            appId=params['appId'],
            payCode=params['payCode'],
            totalPrice=params['price'],
            channelId=params['channelId'],
            platformOrderId=params['platformOrderId'],
            sign=cls.__calc_sign(params))
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl,
                                               postdata_=xmldata,
                                               method_='GET')
        return 'ydmm ok'
예제 #9
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, price,
        expect (expected result) '''

        failcallback = params.get('failcallback', 0)
        postparams = {}
        postparams['method'] = 'check'
        postparams['cp_order_id'] = params['platformOrderId']
        postparams['correlator'] = 'tuyoomock'
        postparams['order_time'] = '20130619144435'
        postparams['sign'] = cls.__calc_check_sign(postparams)
        cburl = PayHelper.getSdkDomain(
        ) + '/v1/pay/aiyouxi/callback/dizhu/tyhall'
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        xmlroot = ElementTree.fromstring(response)
        if_pay = xmlroot.find('if_pay').text
        if int(if_pay) == 0:
            postparams['method'] = 'callback'
            postparams['pay_type'] = 'smsPay'
            if failcallback:
                postparams['result_code'] = '01'
            else:
                postparams['result_code'] = '00'
            postparams['fee'] = params['price']
            postparams['sign'] = cls.__calc_callback_sign(postparams)
            response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        else:
            TyContext.ftlog.info(
                'MockAigame.__check_callback->ERROR, response=', response)
        return 'aigame ok'
예제 #10
0
파일: paymo9.py 프로젝트: lordsky/hall0
    def doPayRequestMo9(cls, params):
        mo = TyContext.Cls_MsgPack()
        mo9appId = params['mo9appId']
        mo9config = TyContext.Configure.get_global_item_json('mo9_config', {})
        config = mo9config.get(str(mo9appId), None)
        notifyurl = PayHelper.getSdkDomain() + '/v1/pay/mo9/callback'
        if config:
            mo9account = str(config['account'])
            mo9key = str(config['paykey'])
        else:
            raise Exception(
                'can not find mo9pay config info define of mo9appId=' +
                str(mo9appId))
        paydata = {
            'pay_to_email': mo9account,
            'version': '2.1',
            'return_url': cls.return_url,
            'notify_url': notifyurl,
            'invoice': params['orderPlatformId'],
            'payer_id': str(params['userId']),
            'lc': 'CN',
            'amount': str(float(params['orderPrice'])),
            'currency': 'CNY',
            'item_name': params['orderName'],
            'app_id': mo9appId,
        }
        paydata['sign'] = cls.__cal_sign(paydata, mo9key)
        urlparams = '&'.join(k + "=" + urllib.quote(paydata[k].encode('utf-8'))
                             for k in sorted(paydata.keys()))
        openUrl = cls.pay_url + urlparams
        payData = {'openurl': openUrl}

        mo.setResult('code', 0)
        mo.setResult('payData', payData)
        return mo
예제 #11
0
파일: pay360sns.py 프로젝트: lordsky/hall0
    def doBuyStraight(self, userId, params, mo):
        TyContext.RunHttp.getRequestParamJs(params, '360snscode', '')
        snscode = params['360snscode']
        clientId = params['clientId']
        appId = params['appId']
        client_id, client_secret = self.get_360_app_info(appId, clientId)

        TyContext.ftlog.info('TuYouPay360SNS->doBuyStraight appId=', appId,
                             'clientId=', clientId, 'snscode=', snscode,
                             'app_client_id=', client_id, 'app_client_secret',
                             client_secret)

        tokenurl = self.URL_ACCSEE_360PAY % (snscode, client_id, client_secret)
        response, tokenurl = TyContext.WebPage.webget(tokenurl)
        TyContext.ftlog.info('TuYouPay360SNS->doBuyStraight->snscode=',
                             snscode, 'response=', response)

        error_info = None
        response_json = None
        try:
            response_json = json.loads(response)
        except:
            response_json = {}
            error_info = {
                'error_code': -1,
                'error_msg': "360返回值错误",
                'content': str(response)
            }

        access_token = response_json.get('access_token', '')
        expires_in = response_json.get('expires_in', '')
        scope = response_json.get('scope', '')
        refresh_token = response_json.get('refresh_token', '')

        if access_token == '':
            if error_info == None:
                error_info = response_json

        if error_info == None:
            error_info = {'error_code': 0, 'error_msg': "OK"}

        from tysdk.entity.paythird.helper import PayHelper
        notify_uri = PayHelper.getSdkDomain() + '/v1/pay/360sns/callback'
        payData = {
            'access_token': access_token,
            'expires_in': expires_in,
            'scope': scope,
            'refresh_token': refresh_token,
            'error_info': error_info,
            'notify_uri': notify_uri
        }

        params['payData'] = payData
        mo.setResult('payData', payData)
        pass
예제 #12
0
    def _get_prepayid(cls, params, token, wxappId, wxpaySignKey, partnerId,
                      partnerKey):
        prepayUrl = cls.prepay_url + '?access_token=' + token
        orderPlatformId = params['orderPlatformId']
        notifyurl = PayHelper.getSdkDomain() + '/v1/pay/wxpay/callback'
        rparam = {}
        rparam['bank_type'] = 'WX'
        rparam['body'] = params['orderName']
        rparam['partner'] = partnerId
        rparam['out_trade_no'] = orderPlatformId
        rparam['total_fee'] = str(int(params['orderPrice']) * 100)
        rparam['fee_type'] = '1'
        rparam['notify_url'] = notifyurl
        rparam['spbill_create_ip'] = TyContext.RunHttp.get_client_ip()
        rparam['input_charset'] = 'UTF-8'
        cal_str = '&'.join(
            k + "=" + rparam[k]
            for k in sorted(rparam.keys())) + '&key=' + partnerKey
        signValue = md5(cal_str.encode('utf-8')).hexdigest().upper()
        packageValue = '&'.join(k + "=" + urllib.quote(rparam[k].encode('utf-8')) for k in sorted(rparam.keys())) \
                       + "&sign=" + signValue

        postparams = {}
        postparams['appid'] = wxappId
        postparams['appkey'] = wxpaySignKey
        postparams['traceid'] = orderPlatformId
        postparams['noncestr'] = md5(str(random.randint(0, 10000))).hexdigest()
        postparams['package'] = packageValue
        postparams['timestamp'] = str(int(time.time()))
        sign_str = '&'.join(k + "=" + postparams[k]
                            for k in sorted(postparams.keys()))
        app_signature = sha1(sign_str).hexdigest()
        postparams['app_signature'] = app_signature
        postparams['sign_method'] = 'sha1'
        del postparams['appkey']
        postjson = json.dumps(postparams, ensure_ascii=False)
        response, _ = TyContext.WebPage.webget(prepayUrl, postdata_=postjson)
        response = json.loads(response)
        if 'prepayid' in response.keys() and response['prepayid']:
            payData = {}
            payData['appid'] = wxappId
            payData['appkey'] = wxpaySignKey
            payData['prepayid'] = response['prepayid']
            payData['noncestr'] = postparams['noncestr']
            payData['package'] = 'Sign=WXpay'
            payData['partnerid'] = partnerId
            payData['timestamp'] = postparams['timestamp']
            sign_str = '&'.join(k + "=" + payData[k]
                                for k in sorted(payData.keys()))
            sign = sha1(sign_str).hexdigest()
            payData['sign'] = sign
            return payData
        else:
            raise Exception('can not get wxpay prepayid  of wxappId=' +
                            wxappId)
예제 #13
0
파일: payyouku.py 프로젝트: lordsky/hall0
 def charge_data(self, chargeinfo):
     buttonId = chargeinfo['buttonId']
     amount = str(int(float(chargeinfo['chargeTotal']) * 100))
     prodName = chargeinfo['buttonName']
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     chargeinfo['chargeData'] = {
         'amount': amount,
         'productId': buttonId,
         'productName': prodName,
         'notifyUrl': notifyurl
     }
예제 #14
0
 def __calc_callback_sign(cls, rparam):
     paykey_dict = TyContext.Configure.get_global_item_json('youku_paykeys', {})
     paykey = str(paykey_dict[rparam['passthrough']])
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     sorted_args = [('apporderID', rparam['apporderID']),
                    ('price', rparam['price']), ('uid', rparam['uid'])]
     encoded_args = urllib.urlencode(sorted_args)
     check_str = notifyurl + '?' + encoded_args
     check_sign = hmac.new(paykey)
     check_sign.update(check_str)
     digest = check_sign.hexdigest()
     return digest
예제 #15
0
    def charge_data(self, mi):
        chargeinfo = self.get_charge_info(mi)
        appId = str(chargeinfo['appId'])
        huawei_appId = mi.getParamStr('huaWei_appId')
        huawei_config = TyContext.Configure.get_global_item_json(
            'huawei_config', {})
        try:
            hwapps = huawei_config.get(huawei_appId, None)
            userName = hwapps['userName']  # 必填 不参与签名
            userID = hwapps['pay_id']  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = hwapps[
                'hw_appid']  # String    应用ID。 在开发者联盟上获取的APP ID    必填
        except KeyError:
            config = GameItemConfigure(
                appId).get_game_channel_configure_by_package(
                    'huawei', chargeinfo['packageName'],
                    chargeinfo['mainChannle'])
            userName = config.get('userName')  # 必填 不参与签名
            userID = config.get(
                'huaWei_payId')  # String    支付ID。 在开发者联盟上获取的支付 ID    必填
            applicationID = config.get(
                'huaWei_appId')  # String    应用ID。 在开发者联盟上获取的APP ID    必填
            hwapps = {
                'pay_ras_pub_key': config.get('huaWei_publicKey'),
                'pay_ras_privat_key': config.get('huaWei_privateKey')
            }
        amount = '%.2f' % float(
            chargeinfo['chargeTotal']
        )  # String    商品所要支付金额。格式为:元.角分,最小金额为分,保留到小数点后两位。例如:20.00,此金额将会在支付时显示给用户确认),     必填
        productName = chargeinfo[
            'diamondName']  # String(50)    商品名称。此名称将会在支付时显示给用户确认   必填
        requestId = chargeinfo[
            'platformOrderId']  # String(30)    开发者支付订单号。注:最长30字节。其值由开发者定义生成,用于标识一次支付请求,每次请求需唯一,不可重复。
        productDesc = chargeinfo[
            'diamondName']  # String(100)    商户对商品的自定义描述 。 必填,不能为空

        rparam = {
            'userID': userID,
            'applicationID': applicationID,
            'amount': amount,
            'productName': productName,
            'requestId': requestId,
            'productDesc': productDesc,
        }
        sign = self.__check_ras_code__(hwapps, rparam, True)
        rparam['sign'] = sign
        rparam['userName'] = userName
        rparam['notifyUrl'] = PayHelper.getSdkDomain(
        ) + '/v1/pay/huawei/callback'
        chargeinfo['chargeData'] = rparam
        return self.return_mo(0, chargeInfo=chargeinfo)
예제 #16
0
 def doPay(self, rpath):
     rparams = TyContext.RunHttp.convertArgsToDict()
     TyContext.ftlog.info('PayWeixinV4Gateway.doPay rparams=', rparams)
     if not self.checkGatewaySign(rparams):
         return '{"code":1,"msg":"signature error"}'
     appId = rparams['appId']
     prodName = rparams['prodName']
     prodPrice = rparams['prodPrice']
     orderId = rparams['orderId']
     notifyUrl = rparams['notifyUrl']
     ###
     chargeInfo = {
         'buttonName': prodName,
         'platformOrderId': orderId,
         'chargeTotal': float(prodPrice),
     }
     wxappId = 'wxb01a635a437adb75'  # mi.getParamStr('wxappId')
     openid = None  # mi.getParamStr('openid')
     tradeType = 'WAP'
     wxconfig = TyContext.Configure.get_global_item_json('wx_config', {})
     config = wxconfig.get(str(wxappId), None)
     if config:
         wxappId = str(config['appId'])
         wxpaySignKey = str(config['paySignKey'])
         wxappSecret = str(config['appSecret'])
         wxpartnerId = str(config['partnerId'])
         wxpartnerKey = str(config['partnerKey'])
     else:
         raise PayErrorV4(
             1, 'can not find wxpay config info define of wxappId=' +
             str(wxappId))
     token = PayWeixinV4.get_accesstoken(wxappId, wxappSecret)
     callbackUrl = PayHelper.getSdkDomain() + '/open/gateway/wxpay/callback'
     payData = PayWeixinV4.get_prepayid_new(chargeInfo, token, wxappId,
                                            wxpaySignKey, wxpartnerId,
                                            wxpartnerKey, tradeType, openid,
                                            callbackUrl)
     ###
     chargeData = {
         'appId': appId,
         'prodName': prodName,
         'prodPrice': prodPrice,
         'orderId': orderId,
         'notifyUrl': notifyUrl,
         'payData': payData
     }
     TyContext.RedisPayData.execute('SET', 'sdk.charge.gateway:' + orderId,
                                    json.dumps(chargeData))
     return json.dumps({'code': 0, 'payData': payData})
예제 #17
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, price,
        expect (expected result) '''

        postparams = {}
        postparams['uid'] = '792050'
        postparams['apporderID'] = params['platformOrderId']
        postparams['passthrough'] = '691'
        postparams['price'] = params['price']
        postparams['type'] = '1'
        postparams['sign'] = cls.__calc_callback_sign(postparams)
        cburl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        return 'youku ok'
예제 #18
0
파일: payyouku.py 프로젝트: lordsky/hall0
 def __verify_sign(cls, rparam, paykey, sign):
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     sorted_args = [('apporderID', rparam['apporderID']),
                    ('price', rparam['price']), ('uid', rparam['uid'])]
     encoded_args = urllib.urlencode(sorted_args)
     check_str = notifyurl + '?' + encoded_args
     check_sign = hmac.new(paykey)
     check_sign.update(check_str)
     digest = check_sign.hexdigest()
     if digest != sign:
         TyContext.ftlog.error(
             'TuYouPayYouKu verify sign failed: expected sign', sign,
             'calculated', digest, 'rparam', rparam, 'check_str', check_str)
         return False
     return True
예제 #19
0
 def mock(cls, params):
     ''' args: paytype, pay version (v1/v3), platformOrderId, price,
     expect (expected result) '''
     postparams = {}
     postparams['mock'] = '1'
     failcallback = params.get('failcallback', 0)
     if failcallback:
         postparams['status'] = 0
     else:
         postparams['status'] = 1
     postparams['orderid'] = params['platformOrderId']
     postparams['amount'] = str(float(params['price']))
     postparams['yborderid'] = 'yee2orderid123'
     cburl = PayHelper.getSdkDomain() + '/v1/pay/yee2/callback10'
     # use GET instead of POST for now
     response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
     return 'yee.card ok'
예제 #20
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, price,
        expect (expected result) '''

        postparams = {}
        postparams['iosOrderId'] = params['platformOrderId']
        postparams['receipt'] = cls.receipt
        postparams['appId'] = params['appId']
        postparams['authorCode'] = params['authorCode']
        postparams['userId'] = params['userId']
        postparams['clientId'] = params['clientId']
        postparams['isMock'] = 'True'
        postparams['imei'] = 'null'
        cburl = PayHelper.getSdkDomain() + '/v1/pay/ios/callback'
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        return 'ios ok'
예제 #21
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, price,
        expect (expected result) '''

        postparams = {}
        transData = {}
        postparams['appId'] = '3e02f7a3e7fd2ca62cc3'
        postparams['merId'] = '691'
        transData['orderId'] = '11133'
        transData['merOrderId'] = params['platformOrderId']
        transData['payAmt'] = params['price']
        postparams['transData'] = transData
        transData['md5SignValue'] = cls.__calc_callback_sign(postparams)
        postparams['transData'] = json.dumps(transData)
        cburl = PayHelper.getSdkDomain() + '/v1/pay/zhangyue/callback'
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl, postdata_=postparams)
        return 'zhangyue ok'
예제 #22
0
파일: paytuyou.py 프로젝트: lordsky/hall0
 def _getCardRequsetParams(self, datas, cardType):
     httpdomain = PayHelper.getSdkDomain()
     orderPrice = int(float(datas['orderPrice']))
     card_amount = int(float(datas['card_amount']))
     desKey = base64.decodestring(TuyouPayTuyou.szf_desKey)
     cardInfo = str(card_amount) + '@' + str(
         datas['card_number']) + '@' + str(datas['card_pwd'])
     #        iv = Random.new().read(DES.block_size)
     desobj = DES.new(desKey, DES.MODE_ECB)
     padlen = 8 - len(cardInfo) % 8
     for i in xrange(padlen):
         cardInfo = cardInfo + chr(padlen)
     cipher = desobj.encrypt(cardInfo)
     cardInfo = base64.b64encode(cipher)
     orderPlatformId = datas['orderPlatformId']
     ct = datetime.datetime.now()
     orderId = ct.strftime(
         '%Y%m%d') + '-' + TuyouPayTuyou.szf_merId + '-' + orderPlatformId
     rparam = {}
     rparam['version'] = 3  # 版本号值为:  3
     rparam['merId'] = TuyouPayTuyou.szf_merId  # 商户在神州付的唯一身份标识
     rparam['payMoney'] = orderPrice * 100  # 支付金额  单位:分
     rparam['orderId'] = orderId  # 订单号的格式:yyyyMMdd-merId-SN
     rparam['returnUrl'] = httpdomain + TuyouPayTuyou.szf_callback_url
     rparam[
         'cardInfo'] = cardInfo  # DES 加密并做 BASE64 编码后的数据  DES 加密数据格式:充值卡面额[单位:元]@充值卡序列号 @充值卡密码 (请与神州付技术联系配置密钥,然后登录商户平台查看密钥)
     rparam['merUserName'] = ''  # 支付此订单的用户的用户名
     rparam['merUserMail'] = ''  # 支付此订单的用户的邮箱
     rparam['privateField'] = orderPlatformId  # 可以传任意字母数字组成的字符串,回调的时候会传回给商户
     rparam['verifyType'] = 1  # 固定传1
     rparam['cardTypeCombine'] = cardType  # 0:移动;1:联通;2:电信
     md5String = str(rparam['version']) + str(rparam['merId']) + \
                 str(rparam['payMoney']) + str(rparam['orderId']) + \
                 str(rparam['returnUrl']) + str(rparam['cardInfo']) + \
                 str(rparam['privateField']) + str(rparam['verifyType']) + \
                 TuyouPayTuyou.szf_privateKey
     m = hashlib.md5()
     m.update(md5String)
     md5String = m.hexdigest()
     rparam['md5String'] = md5String  # MD5 校验串
     TyContext.ftlog.debug('_getCardRequsetParams->rparam=', rparam)
     return rparam
예제 #23
0
    def annulCard(self, datas, rparam):
        TyContext.ftlog.info('TuYouPayShediaoYee->annulCard->rparam=', rparam,
                             'datas=', datas)
        # 非银行卡支付专业版支付请求,固定值 "ChargeCardDirect".
        p0_Cmd = "ChargeCardDirect"
        # 应答机制.为"1": 需要应答机制;为"0": 不需要应答机制.
        pr_NeedResponse = "1"

        # 调用签名函数生成签名串
        hmacstr = self.getReqHmacString(rparam, p0_Cmd, pr_NeedResponse)
        TyContext.ftlog.debug('TuYouPayShediaoYee->annulCard->hmacstr=',
                              hmacstr)
        # 进行加密串处理,一定按照下列顺序进行
        httpdomain = PayHelper.getSdkDomain()
        params = {
            'p0_Cmd': p0_Cmd,  # 加入业务类型
            'p1_MerId': TuYouPayShediaoYee.p1_MerId,  # 加入商家ID
            'p2_Order': rparam['p2_Order'],  # 加入商户订单号
            'p3_Amt': rparam['p3_Amt'],  # 加入支付卡面额
            'p4_verifyAmt': rparam['p4_verifyAmt'],  # 加入是否较验订单金额
            'p5_Pid': rparam['p5_Pid'],  # 加入产品名称
            'p6_Pcat': rparam['p6_Pcat'],  # 加入产品类型
            'p7_Pdesc': rparam['p7_Pdesc'],  # 加入产品描述
            'p8_Url':
            httpdomain + TuYouPayShediaoYee.callback_url,  # 加入商户接收交易结果通知的地址
            'pa_MP': rparam['pa_MP'],  # 加入临时信息
            'pa7_cardAmt': rparam['pa7_cardAmt'],  # 加入卡面额组
            'pa8_cardNo': rparam['pa8_cardNo'],  # 加入卡号组
            'pa9_cardPwd': rparam['pa9_cardPwd'],  # 加入卡密组
            'pd_FrpId': rparam['pd_FrpId'],  # 加入支付通道编码
            'pr_NeedResponse': pr_NeedResponse,  # 加入应答机制
            'hmac': hmacstr,  # 加入校验码
            'pz_userId': rparam['pz_userId'],  # 用户唯一标识
            'pz1_userRegTime': rparam['pz1_userRegTime']  # 用户的注册时间
        }
        payUrl = TuYouPayShediaoYee.reqURL_SNDApro + TuYouPayShediaoYee.createQueryString(
            params)
        TyContext.ftlog.info('TuYouPayShediaoYee->annulCard->payUrl=', payUrl)
        response, payUrl = TyContext.WebPage.webget(payUrl)
        TyContext.ftlog.info('TuYouPayShediaoYee->annulCard->payUrl=', payUrl,
                             'response=', response)
        return TuYouPayShediaoYee.getPayResult(response, datas)
예제 #24
0
    def getReqHmacString(self, rparam, p0_Cmd, pr_NeedResponse):

        # 进行加密串处理,一定按照下列顺序进行
        sbOld = ""
        # 加入业务类型
        sbOld += p0_Cmd
        # 加入商户代码
        sbOld += TuYouPayShediaoYee.p1_MerId
        # 加入商户订单号
        sbOld += rparam['p2_Order']
        # 加入支付卡面额
        sbOld += rparam['p3_Amt']
        # 是否较验订单金额
        sbOld += rparam['p4_verifyAmt']
        # 产品名称
        sbOld += rparam['p5_Pid']
        # 产品类型
        sbOld += rparam['p6_Pcat']
        # 产品描述
        sbOld += rparam['p7_Pdesc']
        # 加入商户接收交易结果通知的地址
        httpdomain = PayHelper.getSdkDomain()
        sbOld += httpdomain + TuYouPayShediaoYee.callback_url
        # 加入临时信息
        sbOld += rparam['pa_MP']
        # 加入卡面额组
        sbOld += rparam['pa7_cardAmt']
        # 加入卡号组
        sbOld += rparam['pa8_cardNo']
        # 加入卡密组
        sbOld += rparam['pa9_cardPwd']
        # 加入支付通道编码
        sbOld += rparam['pd_FrpId']
        # 加入应答机制
        sbOld += pr_NeedResponse
        # 加入用户ID
        sbOld += str(rparam['pz_userId'])
        # 加入用户注册时间
        sbOld += rparam['pz1_userRegTime']

        return self.getHmacString(sbOld)
예제 #25
0
    def mock(cls, params):
        ''' args: paytype, pay version (v1/v3), platformOrderId, payCode
        expect (expected result) '''

        failcallback = params.get('failcallback', 0)
        if failcallback:
            trade_status = '00001'
        else:
            trade_status = '00000'
        params['status'] = trade_status
        cburl = PayHelper.getSdkDomain() + '/v1/pay/liantongw/callback'
        xmldata = cls.xmlrequest_template.format(payCode=params['payCode'],
                                                 price=params['price'],
                                                 platformOrderId='0000000000' +
                                                 params['platformOrderId'],
                                                 status=trade_status,
                                                 sign=cls.__calc_sign(params))
        # use GET instead of POST for now
        response, _ = TyContext.WebPage.webget(cburl,
                                               postdata_=xmldata,
                                               method_='GET')
        return 'liantongwo ok'
예제 #26
0
 def doBuyStraight(self, userId, params, mo):
     from tysdk.entity.paythird.helper import PayHelper
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/360pay/callback'
     appId = params['appId']
     prodId = params['prodId']
     prodconfig = TyContext.Configure.get_global_item_json(
         '360pay_prodids', {})
     data = prodconfig[str(appId)].get(prodId, None)
     if data:
         amount = data['price']
         prodName = data['name']
     else:
         raise Exception('can not find 360pay product define of prodId=' +
                         prodId)
     payData = {
         'amount': amount,
         'productId': prodId,
         'productName': prodName,
         'notifyUrl': notifyurl,
         'rate': '1000'
     }
     params['payData'] = payData
     mo.setResult('payData', payData)
예제 #27
0
파일: payyouku.py 프로젝트: lordsky/hall0
 def doBuyStraight(self, userId, params, mo):
     appId = params['appId']
     prodId = params['prodId']
     prodconfig = TyContext.Configure.get_global_item_json(
         'youku_prodids', {})
     data = prodconfig[str(appId)].get(prodId, None)
     if data is None:
         raise Exception('can not find youku product define of prodId=' +
                         prodId)
     amount = data['price']
     prodName = data['name']
     payData = {
         'amount': amount,
         'productId': prodId,
         'productName': prodName
     }
     params['payData'] = payData
     mo.setResult('payData', payData)
     from tysdk.entity.paythird.helper import PayHelper
     notifyurl = PayHelper.getSdkDomain() + '/v1/pay/youku/callback'
     TyContext.ftlog.debug('TuyouPayYouku doBuyStraight callback url=',
                           notifyurl)
     mo.setResult('notifyUrl', notifyurl)
예제 #28
0
 def charge_data(self, mi):
     chargeInfo = self.get_charge_info(mi)
     appId = chargeInfo['appId']
     # check config
     packageName = chargeInfo['packageName']
     changeName = chargeInfo['channelName']
     config = GameItemConfigure(appId).get_sdk_configure(
         changeName, packageName, 'jinli')
     jinli_privateKey = config['jinli_privateKey']
     ###
     rparams = {
         'player_id': mi.getParamStr('player_id'),
         'api_key': mi.getParamStr('api_key'),
         'deal_price': str(chargeInfo['chargeTotal']),
         'deliver_type': '1',
         'notify_url':
         PayHelper.getSdkDomain() + '/open/ve/pay/jinlionline/callback',
         'out_order_no': chargeInfo['platformOrderId'],
         'subject': chargeInfo['buttonName'],
         'submit_time': datetime.now().strftime('%Y%m%d%H%M%S'),
         'total_fee': str(chargeInfo['chargeTotal']),
     }
     pairs = filter(lambda x: x[0] not in ['player_id'], rparams.items())
     pairs.sort()
     data = ''.join(['%s' % x[1] for x in pairs])
     # calc sign
     privateKey = load_privatekey(FILETYPE_PEM,
                                  self.loadRsaPrivateKey(jinli_privateKey))
     sign = _sign_with_privatekey_openssl(data, privateKey)
     rparams['sign'] = sign
     # create order
     url = 'https://pay.gionee.com/order/create'
     response, purl = TyContext.WebPage.webget(
         url, postdata_=json.dumps(rparams), method_="POST")
     chargeInfo['chargeData'] = json.loads(response)
     return self.return_mo(0, chargeInfo=chargeInfo)
예제 #29
0
파일: payios.py 프로젝트: lordsky/hall0
    def doIosCallbackVerify(cls, paydata, isSandBox, isMock=False):
        platformOrderId = paydata['platformOrder']
        userId = paydata['userId']
        receiptJsonStr = paydata['receiptJsonStr']
        if not receiptJsonStr or len(receiptJsonStr) < 200:
            return 'error-receipt'

        # documentation link: https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html
        if isMock:
            vrurl = PayHelper.getSdkDomain() + '/open/v3/mockios/verifyReceipt'
        elif isSandBox:
            vrurl = 'https://sandbox.itunes.apple.com/verifyReceipt'
        else:
            vrurl = 'https://buy.itunes.apple.com/verifyReceipt'

        TyContext.ftlog.debug('IOS->doIosCallbackVerify isSandBox=', isSandBox, 'url=', vrurl, 'datas=', paydata)

        paydata['iosurl'] = vrurl
        paydata['sandbox'] = isSandBox
        # verifying order can get errors like, "503 Service Unavailable",
        # TCPTimedOutError, etc. so retry 3 times. client will timeout after 8s,
        # so it is useless to retry longer. If sdk service restarts during the
        # process, client will get no response, in which case the client will
        # retry the callback.
        retries = 3
        while retries > 0:
            try:
                response, vrurl = TyContext.WebPage.webget(
                    vrurl, {}, None, receiptJsonStr, 'POST',
                    {'Content-type': 'text/json'})
                return cls.doIosCallbackVerifyDone(response, paydata)
            except Exception, e:
                TyContext.ftlog.error('IOS->doIosCallbackVerify webget failed.'
                                      ' exception', e, 'userId', userId,
                                      'platformOrder', platformOrderId)
                retries -= 1
예제 #30
0
 def handle_alipay_free_pay(self, rpath):
     """
     支付宝免密直接扣款,需要传入的参数有:appId, sign, orderId, prodName, prodPrice, userId
     :param rpath:
     :return:
     """
     rparams = TyContext.RunHttp.convertArgsToDict()
     requiredParams = [
         'appId', 'userId', 'prodName', 'prodPrice', 'orderId', 'notifyUrl'
     ]
     for name in requiredParams:
         if not name in rparams:
             return '{"code":3, "msg":"缺少参数%s"}' % name
     if not self.checkGatewaySign(rparams):
         return '{"code":1, "msg":"signature error"}'
     appId = rparams['appId']
     userId = rparams['userId']
     hashUserId = '%s@%s' % (userId, appId)
     alipay_agreement_no = TyContext.RedisUser.execute(
         abs(hash(hashUserId)), 'HGET', 'universal_user:%s' % hashUserId,
         'alipay_agreement_no')
     if not alipay_agreement_no:
         return '{"code":2, "msg":"还未签署免密协议"}'
     sParaTemp = {}
     sParaTemp["partner"] = self.PARTNER
     sParaTemp["seller_id"] = self.SELLER_ID
     sParaTemp["service"] = "alipay.acquire.createandpay"
     sParaTemp["_input_charset"] = 'utf-8'
     sParaTemp["product_code"] = "GENERAL_WITHHOLDING"
     sParaTemp['out_trade_no'] = rparams['orderId']
     sParaTemp['subject'] = rparams['prodName']
     sParaTemp['total_fee'] = rparams['prodPrice']
     sParaTemp['it_b_pay'] = '30m'
     ###
     sParaTemp[
         'agreement_info'] = '{"agreement_no":"%s"}' % alipay_agreement_no
     sParaTemp["notify_url"] = PayHelper.getSdkDomain(
     ) + '/open/gateway/alifree/order_callback'
     sParaTemp['sign'] = self.calcSignMD5(**sParaTemp)
     sParaTemp['sign_type'] = 'MD5'
     # save order
     chargeData = {
         'code': 0,
         'appId': rparams['appId'],
         'prodName': rparams['prodName'],
         'prodPrice': rparams['prodPrice'],
         'userId': rparams['userId'],
         'orderId': rparams['orderId'],
         'notifyUrl': rparams['notifyUrl'],
     }
     TyContext.RedisPayData.execute(
         'SET', 'sdk.charge.gateway:' + chargeData['orderId'],
         json.dumps(chargeData))
     # trade_no = xmlResponse.find('response').find('alipay').find('trade_no').text
     response, _ = TyContext.WebPage.webget(self.ALIPAY_GATEWAY_NEW,
                                            sParaTemp)
     xmlResponse = ElementTree.fromstring(response)
     if xmlResponse.find('is_success').text == 'T':
         status = 'success'
     else:
         status = 'failed'
     return json.dumps({
         'code': 0,
         'status': status,
         'prodName': rparams['prodName'],
         'prodPrice': rparams['prodPrice'],
         'orderId': rparams['orderId'],
         # 'trade_no': trade_no,
     })