【问题标题】:PKPaymentAuthorizationController not calling delegate methods and freezing when "Cancel" is pressedPKPaymentAuthorizationController 不调用委托方法并在按下“取消”时冻结
【发布时间】:2020-01-01 21:30:12
【问题描述】:

在我的 Intents 扩展程序中,我使用PKPaymentAuthorizationController 来允许用户付款。我围绕它创建了一个包装器,如下所示:

class ApplePayModalController: NSObject {

  public typealias AuthorizationHandler = (ApplePayModalController, PKPayment, (PKPaymentAuthorizationResult) -> Void) -> Void

  private var onAuthorize: AuthorizationHandler?

  func present(paymentRequest: PKPaymentRequest, onAuthorize: @escaping AuthorizationHandler) {
    let controller = PKPaymentAuthorizationController(paymentRequest: paymentRequest)
    self.onAuthorize = onAuthorize
    controller.delegate = self
    controller.present()
  }

}

extension ApplePayModalController: PKPaymentAuthorizationControllerDelegate {

  func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
    controller.dismiss()
  }

  func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController, didAuthorizePayment payment: PKPayment, handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
    guard let onAuthorize = self.onAuthorize else {
      return completion(.init(status: .failure, errors: nil))
    }

    onAuthorize(self, payment, completion)
  }

}

这就是我获取用于展示它的 PKPaymentRequest 的地方:

  public func createPKRequest(order: Order) -> PKPaymentRequest {
    let paymentRequest = Stripe.paymentRequest(withMerchantIdentifier: PaymentRepository.merchantIdentifier, country: "US", currency: "USD")
    paymentRequest.paymentSummaryItems = [
      PKPaymentSummaryItem(label: "HSCO", amount: 1.00),
      PKPaymentSummaryItem(label: "Phil", amount: NSDecimalNumber(value: Double(order.price) / 100))
    ]
    paymentRequest.shippingType = .storePickup
    paymentRequest.requiredBillingContactFields = [PKContactField.postalAddress]

    return paymentRequest
  }

但是,当我展示控制器时,我遇到了以下问题:

  1. 按下“取消”按钮会导致整个控制器停止工作。我无法更改付款方式,它不会关闭,并且“付款”按钮也停止响应。但是,我仍然可以在控制器外部点按以将其关闭

  2. 委托方法根本没有触发。我尝试添加更多委托方法,但也没有触发;因此,我无法处理付款授权。

  3. 当我尝试用不同的卡支付时控制器的行为不一致。使用 Apple Amex 测试卡,尝试付款将立即失败;使用 Apple 测试 Visa,它会卡在“处理”状态 15-20 秒,然后显示“Apple Pay 未完成”的警报 (Same as this post)

这一切都在 iPhone X、iOS 12.1.4 上运行,在沙盒模式下使用 Apple Pay。

【问题讨论】:

  • 你弄明白了吗?

标签: ios swift applepay siri sirikit


【解决方案1】:

确保您的ApplePayModalController 实例生命周期长于您的付款流程。尝试使用静态 ApplePayModalController 单例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 2014-11-21
    • 2017-02-14
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多