You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stripe接入Google Pay调用presentForPaymentIntent报错412问题咨询

Stripe Google Pay 错误码412问题解决方案

错误本质

错误码412为Google Pay支付流程触发前的预校验失败,因你已拿到onGooglePayReady=true的返回值,可排除基础环境、SDK版本、Google钱包基础配置的问题。

常见诱发原因

  • 前后端配置的区域/币种不匹配:你前端Config中指定的国家码为IN(印度),如果后端生成PaymentIntent时的币种不是INR、或者国家参数未设置为IN,会直接触发预校验失败
  • 测试环境绑定的卡片不符合区域要求:印度区Google Pay测试需要绑定印度地区的测试支付卡片,绑定其他区域的测试卡无法通过区域校验
  • client_secret参数异常:传入的secret存在空格、截断、转义错误,或者误传入SetupIntent的secret而非PaymentIntent的secret
  • 商户名称不一致:Stripe后台配置的Google Pay商户名称和前端GooglePayLauncher.Config中传入的MerchantName不匹配
  • 账号权限未开通:Stripe账号未开通印度区域的Google Pay支付权限,测试环境也需要提前启用对应区域的支付方式

排查解决步骤

  • 核对后端PaymentIntent生成参数,确认currency字段为inr、country参数为IN,和前端配置完全对齐
  • 替换Google钱包测试环境绑定的测试卡为印度区域可用的测试卡片
  • 调用presentForPaymentIntent前增加client_secret校验,打印日志确认传入的secret和后端返回的原始值完全一致,无多余字符
  • 登录Stripe后台,进入支付方式配置页的Google Pay板块,核对商户名称和前端传入的MerchantName完全相同
  • 确认Stripe账号已开通印度区域的Google Pay支付权限,测试环境也需要单独启用该支付方式

代码优化建议

可在调用支付前增加参数校验,避免无效请求:

client_secret = // 从后端获取后先做去空格处理
client_secret = client_secret == null ? "" : client_secret.trim();

final GooglePayLauncher googlePayLauncher = new GooglePayLauncher(
        this,
        new GooglePayLauncher.Config(
                GooglePayEnvironment.Test,
                "IN",
                "MerchantName"
        ),
        this::onGooglePayReady,
        this::onGooglePayResult
);

googlePayButton.setOnClickListener(v -> {
    if (client_secret.isEmpty()) {
        // 自行处理secret为空的异常提示
        return;
    }
    googlePayLauncher.presentForPaymentIntent(client_secret);
});

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:24:00