您的位置:首页 > 移动开发 > Swift

Apple Pay-swift篇

2016-07-07 00:00 435 查看
摘要: 针对swift写一篇Apple Pay

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Apple Pay swift 苹果支付