XZ_iOS 之 ApplePay支付看这一篇就够了-第二阶段

如果需要第一阶段,证书申请,请移步 《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

猜你喜欢

转载自blog.csdn.net/understand_XZ/article/details/89361977
今日推荐