UIViewRepresentable 中 STPAuthenticationContext 的问题

问题描述

我正在尝试在 SwiftUI 上实现 Stripe。用户注册后,我希望他们在不进行实际付款的情况下向其帐户添加付款方式。我已经使用 UIViewRepresentable 成功创建了 STPPaymentCardTextField。但是,我在使用 STPAuthenticationContext 时遇到了问题。我不太确定如何解决这个问题,因为 Stripe 文档中的示例都是针对 UIKit 的。这是我目前所拥有的:

struct StripePaymentCardTextField: UIViewRepresentable {

@Binding var cardParams: STPPaymentMethodCardParams
@Binding var isValid: Bool

func makeUIView(context: Context) -> STPPaymentCardTextField {
    let input = STPPaymentCardTextField()
    input.borderWidth = 0
    input.backgroundColor = UIColor(ColorManager.brandGray)
    input.cornerRadius = 10
    input.becomeFirstResponder()
    input.delegate = context.coordinator
    
    return input
}

func makeCoordinator() -> StripePaymentCardTextField.Coordinator { Coordinator(self) }

func updateUIView(_ view: STPPaymentCardTextField,context: Context) { }

class Coordinator: NSObject,STPPaymentCardTextFieldDelegate,STPAuthenticationContext {
    
    func authenticationPresentingViewController() -> UIViewController {
        return self
    }
    
    var parent: StripePaymentCardTextField
    
    init(_ textField: StripePaymentCardTextField) {
        parent = textField
    }
    
    func paymentCardTextFieldDidChange(_ textField: STPPaymentCardTextField) {
        parent.cardParams = textField.cardParams
        parent.isValid = textField.isValid
    }
    
    func createPaymentMethod(setupIntentClientSecret: String) {
        let paymentMethodParams = STPPaymentMethodParams(card: parent.cardParams,billingDetails: nil,Metadata: nil)
        let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: setupIntentClientSecret)
        
        setupIntentParams.paymentMethodParams = paymentMethodParams
        
        let paymentHandler = STPPaymentHandler.shared()
        paymentHandler.confirmSetupIntent(setupIntentParams,with: self) { (status,setupIntent,error) in
            switch (status) {
            case .Failed:
                // Setup Failed
                break
            case .canceled:
                // Setup canceled
                break
            case .succeeded:
                // Setup succeeded
                break
            @unkNown default:
                fatalError()
                break
            }
        }
    }
}

}

在以下代码行中,我收到错误“无法将类型为‘StripePaymentCardTextField.Coordinator’的返回表达式转换为返回类型‘UIViewController’”

func authenticationPresentingViewController() -> UIViewController {
    return self
}

任何帮助将不胜感激! :)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)