Apple Pay-swift篇

这是上一篇的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)
    }
    

}

转载于:https://my.oschina.net/snOS/blog/707857

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值