如果需要第一阶段,证书申请,请移步 《XZ_iOS 之 ApplePay支付看这一篇就够了-第一阶段》
申请完证书之后,现在开始工程配置,你也可以先创建好工程,设置好Bundle Identifier再申请证书。
首先,创建工程,确保 Bundle Identifier 跟申请 Merchant ID 的一样
设置好 Bundle Identifier 和 Team 之后,点击 Capabilities,设置 Apple Pay
从右侧会发现 entitlements 里面包含 Merchant ID
至此,工程配置完毕,可以开始写代码,下面放上一张效果图供大家参考:
吊起支付之前,首先需要 检查用户是否支持 Apple Pay
// 检查用户是否支持 Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments() {
print("设备不支持 Apple Pay")
return
}
然后需要 检查是否支持用户卡片
// 检查是否支付用户卡片
var paymentNetworks = [PKPaymentNetwork]()
if #available(iOS 9.2, *) { // 银联卡要求 iOS 9.2+
paymentNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard, PKPaymentNetwork.chinaUnionPay]
}else {
paymentNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard]
}
if !PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: paymentNetworks) {
print("不支持的卡片类型。目前仅支持 Visa、MasterCard、中国银联卡。")
return
}
然后就是发起支付,以下是支付的完整代码:
/// 创建支付请求
func beginPayAction() {
let request = PKPaymentRequest()
// 设置可进行支付的银行卡
if #available(iOS 9.2, *) {
request.supportedNetworks = [PKPaymentNetwork.amex, PKPaymentNetwork.masterCard, PKPaymentNetwork.visa, PKPaymentNetwork.chinaUnionPay]
} else {
request.supportedNetworks = [PKPaymentNetwork.amex, PKPaymentNetwork.masterCard, PKPaymentNetwork.visa]
}
if PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: request.supportedNetworks) {
print("可以支付,开始建立支付请求")
// 国家代码
request.countryCode = "CN"
// 人民币
request.currencyCode = "CNY"
// 申请的 merchantID
request.merchantIdentifier = "merchant.com.xz.ApplePay"
// 设置处理协议,3DS必须支持,EMV为可选,国内的最好两者
request.merchantCapabilities = PKMerchantCapability.capability3DS
// 设置发票配送信息和货物配送地址信息
let fields:Set<PKContactField> = [.postalAddress, .phoneNumber, .name]
request.requiredShippingContactFields = fields
// 设置订单详情
let wax = PKPaymentSummaryItem(label: "订单金额", amount: NSDecimalNumber(string: "100"))
let total = PKPaymentSummaryItem(label: "支付给谁", amount: wax.amount)
// let discount = PKPaymentSummaryItem(label: "优惠折扣", amount: NSDecimalNumber(string: "14.32"))
// discount
request.paymentSummaryItems = [wax, total]
// 设置2种配送方式
let freeShipping = PKShippingMethod(label: "包邮", amount: NSDecimalNumber.zero)
freeShipping.identifier = "freeShipping"
freeShipping.detail = "3-8天 送达"
let moneyShipping = PKShippingMethod(label: "快递", amount: NSDecimalNumber(string: "10.00"))
moneyShipping.identifier = "moneyShipping"
moneyShipping.detail = "1-3天 送达"
request.shippingMethods = [freeShipping, moneyShipping]
// 弹出付款页
let vc = PKPaymentAuthorizationViewController(paymentRequest: request)
vc?.delegate = self
present(vc!, animated: true, completion: nil)
}else {
print("您没有绑定任何银行卡或者当前设备不支持ApplePay")
}
}
下面附上 demo,由于证书问题,demo可能无法运行。喜欢的朋友欢迎star