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

安装StripeCardScan后,STPPaymentCardTextField无法接收程序化卡号输入

问题根源与解决方案

核心问题

你直接修改STPPaymentCardTextField的paymentMethodParams.card是无效的——因为paymentMethodParams是只读属性,它是根据输入框当前的UI内容动态生成的,手动修改这个对象不会同步到输入框的显示上。

正确的赋值方式

要给STPPaymentCardTextField程序化设置卡号,得用它提供的专门方法:setCardNumber(_:),如果扫描结果包含有效期、CVC信息,也可以用对应方法设置:

修改你的代码如下:

cardScanSheet.present(from: self) { [weak self] result in
    var title = ""
    var message = ""
    
    switch result {
    case .completed(let card):
        title = "Scan Completed"
        message = card.pan
        // 直接调用输入框的卡号设置方法
        self?.addCardView.cardField.setCardNumber(card.pan)
        // 若扫描到有效期,同步设置
        if let expMonth = card.expMonth, let expYear = card.expYear {
            self?.addCardView.cardField.setExpirationMonth(expMonth)
            self?.addCardView.cardField.setExpirationYear(expYear)
        }
        print("card pan: \(card.pan)")
    case .canceled:
        title = "Scan Canceled"
        message = "Canceled the scan"
    case .failed(let error):
        title = "Scan Failed"
        message = "Failed with error: \(error.localizedDescription)"
    }
}

关于代理的疑问

代理(STPPaymentCardTextFieldDelegate)不是导致赋值失败的原因,它的作用是监听输入框的内容变化、验证状态、编辑事件等。如果你的业务需要这些回调(比如输入完成后自动提交),再设置代理即可,不需要为了赋值专门配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:40:41