Stripe报错:无效的Setup Intent客户端密钥,请求技术支持
问题排查:Invalid Setup Intent client secret 错误
报错信息
E/App: 出现错误:
java.lang.IllegalArgumentException: Invalid Setup Intent client secret: pi_3LtYhHAZTS98jCaY3NVtpCAW_secret_yUvzN3ytPIexEVJGtOzvQCSOM
at com.stripe.android.model.SetupIntent$ClientSecret.
问题根源
核心错误是把PaymentIntent的client secret当成SetupIntent的密钥传入了。从报错里的pi_前缀能直接判断,这是PaymentIntent的密钥,而presentWithSetupIntent方法要求传入的是前缀为si_的SetupIntent密钥。
代码问题点
- Android端:仅获取了后端返回的
paymentIntent字段,未获取setupIntent,且调用presentWithSetupIntent时传错参数。 - 后端PHP:虽然生成并返回了SetupIntent字段,但前端未使用;同时存在语法错误:
$action='pay'是赋值操作,应改为$action=='pay',否则条件永远成立。
修复步骤
1. 修改Android网络请求,获取SetupIntent密钥
在请求回调中新增获取setupIntent的逻辑:
paymentSheet = new PaymentSheet(this, this::onPaymentSheetResult); Fuel.INSTANCE.post("my api link",null).responseString(new Handler<String>() { @Override public void success(String s) { try { final JSONObject result = new JSONObject(s); customerConfig = new PaymentSheet.CustomerConfiguration( result.getString("customer"), result.getString("ephemeralKey") ); // 新增:获取后端返回的SetupIntent client secret String setupIntentClientSecret = result.getString("setupIntent"); paymentIntentClientSecret = result.getString("paymentIntent"); PaymentConfiguration.init(getContext().getApplicationContext(), result.getString("publishableKey")); } catch (JSONException e) { /* 处理异常 */ } } @Override public void failure(@NotNull FuelError fuelError) { /* 处理异常 */ } });
2. 修改presentPaymentSheet方法,传入正确密钥
将参数替换为刚获取的setupIntentClientSecret:
private void presentPaymentSheet() { final PaymentSheet.Configuration configuration = new PaymentSheet.Configuration.Builder("!2min, Inc.") .customer(customerConfig) .allowsDelayedPaymentMethods(true).build(); // 传入SetupIntent的client secret,而非PaymentIntent的 paymentSheet.presentWithSetupIntent( setupIntentClientSecret, configuration ); }
3. 修复后端PHP的语法错误
修正条件判断中的赋值操作:
if(isset($action) && $action=='pay' && isset($amount)){ // 原有代码... }
额外提示
如果实际需求是发起支付(而非仅保存支付方式),应该调用paymentSheet.presentWithPaymentIntent()方法,传入PaymentIntent的client secret,无需使用presentWithSetupIntent。
内容的提问来源于stack exchange,提问作者ne apple
相关产品推荐
相关产品推荐

