Google Pay按钮点击后onPaymentAuthorized没响应怎么办

Tr° 篷璐 阅读 12

大家好,我在React项目里集成Google Pay时遇到个怪问题。按照官方文档写好了PaymentDataRequest配置,但点击支付按钮后onPaymentAuthorized回调完全没触发,控制台也没报错。

代码是这样写的:


class Checkout extends React.Component {
  handlePayment = (paymentData) => {
    console.log('支付授权:', paymentData); // 这里从来没执行
    return { transactionState: 'SUCCESS' };
  };

  render() {
    const paymentRequest = {
      apiVersion: 2,
      apiVersionMinor: 0,
      merchantInfo: { merchantId: '12345678' },
      transactionInfo: {
        totalPriceStatus: 'FINAL',
        totalPriceString: '100.00',
        currencyCode: 'USD'
      },
      allowedPaymentMethods: [{
        type: 'CARD'
      }]
    };

    return (
      <GooglePayButton
        environment="TEST"
        paymentRequest={paymentRequest}
        onPaymentAuthorized={this.handlePayment}
      />
    );
  }
}

我已经确认环境是TEST模式,merchantId也正确。奇怪的是支付弹窗能正常显示,但选完卡片点击确认后就回到原页面,连调试日志都没输出。是不是哪里配置漏了?有人遇到过类似情况吗?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
Top丶宁蒙
这个问题我遇到过,主要是allowedPaymentMethods的配置有问题。你现在的写法太简单了,缺少关键的参数。

先检查一下allowedPaymentMethods部分,必须包含具体的卡片网络和认证方式,Google Pay对这部分要求很严格。改成这样试试:

allowedPaymentMethods: [{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['VISA', 'MASTERCARD']
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'example',
gatewayMerchantId: 'exampleGatewayMerchantId'
}
}
}]


另外transactionInfo里的totalPriceString改成totalPrice,字段名写错了。还有merchantInfo部分建议加上merchantName,虽然不是必填,但有些情况下会需要。

改完后整体结构大概是这样:

const paymentRequest = {
apiVersion: 2,
apiVersionMinor: 0,
merchantInfo: {
merchantId: '12345678',
merchantName: '你的商户名称'
},
transactionInfo: {
totalPriceStatus: 'FINAL',
totalPrice: '100.00',
currencyCode: 'USD'
},
allowedPaymentMethods: [{
type: 'CARD',
parameters: {
allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],
allowedCardNetworks: ['VISA', 'MASTERCARD']
},
tokenizationSpecification: {
type: 'PAYMENT_GATEWAY',
parameters: {
gateway: 'your-gateway',
gatewayMerchantId: 'your-merchant-id'
}
}
}]
};


这些改完基本就能正常触发onPaymentAuthorized了。记得把gateway和merchant相关的信息替换成你实际使用的支付网关参数。我之前就是被这些细节坑了好久,文档里其实都写了,但很容易漏看。
点赞
2026-02-18 03:01