You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Stripe iOS SDK编译报错:STPPaymentResult类型无source成员

报错原因

你的判断准确,该报错是Stripe iOS SDK版本升级导致的接口变更:21.0.0及以上正式版本中,STPPaymentResult类的source属性被完全移除,原有基于Source的旧支付流程接口被废弃,统一替换为PaymentMethod体系的相关接口。

修复方案

方案1:适配新版SDK(推荐)

将原有获取支付凭证的逻辑从读取source改为读取新版的paymentMethod属性,同时同步调整前后端对接的字段名,修改后的代码如下:

func paymentContext(_ paymentContext: STPPaymentContext, didCreatePaymentResult paymentResult: STPPaymentResult, completion: @escaping STPErrorBlock) {
    // 新版SDK从paymentMethod属性获取支付标识
    let paymentMethodId = paymentResult.paymentMethod.stripeId
    
    // call api to process payment
    apiTask?.cancel()
    showLoading()
    // 注意将接口参数替换为和后端约定的PaymentMethod字段名
    apiTask = PaymentService.topUpBalance(paymentContext.paymentAmount, stripePaymentMethodId: paymentMethodId, completion: { (error) in
      completion(error)
    })
  }

如果你的后端之前是对接Stripe旧版Source创建Charge的逻辑,需要同步调整后端代码:将入参从Source ID改为接收PaymentMethod ID,调用Stripe官方新版接口创建PaymentIntent完成扣款即可。

  • PaymentMethod ID可以直接替代原有Source ID传入Stripe新版支付接口,支付能力完全兼容原有Source支持的卡支付、本地支付等场景
  • 适配时不要混用新旧版SDK的接口调用,否则会出现支付状态不匹配、扣款失败等问题

方案2:锁定SDK旧版本(临时兼容)

如果暂时无法调整前后端支付逻辑,可以在项目Podfile中锁定Stripe SDK到最后一个支持source属性的20.x正式版本,添加以下配置后执行pod install即可恢复原有代码编译:

pod 'Stripe', '~> 20.1.0'

注意:该方案仅作临时兼容使用,旧版本SDK不再获得官方安全更新,也无法支持后续新增的支付方式,建议尽快完成新版接口适配。

内容的提问来源于stack exchange,提问作者davidwim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:45:49