我正在尝试将 Google Pay 支持添加到我们已经为本地应用程序工作的网站。应用内实现不允许使用 PAN_ONLY
卡(由于高退款),仅允许使用 CRYPTOGRAM_3DS
。这很好用。
当我将网站配置为仅允许 CRYPTOGRAM_3DS
时,我永远无法让 paymentsClient.isReadyToPay()
返回 true。我尝试过不同的 Android 设备,这些设备能够进行应用内支付但没有成功。明确一点:如果我允许 PAN_ONLY
,那么 Google Pay 会按预期工作,我可以获得 token 。
如何排查发生这种情况的原因?如果您从设置配置中删除 PAN_ONLY
,它对其他人有用吗?
谢谢!
最佳答案
CRYPTOGRAM_3DS
指的是标记化的卡片。也就是说,已添加并存储在您的 Android 设备上的卡片。您可以使用这些卡在店内(而非应用内)通过触碰付款进行支付。
如果您仅使用 CRYPTOGRAM_3DS
,这意味着它目前只能在用户已保存 token 化卡的 Android 设备上运行。
我将以下示例放在一起进行演示(确保您在具有适当卡的 Android 设备上进行测试):https://jsfiddle.net/w5ptorbd/
<script src="https://unpkg.com/@google-pay/button-element@2.x/dist/index.umd.js"></script>
<google-pay-button environment="TEST"></google-pay-button>
const button = document.querySelector('google-pay-button');
button.paymentRequest = {
apiVersion: 2,
apiVersionMinor: 0,
allowedPaymentMethods: [
{
type: 'CARD',
parameters: {
allowedAuthMethods: ['CRYPTOGRAM_3DS'],
allowedCardNetworks: ['MASTERCARD', 'VISA'],
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'example',
gatewayMerchantId: 'exampleGatewayMerchantId',
},
},
},
],
merchantInfo: {
merchantId: '12345678901234567890',
merchantName: 'Demo Merchant',
},
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPriceLabel: 'Total',
totalPrice: '100.00',
currencyCode: 'USD',
countryCode: 'US',
},
};
button.addEventListener('loadpaymentdata', event => {
console.log('load payment data', event.detail);
});
button.addEventListener('readytopaychange', event => {
console.log('ready to pay change', event.detail);
});
关于google-pay - CRYPTOGRAM_3DS – 为什么它不能作为唯一的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63936401/