问题排查

网页问题排查指南涵盖了与以下主题相关的问题。

注册和访问权限

在集成过程中,您可能会遇到以下错误。此列表提供了一些有用的问题排查建议,以应对这些错误。

此商家未启用 Google Pay
Google Pay API 要求为配置了 PaymentsClient 以用于 PRODUCTION 环境的网站提供 Google merchantId。Google merchantId 通过 Google Pay 和钱包控制台与一个或多个完全限定网域相关联。如需了解详情,请查看返回的错误详细信息。
此商家尚未完成注册,无法使用 Google Pay API。请前往控制台 (https://pay.google.com/business/console) 进行验证。
您尚未完成为 Google Pay API 注册网站的流程。查看申请正式版访问权限,了解如何使用 Google Pay 和钱包控制台进行注册,并申请审核您的网站对 Google Pay API 的使用情况。
此商家资料无权使用此功能
Google 尚未将您的网站配置为使用 Google Pay API。请参阅申请正式版访问权限,通过 Google Pay 和钱包控制台申请审核您的网站对 Google Pay API 的使用情况。
此 Google Pay API 集成已停用。如需了解详情,请与我们联系 (https://developers.google.com/pay/api/faq#how-to-get-support)。
与我们联系,详细了解重新为您的 Google 账号启用 Google Pay API 所需的步骤。
您的网域 “example.com”未注册以使用此 API
托管结账流程的网域未与您使用的 merchantId 相关联。确保 merchantId 参数正确无误,并且您的网域已通过 Google Pay & Wallet Console 注册。
应在安全环境中调用 Google Pay API!
Google Pay API 只能在安全环境中的网站上使用。如需了解详情,请参阅安全上下文
未找到相应商家资料的任何密钥
您必须通过 Google Pay & Wallet Console 向 Google 注册加密公钥,才能完成 DIRECTtokenizationSpecification type 集成。

merchantId

在集成过程中,您可能会在某个时间点遇到与 merchantId 相关的以下错误。此列表提供了一些有用的问题排查建议,以应对这些错误。

必须设置 merchantId!
PaymentDataRequest 中的 merchantId 参数必须设置为通过 Google Pay & Wallet Console 提供的值。仅当您使用为 PRODUCTION 环境配置的 PaymentsClient 时,才需要 merchantId 参数。请查看我们的集成核对清单,申请审核您的网站对 Google Pay API 的使用情况,并获取您的 merchantId
merchantId 不是字符串
PaymentDataRequest 中的 merchantId 参数必须始终是字符串。在调用 API 之前,请确保您使用的 merchantId 参数的类型为字符串。
merchantId 未注册。
PaymentDataRequest 中的 merchantId 参数必须通过 Google Pay 和钱包控制台进行配置。 如需了解详情,请参阅申请正式版访问权

网关有效性

在集成过程中,您可能会遇到以下与网关有效性相关的错误。此列表提供了一些有用的问题排查建议,以应对这些错误。

未知网关 yourgateway
您在 paymentMethodTokenizationParameters.parameters 中指定的网关参数目前不受 Google 支持。如需详细了解网关标识符和关联字段(例如 gatewayMerchantId),请与您的网关联系。
网关“example”无法在生产模式下使用
示例网关参数值仅用于测试,不能与为 PRODUCTION 环境配置的 PaymentsClient 一起使用。如需详细了解需要设置哪些 PaymentMethodTokenizationSpecification 参数值才能使用 Google Pay API,请与您的支付网关联系。

对象有效性

在集成过程中,您可能会遇到以下与对象有效性相关的错误。此列表提供了一些有用的问题排查建议,以应对这些错误。

Google Pay 的 PaymentDataRequest 不是有效的 JSON
提供给 loadPaymentData 的参数必须始终是有效的 PaymentDataRequest 对象。
必须设置 transactionInfo!
PaymentDataRequest 中的 transactionInfo 参数必须始终是有效的 TransactionInfo 对象。

直接商家

在集成过程中,您可能会在某个时间点遇到与直销商家相关的以下错误。此列表提供了一些有用的问题排查建议,以应对这些错误。

签名验证
如果 merchantId 错误,您可能会遇到签名验证错误。 当您在 TEST 环境中使用 Tink paymentmethodtoken 库时,可能会发生这种情况。为避免此问题,请在
中将 YOUR_MERCHANT_ID 设置为 12345678901234567890
.recipientId("merchant:YOUR_MERCHANT_ID")
无法解密令牌
如果您使用 Tink paymentmethodtoken 库来解密令牌,请注意以下事项
  • 确保 Google Pay API 响应环境与 Tink paymentmethodtoken 环境相对应。如需了解详情,请参阅以下示例:
    • 如果 Google Pay API 响应是由环境 TEST 返回的,则 Tink 会指向测试环境以进行解密。
  • 在将 Google Pay API 的响应传递给 Tink 之前,请勿修改该响应。确保您传递的是从 Google Pay API 响应中返回的整个令牌。如需了解详情,请参阅以下注释:
  • 验证您是否拥有与您向 Google 注册的公钥相关联的相应私钥。
在 Windows 上生成公钥和私钥对
如果您使用的是 Windows,并且想要按照 使用 OpenSSL 生成私钥和公钥对中所述的步骤操作,请确保在您的计算机上安装 Cygwin。这是运行 Linux 命令所必需的。

错误对象

错误对象是由客户端 JavaScript 方法中被拒绝的承诺返回的对象。

PaymentsError
此对象包含有关由客户端 JavaScript 方法返回的错误的详细信息。面向用户的对话框中可能不会显示相关错误。
属性 类型 说明
statusCode 字符串 用于描述错误类型的简短代码。
statusMessage 字符串 面向开发者的消息,用于描述遇到的错误以及用以纠正该错误的可能步骤。
常见错误
此对象显示了您在所有 JavaScript 方法中可能会遇到的错误。请务必查看开发者控制台,以了解其他错误消息。
状态代码 说明
BUYER_ACCOUNT_ERROR 当前的 Google 用户无法提供付款信息。
DEVELOPER_ERROR

传递的参数格式不正确。对于所有已配置的环境,浏览器控制台中可能会显示错误消息

MERCHANT_ACCOUNT_ERROR

访问 Google Pay API 的网站没有相应权限。这可能是由于请求中的配置不正确或商家 ID 设置不正确所致。如需了解详情,请查看 statusMessage 字段。如果您仍有问题,请与支持人员联系

INTERNAL_ERROR 常规服务器错误。

CardInfo

什么是 CardInfo 功能?
Google Pay 会向消费者表明 Google Pay 付款按钮必需搭配银行卡才能发挥作用,并会显示银行卡品牌的网络以及银行卡的最后四位数。
为什么 CardInfo 功能无法在我的实现中呈现?

为了使 CardInfo 功能正常运行,我们需要满足以下条件:

为什么 Google Pay 付款按钮会无限期加载?
请勿移除 onLoad 事件监听器。如果您移除 onLoad 事件监听器,可能会导致 Google Pay 付款按钮无限期加载。
为什么在我点击 Google Pay 付款按钮后没有出现付款提示?
ButtonOptions.onClick 事件分配事件监听器回调。

OR_BIBED_15 处错误

在集成过程中,您可能会遇到 OR_BIBED_15 错误。此列表提供了一些有用的问题排查建议,以应对此错误。

使用 WebView
请按照 AndroidiOS 适用的指南操作,确保您的集成与 WebView 兼容。
Cross-Origin-Opener-Policy HTTP 响应标头
如果 Cross-Origin-Opener-Policy HTTP 响应标头设置为 same-origin,则可能会阻止浏览器打开必要的弹出式窗口,导致用户无法完成交易。 尝试将标头的值更改为 same-origin-allow-popups,以减少这些问题。
用户点击事件与对 loadPaymentData() 的调用之间的延迟
如果在点击 Google Pay 按钮(或类似的结账按钮)后,在 loadPaymentData() 调用(例如:setTimeout()、其他网络调用或类似的长时间运行的逻辑)之前出现延迟,可能会导致浏览器弹出式窗口拦截机制触发。 我们建议,在用户点击与 loadPaymentData() 调用之间不设置任何延迟。