Stripe Java服务端调用PaymentIntent.create()无响应求助
解决Stripe PaymentIntent.create()调用卡住的问题
可能原因及对应解决方案
1. 网络或代理限制
Stripe API需要访问外网,若服务器处于防火墙、内网环境或未正确配置代理,请求会无法到达Stripe服务器,导致程序无限等待。
- 先验证服务器能否访问Stripe API:执行
curl -u sk_test_你的测试密钥: https://api.stripe.com/v1/payment_intents,看是否能正常返回响应。 - 若需代理,给Stripe SDK配置代理及超时:
Stripe.apiKey = "TESTSECRETKEY"; // 设置超时,避免无限阻塞 Stripe.setConnectTimeout(10000); Stripe.setReadTimeout(10000); // 配置代理信息 ProxyConfig proxyConfig = new ProxyConfig( "代理地址", 代理端口, "代理用户名", "代理密码" ); Stripe.setProxyConfig(proxyConfig);
2. 未设置超时时间
默认情况下Stripe SDK的超时阈值可能过长,甚至无超时设置,导致请求卡住却不抛出异常。
- 初始化Stripe时添加超时配置,一旦请求超时会直接抛出异常,便于排查:
Stripe.apiKey = "TESTSECRETKEY"; Stripe.setConnectTimeout(10000); // 连接超时10秒 Stripe.setReadTimeout(10000); // 读取超时10秒
3. 测试密钥无效或权限不足
确保使用的测试密钥(以sk_test_开头)有效且具备创建PaymentIntent的权限:
- 登录Stripe后台确认密钥未被禁用,且属于活跃的测试账号。
- 用Postman手动测试:发送POST请求到
https://api.stripe.com/v1/payment_intents,头部带上Authorization: Bearer sk_test_你的密钥,参数设置amount=1099¤cy=sek&payment_method_types[]=card,验证能否正常创建PaymentIntent。
4. Stripe SDK版本问题
旧版本SDK可能存在请求阻塞的bug,建议升级到最新稳定版:
- 若使用Maven,更新依赖版本:
<dependency> <groupId>com.stripe</groupId> <artifactId>stripe-java</artifactId> <version>23.3.0</version> <!-- 替换为官网最新稳定版 --> </dependency>
5. 异常未被捕获
你的代码中没有捕获Stripe请求可能抛出的异常,若请求过程中出现错误(如密钥无效、参数错误),异常可能被框架吞掉,导致程序看似卡住。
- 添加异常捕获逻辑,打印错误信息:
try { PaymentIntent intent = PaymentIntent.create(params); System.out.println("3"); } catch (StripeException e) { e.printStackTrace(); // 可将错误信息返回给客户端,便于调试 return gson.toJson(Map.of("error", e.getMessage())); }
内容的提问来源于stack exchange,提问作者Håkan Troberg
相关产品推荐
相关产品推荐

