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
相关产品推荐
相关产品推荐

