You need to enable JavaScript to run this app. Swift:如何从STPPaymentOptionsViewController获取cardParams和billingDetails
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何从STPPaymentOptionsViewController获取cardParams和billingDetails

解决方案

方案1:通过STPPaymentOptionsViewController属性直接获取(官方推荐)

你不需要手动拦截STPAddCardViewController的用户输入内容,STPPaymentOptionsViewController已默认完成了参数收集、支付方式创建、同步到Stripe客户账户的全流程。
用户完成卡片添加后,可在paymentOptionsViewControllerDidFinish代理方法中通过selectedPaymentOption属性直接读取选中的支付方式对象,从中提取你需要的所有参数:

func paymentOptionsViewControllerDidFinish(_ paymentOptionsViewController: STPPaymentOptionsViewController) {
    // 读取选中的支付方式
    guard let paymentMethod = paymentOptionsViewController.selectedPaymentOption as? STPPaymentMethod else {
        return
    }
    // 1. 获取卡参数
    if let cardInfo = paymentMethod.card {
        // 可读取卡品牌、后四位、有效期等公开卡信息
        print("卡品牌:\(cardInfo.brand.rawValue),卡后四位:\(cardInfo.last4 ?? "")")
    }
    // 2. 获取账单详情
    if let billingInfo = paymentMethod.billingDetails {
        // 可读取姓名、邮箱、地址、电话等账单信息
        print("账单姓名:\(billingInfo.name ?? ""),联系邮箱:\(billingInfo.email ?? "")")
    }
    // 直接生成STPPaymentMethodParams供后续接口调用
    let paymentParams = STPPaymentMethodParams(paymentMethod: paymentMethod)
    // 此处执行后续支付逻辑
}

方案2:自定义卡片添加流程拦截原始参数

如果你需要在用户提交卡片信息的第一时间就获取原始的cardParams和billingDetails,可以手动接管添加卡片的弹出逻辑:

  1. 先关闭STPPaymentOptionsViewController默认的添加卡片入口,自己实现添加卡片按钮
  2. 主动创建STPAddCardViewController并设置代理,在代理回调中直接获取参数:
// 实现STPAddCardViewControllerDelegate方法
func addCardViewController(_ addCardVC: STPAddCardViewController, didFinishWith paymentMethod: STPPaymentMethod, completion: @escaping (Error?) -> Void) {
    // 直接获取原始卡参数
    let cardParams = addCardVC.cardParams
    // 直接获取原始账单详情
    let billingDetails = addCardVC.billingDetails
    // 完成后续处理后调用completion关闭控制器
    completion(nil)
}

注意:如果采用方案2,你需要自己实现支付方式上传、同步到客户账户的逻辑,没有特殊需求优先选择方案1即可。

内容的提问来源于stack exchange,提问作者e.iluf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:15:01