Android端Stripe PaymentSheet已保存卡片不显示问题求助
结合你的描述(iOS端正常、服务端配置无问题、customerId固定、ephemeralKey正确更新),Android端PaymentSheet不显示已保存卡片的可能原因及排查方向如下:
检查 PaymentIntent 的
setup_future_usage参数
即便用户勾选了“保存以便未来支付”,Stripe 只会在创建 PaymentIntent 时指定了setup_future_usage参数(值为on_session或off_session)的情况下,才会将卡片绑定到对应 customer 下。虽然 iOS 端正常,但建议再次确认服务端创建 PaymentIntent 时是否正确设置了该参数——个别场景下 Android SDK 对该参数的校验逻辑可能更严格。验证 Ephemeral Key 的权限范围
确保服务端生成 Ephemeral Key 时,指定了完整的 customer 权限范围。正确的生成逻辑应包含对 customer 及 payment_methods 的读写权限,比如生成时的参数应为:{ "customer": "YOUR_CUSTOMER_ID", "scope": "customer" }若权限不足,Android SDK 可能无法获取到已保存的支付方式列表。
确认 PaymentSheet 实例的生命周期
避免每次发起支付时都重新创建PaymentSheet实例。建议将PaymentSheet实例与页面/ViewModel 的生命周期绑定(比如作为 ViewModel 的成员变量),频繁重建实例可能导致本地缓存丢失,无法显示已保存卡片。检查 Stripe Android SDK 版本
对比 iOS 端使用的 SDK 版本,确认 Android 端是否使用了较旧的 SDK 版本。部分旧版本存在 PaymentSheet 无法加载已保存卡片的已知问题,建议升级至最新稳定版 SDK。排查配置参数完整性
虽然你的代码中已传入customerConfiguration,但可以检查是否遗漏了影响支付方式展示的参数:- 确认
GooglePayConfiguration未覆盖或禁用了本地卡片的展示逻辑; - 检查
PaymentSheet.Configuration中的allowsDelayedPaymentMethods等参数是否设置正确,避免意外隐藏了已保存的支付方式。
- 确认
你的代码示例本身逻辑无明显错误,可重点从上述几个方向入手排查。
内容的提问来源于stack exchange,提问作者Gabriel Trifa

