【问题标题】:Google Pay Implementaion On The Web [closed]网络上的 Google Pay 实施 [关闭]
【发布时间】:2021-01-07 22:18:30
【问题描述】:

我想在我的网站上添加 google pay 立即购买按钮,我使用以下文档作为参考。 https://codelabs.developers.google.com/codelabs/pay-web-checkout/index.html?index=..%2F..index#0 一切正常,这是我创建的代码。

<div id="buy-now"></div>

<script async
  src="https://pay.google.com/gp/p/js/pay.js"
  onload="onGooglePayLoaded()">
</script>


<script>
let googlePayClient;

const baseCardPaymentMethod = {
    type: 'CARD',
    parameters: {
        allowedCardNetworks: ['VISA','MASTERCARD'],
        allowedAuthMethods: ['PAN_ONLY','CRYPTOGRAM_3DS']
    }
};

const googlePayBaseConfiguration = {
    apiVersion: 2,
    apiVersionMinor: 0,
    allowedPaymentMethods: [baseCardPaymentMethod]
};

function onGooglePayLoaded() {

    googlePayClient = new google.payments.api.PaymentsClient({
        environment: 'TEST'
    });

    // check compatability
    googlePayClient.isReadyToPay(googlePayBaseConfiguration)
    .then(function(response) {
        if(response.result) {
            createAndAddButton();
        } else {
            alert("Unable to pay using Google Pay");
        }
    }).catch(function(err) {
        console.error("Error determining readiness to use Google Pay: ", err);
    });
}

function createAndAddButton() {

    const googlePayButton = googlePayClient.createButton({

        // currently defaults to black if default or omitted
        buttonColor: 'default',

        // defaults to long if omitted
        buttonType: 'long',

        onClick: onGooglePaymentsButtonClicked
    });

    document.getElementById('buy-now').appendChild(googlePayButton);
}

function onGooglePaymentsButtonClicked() {
    // TODO: Perform transaction
    const tokenizationSpecification = {
        type: 'PAYMENT_GATEWAY',
        parameters: {
            gateway: 'example',
            gatewayMerchantId: 'gatewayMerchantId'
        }
    };

    const cardPaymentMethod = {
        type: 'CARD',
        tokenizationSpecification: tokenizationSpecification,
        parameters: {
            allowedCardNetworks: ['VISA','MASTERCARD'],
            allowedAuthMethods: ['PAN_ONLY','CRYPTOGRAM_3DS'],
            billingAddressRequired: true,
            billingAddressParameters: {
            format: 'FULL',
            phoneNumberRequired: true
            }
        }
    };

    const transactionInfo = {
        totalPriceStatus: 'FINAL',
        totalPrice: '123.45',
        currencyCode: 'USD'
    };

    const merchantInfo = {
        merchantId: 'BCR2DN6TRPZNDYLL', Only in PRODUCTION
        merchantName: 'Example Merchant Name'
    };

    const paymentDataRequest = Object.assign({}, googlePayBaseConfiguration, {
        allowedPaymentMethods: [cardPaymentMethod],
        transactionInfo: transactionInfo,
        merchantInfo: merchantInfo   
    });

    googlePayClient
    .loadPaymentData(paymentDataRequest)
    .then(function(paymentData) {
        processPayment(paymentData);
    }).catch(function(err) {
        // Log error: { statusCode: CANCELED || DEVELOPER_ERROR }
    });
    
}


function processPayment(paymentData) {
    // TODO: Send a POST request to your processor with the payload
    // https://us-central1-devrel-payments.cloudfunctions.net/google-pay-server 
    // Sorry, this is out-of-scope for this codelab.
    return new Promise(function(resolve, reject) {
        // @todo pass payment token to your gateway to process payment
        const paymentToken = paymentData.paymentMethodData.tokenizationData.token;
        console.log('mock send token ' + paymentToken + ' to payment processor');
        setTimeout(function() {
            console.log('mock response from processor');
            alert('done');
            console.log(paymentData);
            resolve({});
        }, 800);
    });
}
</script>

我熟悉 PHP 和 Ruby,我不想使用第三方支付网关进行标记化规范,希望使用 DIRECT 方法。我不知道下一步该做什么以及如何在付款成功后比较令牌,并且对使用 DIRECT 方法的令牌化规范没有任何想法帮助我。 谢谢大家。

【问题讨论】:

    标签: javascript php ruby-on-rails payment-gateway google-pay


    【解决方案1】:

    如果您正在进行网络集成,请考虑使用Google Pay components。如果使用 React,则有一个 React version,而对于大多数其他框架,则有一个 Web Component 版本。

    对于 DIRECT 集成,由于额外的合规义务,强烈建议不要这样做。来自https://developers.google.com/pay/api/web/reference/request-objects#direct

    要点:直接集成允许商家在其服务器上解密 Google Pay 响应。要获得资格,您必须符合支付卡行业 (PCI) 数据安全标准 (DSS) 1 级标准。您的服务器还需要具备安全处理用户支付凭证所需的基础架构。

    代表实际商家提供网关或处理服务的第三方没有资格使用直接集成。有关您作为支付服务提供商的集成问题,请contact us

    如果您不满足必要的先决条件,我们建议您使用supported gateway 接收付款令牌。

    出于兴趣,您为什么不想使用支付网关?

    如果您仍然觉得需要直接集成,可以在以下位置找到有关如何解密令牌的资源:@​​987654327@。

    我不知道下一步该怎么做以及付款成功后如何比较令牌,并且不知道使用 DIRECT 方法的令牌化规范帮助我。

    您需要generate a public/private key pair 并向 Google Pay 控制台注册公钥。您还需要更新 tokenizationSpecification 以包含公钥(示例如下)

    "tokenizationSpecification": {
      "type": "DIRECT",
      "parameters": {
        "protocolVersion": "ECv2",
        "publicKey": "BOdoXP1aiNp.....kh3JUhiSZKHYF2Y="
      }
    }
    

    支付成功后如何比较token

    Google Pay 不会处理付款,但您会处理。您需要解密付款令牌并获取付款详细信息并自行处理付款。

    DIRECT 集成是一个更困难的集成过程,因此我强烈建议您先探索其他替代方案,并且仅在您无法使用支付网关时才考虑这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2021-08-06
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多