【发布时间】: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
}
但是,当我展示控制器时,我遇到了以下问题:
按下“取消”按钮会导致整个控制器停止工作。我无法更改付款方式,它不会关闭,并且“付款”按钮也停止响应。但是,我仍然可以在控制器外部点按以将其关闭
委托方法根本没有触发。我尝试添加更多委托方法,但也没有触发;因此,我无法处理付款授权。
当我尝试用不同的卡支付时控制器的行为不一致。使用 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