Apple Pay-swift篇
2016-07-07 00:00
435 查看
摘要: 针对swift写一篇Apple Pay
这是上一篇的OC版 有一些文字说明,Merchant ID 证书配置 可以参照
Apple Worldwide Developer Relations Certification Authority(简称AppleWWDRCA)基本上普通的开发证书都是AppleWWDRCA签发者
用到Apple pay可能会接触到Apple Worldwide Developer Relations CA - G2(简称AppleWWDRCAG2)
Apple Pay 证书无效 提示未知颁发机构签名
下载证书进行安装
如图:
![](https://static.oschina.net/uploads/img/201607/07162532_HXnL.png)
这是上一篇的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 证书无效 提示未知颁发机构签名
下载证书进行安装
如图:
![](https://static.oschina.net/uploads/img/201607/07162532_HXnL.png)
代码说明如下:
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) } }
相关文章推荐
- Apple Swift学习教程
- 介绍 Fedora 上的 Swift
- Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
- Swift自定义iOS中的TabBarController并为其添加动画
- Swift编程中的泛型解析
- Swift中定义二维数组的方法及遍历方法示例
- Swift实现Selection Sort选择排序算法的实例讲解
- 简单分析Swift语言的一些基本特征
- 使用 Swift 语言编写 Android 应用入门
- 理解二叉堆数据结构及Swift的堆排序算法实现示例
- Swift与C语言指针结合使用实例
- Swift心得笔记之控制流
- 用Swift构建一个简单的iOS邮件应用的方法
- 苹果公司推出的新编程语言Swift简介和入门教程
- Swift实现iOS应用中短信验证码倒计时功能的实例分享
- 使用Swift代码实现iOS手势解锁、指纹解锁实例详解
- 探讨Swift数组和字典
- Swift中的指针操作和使用详细介绍
- Swift代码实现冒泡排序算法的简单实例