flutter_stripe 的 PaymentSheet 为什么不显示 Apple Pay?
支付小周
结论
仅凭这段初始化代码,还不能确定原因。PaymentSheetApplePay(merchantCountryCode: 'ES') 已经传入配置。建议先核对 PaymentSheet 使用的 PaymentIntent 和 Stripe 账户,再检查 iOS 商户配置与运行环境。
PlatformPayButton 能正常付款,说明 Apple Pay 在该按钮对应的调用路径中可用,但无法据此确认 PaymentSheet 使用了相同的 PaymentIntent、Stripe 账户和配置。
代码中,PaymentSheet 使用 client_secret 初始化,同时设置了 Stripe.stripeAccountId。这两处的账户上下文应与创建 PaymentIntent 时使用的 Stripe 账户一致。
优先检查 PaymentIntent 和账户
- 确认 PaymentIntent 允许卡支付。在 Stripe Dashboard 或服务端响应中检查该 PaymentIntent 的
payment_method_types是否包含card。如果使用自动支付方式,也检查创建 PaymentIntent 时的相关配置。Apple Pay 在这里作为卡支付方式呈现;如果 PaymentIntent 不接受卡支付,PaymentSheet 可能不会显示 Apple Pay 选项。 - 确认客户端与 PaymentIntent 属于同一 Stripe 账户。检查
response.data['payment']['stripeAccount']是否对应创建该 PaymentIntent 的账户。如果使用 Stripe Connect,平台账户与连接账户不一致,可能导致 PaymentSheet 获取到的对象或可用支付方式与预期不同。 - 确认初始化参数来自同一笔付款。
client_secret、customerId和customerEphemeralKeySecret应对应同一个客户及账户上下文。核对服务端返回值,确认 PaymentSheet 初始化时使用的凭据没有来自不同账户或不同付款。
再核对 Apple Pay 配置
- 确认
merchantCountryCode: 'ES'与实际商户国家配置相符。示例中的ES不一定适用于你的商户;如果商户国家不同,应使用对应值。 - 检查 iOS 工程中的 Apple Pay Merchant ID、entitlements 和签名配置是否有效。证书更新后,确认构建并运行的应用使用了更新后的配置。
- 确认问题发生在受支持的 iOS 设备和环境中,并记录
flutter_stripe与 Stripe iOS SDK 的版本。目前的信息不足以判断问题是否与具体版本有关。
对照初始化流程
你贴出的调用顺序是先初始化,再展示 PaymentSheet。可以保留这个流程,同时检查运行时传入的配置是否符合预期:
applePay: const PaymentSheetApplePay(
merchantCountryCode: 'ES',
),
排查时,可在服务端记录这笔 PaymentIntent 的 ID、所属账户和 payment_method_types,再确认客户端使用同一个 PaymentIntent 的 client_secret 初始化 PaymentSheet。如果这些信息都一致,但按钮仍未显示,再根据实际 iOS 工程的 Merchant ID 配置和 SDK 版本继续排查。
仅凭新增 Link 不能认定它是原因。目前没有足够信息将按钮缺失归因于 changelog 中的变化。
备注:内容仅供参考。
