KMApplePay.swift 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // KMApplePay.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by lizhe on 2024/11/13.
  6. //
  7. import Cocoa
  8. import PassKit
  9. class KMApplePay: NSObject,PKPaymentAuthorizationViewControllerDelegate {
  10. func startApplePayProcess(viewController: NSViewController) {
  11. // 1. 检查设备是否支持 Apple Pay
  12. guard PKPaymentAuthorizationViewController.canMakePayments() else {
  13. print("Apple Pay is not available on this device.")
  14. return
  15. }
  16. // 2. 设置支付请求
  17. let paymentRequest = PKPaymentRequest()
  18. paymentRequest.merchantIdentifier = "your.merchant.id" // 替换为你的商户 ID
  19. paymentRequest.supportedNetworks = [.visa, .masterCard, .amex]
  20. paymentRequest.merchantCapabilities = .capability3DS
  21. paymentRequest.countryCode = "US" // 设置你的国家代码
  22. paymentRequest.currencyCode = "USD" // 设置货币代码
  23. // 设置支付摘要项
  24. paymentRequest.paymentSummaryItems = [
  25. PKPaymentSummaryItem(label: "Product Name", amount: NSDecimalNumber(value: 10.00)),
  26. PKPaymentSummaryItem(label: "Total", amount: NSDecimalNumber(value: 10.00))
  27. ]
  28. // 3. 初始化并显示支付授权界面
  29. if let paymentVC = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest) {
  30. paymentVC.delegate = self
  31. NSWindow.currentWindow().beginSheet(NSWindow(contentViewController: paymentVC)) { response in
  32. }
  33. // viewController.presentAsSheet(paymentVC) // 在 macOS 上以模态窗口方式展示
  34. } else {
  35. print("Unable to present Apple Pay authorization view controller.")
  36. }
  37. }
  38. // MARK: - PKPaymentAuthorizationViewControllerDelegate Methods
  39. // 用户授权后调用
  40. func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController,
  41. didAuthorizePayment payment: PKPayment,
  42. handler completion: @escaping (PKPaymentAuthorizationResult) -> Void) {
  43. // 在此处处理支付(例如,向你的服务器发送支付数据)
  44. // 模拟成功的支付授权
  45. let status = PKPaymentAuthorizationStatus.success
  46. completion(PKPaymentAuthorizationResult(status: status, errors: nil))
  47. }
  48. // 用户取消支付时调用
  49. func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
  50. controller.dismiss(nil) // 关闭支付界面
  51. }
  52. func paymentAuthorizationViewControllerWillAuthorizePayment(_ controller: PKPaymentAuthorizationViewController) {
  53. }
  54. }