这是上一篇的OC版 有一些文字说明,Merchant ID 证书配置 可以参照
补充一点证书方面的东西
签发机构在钥匙串中是以Apple Worldwide Developer Relations开头的证书 Apple Worldwide Developer Relations Certification Authority(简称AppleWWDRCA)基本上普通的开发证书都是AppleWWDRCA签发者 用到Apple pay可能会接触到Apple Worldwide Developer Relations CA - G2(简称AppleWWDRCAG2)
Apple Pay 证书无效 提示未知颁发机构签名 下载证书进行安装
如图:
代码说明如下:
import UIKit
import PassKit
class ViewController: UIViewController ,PKPaymentAuthorizationViewControllerDelegate{
var payStrings:[String]!
@IBOutlet weak var pay: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func payAction(sender: UIButton) {
self.applePay()
}
func applePay() {
//PKPaymentButton//自带样式按钮
//判断是否支持苹果支付
if !PKPaymentAuthorizationViewController.canMakePayments() {
print("当前设备不支持")
let alert = UIAlertController.init(title: "设备不支持", message: "", preferredStyle: UIAlertControllerStyle.Alert)
let confirm = UIAlertAction.init(title: "确认", style: UIAlertActionStyle.Default, handler: { (confirm) in
})
alert.addAction(confirm)
self.presentViewController(alert, animated: true, completion: nil)
return
}
/*
@available(iOS 9.0, *)
public let PKEncryptionSchemeECC_V2: String
@available(iOS 8.0, *)
public let PKPaymentNetworkAmex: String
@available(iOS 9.2, *)
public let PKPaymentNetworkChinaUnionPay: String
@available(iOS 9.0, *)
public let PKPaymentNetworkDiscover: String
@available(iOS 9.2, *)
public let PKPaymentNetworkInterac: String
@available(iOS 8.0, *)
public let PKPaymentNetworkMasterCard: String
@available(iOS 9.0, *)
public let PKPaymentNetworkPrivateLabel: String
@available(iOS 8.0, *)
public let PKPaymentNetworkVisa: String
*/
//目前判断 visa卡 MasterCard 银联卡 (银联卡 iOS9.2开始支持)
if #available(iOS 9.2, *) {
payStrings = [PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkMasterCard]
} else {
payStrings = [PKPaymentNetworkVisa,PKPaymentNetworkMasterCard]
}
if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks(payStrings) {
let alert = UIAlertController.init(title: "没有可支持的卡片类型", message: "", preferredStyle: UIAlertControllerStyle.Alert)
let confirm = UIAlertAction.init(title: "确认", style: UIAlertActionStyle.Default, handler: { (confirm) in
})
alert.addAction(confirm)
self.presentViewController(alert, animated: true, completion: nil)
return
}
let button = UIButton.init(type: UIButtonType.Custom)
button.frame = CGRectMake(100, 100, 100, 35)
button.backgroundColor = UIColor.blackColor()
button.setTitle("支付", forState: UIControlState.Normal)
self.view.addSubview(button)
button.addTarget(self, action: #selector(ViewController.addPay(_:)), forControlEvents:UIControlEvents.TouchUpInside)
}
func addPay(btn:UIButton) {
//可打开卡包
// let pk = PKPassLibrary()
// if #available(iOS 8.3, *) {
// pk.openPaymentSetup()
// }
//创建一个支付请求
let payMentRequest = PKPaymentRequest()
//配置支付请求
//配置商家id
payMentRequest.merchantIdentifier = "merchant.com.sn.ApplePaySwiftDemo"
//配置货币代码 以及国家代码(中国的)
payMentRequest.currencyCode = "CNY"
payMentRequest.countryCode = "CN"
//配置请求支持的支付网络,支持的卡片
payMentRequest.supportedNetworks = payStrings
//配置商户处理方式
/*
public static var Capability3DS: PKMerchantCapability { get } // Merchant supports 3DS
public static var CapabilityEMV: PKMerchantCapability { get } // Merchant supports EMV
@available(iOS 9.0, *)
public static var CapabilityCredit: PKMerchantCapability { get } // Merchant supports credit
@available(iOS 9.0, *)
public static var CapabilityDebit: PKMerchantCapability { get } // Merchant supports debit
*/
payMentRequest.merchantCapabilities = PKMerchantCapability.Capability3DS
//配置购买商品的列表
/*
public convenience init(label: String, amount: NSDecimalNumber)
@available(iOS 9.0, *)
public convenience init(label: String, amount: NSDecimalNumber, type: PKPaymentSummaryItemType)
case Final // The payment summary item's amount is known to be correct 确定的付款 最后的
case Pending // The payment summary item's amount is estimated or unknown - e.g, a taxi fare 未知的付款 等待的
*/
let price1 = NSDecimalNumber.init(string: "0.01")
let item1 = PKPaymentSummaryItem.init(label: "商品名称", amount: price1)
// let item1:PKPaymentSummaryItem = PKPaymentSummaryItem.init(label: "商品名称", amount: price1, type: PKPaymentSummaryItemType.Final)
let price2 = NSDecimalNumber.init(string: "0.01")
let item2 = PKPaymentSummaryItem.init(label: "商品名称", amount: price2)
//汇总
let price3 = NSDecimalNumber.init(string: "0.02")
let item3 = PKPaymentSummaryItem.init(label: "商品名称汇总", amount: price3)
payMentRequest.paymentSummaryItems = [item1,item2,item3]
//是否显示发票收货地址 显示哪些选项
payMentRequest.requiredBillingAddressFields = PKAddressField.All
//是否显示快递地址 显示哪些选项
payMentRequest.requiredShippingAddressFields = PKAddressField.All
//配置快递方式
let couries1 = NSDecimalNumber.init(string: "10.00")
let shipping1 = PKShippingMethod.init(label: "顺丰", amount: couries1)
shipping1.identifier = "shunfeng"
shipping1.detail = "24小时送货上门"
let couries2 = NSDecimalNumber.init(string: "5.00")
let shipping2 = PKShippingMethod.init(label: "申通", amount: couries2)
shipping2.identifier = "shentong"
shipping2.detail = "送货上门"
payMentRequest.shippingMethods = [shipping1,shipping2]
//配置快递类型 自取等
/*
case Shipping
case Delivery
case StorePickup
case ServicePickup
*/
if #available(iOS 8.3, *) {
payMentRequest.shippingType = PKShippingType.Shipping
}
//添加一些附加数据
payMentRequest.applicationData = "buyID = 123456".dataUsingEncoding(NSUTF8StringEncoding)
//验证用户的支付授权
let paymentAuthorizationVC = PKPaymentAuthorizationViewController.init(paymentRequest: payMentRequest)
paymentAuthorizationVC.delegate = self
self.presentViewController(paymentAuthorizationVC, animated: true, completion: nil)
}
func paymentAuthorizationViewControllerDidFinish(controller: PKPaymentAuthorizationViewController) {
self.dismissViewControllerAnimated(true, completion: nil)
}
func paymentAuthorizationViewController(controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, completion: (PKPaymentAuthorizationStatus) -> Void) {
print("\(payment.token)")
completion(.Success)
}
}