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,可以手动接管添加卡片的弹出逻辑:
- 先关闭STPPaymentOptionsViewController默认的添加卡片入口,自己实现添加卡片按钮
- 主动创建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
相关产品推荐
相关产品推荐

