Flutter中Stripe Subscription API返回空订阅列表,但支付已成功
核心问题
Stripe仪表盘显示用户支付成功,但调用GET /v1/subscriptions?customer={客户ID}接口时返回空列表,响应内容如下:
{
"object": "list",
"data": [],
"has_more": false,
"url": "/v1/subscriptions"
}
排查步骤与解决办法
核对客户ID一致性
确认API请求中传入的customer参数,和Stripe仪表盘里那笔成功支付所属的客户ID完全一致。常见错误包括:测试环境与生产环境的客户ID混淆、代码中错误传递了其他用户的ID。确认支付是否关联订阅
支付成功≠自动创建订阅。打开Stripe仪表盘的这笔支付详情页,查看「关联对象」区域,确认是否存在对应的订阅记录。如果只是单独的Charge(一次性付款),而非订阅付款,自然查不到订阅数据。匹配API环境与支付环境
检查调用API使用的密钥:测试密钥前缀为sk_test_xxx,生产密钥为sk_live_xxx。确保密钥对应的环境和支付记录所在环境完全一致——用测试密钥查生产环境的订阅,或者反过来,都会返回空。检查订阅状态过滤条件
如果你的API请求中添加了status参数(比如仅查询active状态),而订阅实际处于incomplete、trialing或paused等状态,就会过滤掉结果。可以先移除状态过滤参数,直接调用GET /v1/subscriptions?customer={客户ID}测试。验证API密钥权限
确保使用的API密钥拥有读取订阅的权限。如果是受限密钥,需要在Stripe后台确认已开启read_subscriptions权限;默认的全权限密钥无需额外配置。
内容的提问来源于stack exchange,提问作者tee Swift

