iOS開發-Apple Pay-蘋果支付
Apple Pay,是蘋果公司在2014年蘋果秋季新品發布會上發布的一種基于NFC(近場通訊)的手機支付功能,2016年2月18日凌晨5點,Apple Pay業務在中國上線。
它的支付方式是通過 Touch ID/Passcode 驗證方式,用戶可使用事先已經儲存在IPhone 6 ,6p或者更新設備上的銀行卡支付證書來授權支付,當然最新的5e,同樣支持Apple Pay支付。
也就是說你的蘋果設備要在IOS8.0及以上版本,并在wallet應用中,添加銀行卡信息,從而使用Apple Pay。
它所支持的銀行可以到官方查看,這里給出 官方鏈接
手機怎么添加銀行卡,這里不過多介紹,只需要按照手機提示即可。
和支付寶和微信等第三方支付的區別?
首先Apple Pay支付必須要Iphone手機,并且不低于iphone6。
但是Apple Pay對于支付無需聯網也可以使用,使用的是 NFC 近場通訊。
對于支付寶和微信,他們的功能可以說更多,不光支付,還可以進行理財、轉賬等一系列的玩法,這是因為我們已經將錢轉給第三方,而Apple Pay的錢從始至終都在你自己的銀行卡里,它所儲蓄的只是你銀行卡的電子信息,當你進行支付的時候,相當于你與銀行直接對接,不會講錢在經過別的第三方,從而安全性,是支付寶,微信等第三方不可比的。
它的付款流程如下圖:
集成
Apple Pay的集成可以說是相當的簡單的,只不過在這里需要我們用到證書,蘋果也給出了Apple Pay的集成教程, 地址在這里 .
這里怎么添加證書我只簡單的說一下,大家應該都很熟了
1.登錄開發者賬號,添加 App ID (記得勾選下面的Apple Pay)
2.添加 Merchant IDs
3.將創建的App ID里面的Apple Pay設置自己的Merchant IDs
4.檢查App ID里面的Apple Pay的兩個選項是否都為綠色
5.創建 Merchant 證書,綁定App ID并安裝
Apple Pay原理圖:
設置Xcode
在Xcode中,將 Capabilities 中的Apple Pay開啟
中間會生成你設置的App ID,將其勾選。
判斷當前設備是否可以支付?
首先我們要導入頭文件 import PassKit .
添加判斷代碼
//判斷設備是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判斷是否添加了銀行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{
}else
{
}
創建支付按鈕
但我們判斷了設備時候支持支付和是否添加銀行卡后,我們需要再次創建按鈕,這里用到的不是 UIButton 而是 PKPaymentButton 代碼如下
//判斷設備是否支持Apple Pay
if !PKPaymentAuthorizationViewController.canMakePayments()
{
print("不支持Apple Pay")
// 判斷是否添加了銀行卡
}else if !PKPaymentAuthorizationViewController.canMakePaymentsUsingNetworks([PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay])
{
//創建跳轉按鈕
let btn = PKPaymentButton.init(type: PKPaymentButtonType.SetUp, style: PKPaymentButtonStyle.WhiteOutline)
btn.addTarget(self, action: #selector(ViewController.jumpBankCard), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)
}else
{
//創建支付按鈕
let btn = PKPaymentButton.init(type: PKPaymentButtonType.Buy, style: PKPaymentButtonStyle.Black)
btn.addTarget(self, action: #selector(ViewController.buyShop), forControlEvents: UIControlEvents.TouchUpInside)
btn.frame = CGRect(x: 100, y: 100, width: 100, height: 20)
view.addSubview(btn)
}
分別創建了兩個按鈕, 一個在沒用添加銀行卡的情況下, 另一個是全部通過, 支付按鈕
這里我們在 跳轉銀行卡方法 代碼如下
//跳轉添加銀行卡頁面
func jumpBankCard(){
PKPassLibrary().openPaymentSetup()
print("跳轉設置界面")
}
開始支付請求
支付請求按鈕 ,里面要特別說明一下,在方法里面,雖然我們可以直接創建支付請求 let request = PKPaymentRequest() ,并用 PKPaymentAuthorizationViewController 跳轉,但是這樣會直接崩潰,因為你的支付請求里面沒有添加信息
直接看代碼:
//購買
func buyShop(){
print("開始購買")
//1.創建支付請求
let request = PKPaymentRequest()
//2.配置商家ID
request.merchantIdentifier = "yimouelng.com";
//3.配置貨幣代碼和國家代碼
request.countryCode = "CN";
request.currencyCode = "CNY";
//4.配置請求支持的支付網絡
request.supportedNetworks = [PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
//5.配置處理方式
request.merchantCapabilities = PKMerchantCapability.Capability3DS
//6.配置購買的商品列表 注意支付列表最后一個代表總和 注意名稱和價錢
let num = NSDecimalNumber.init(string:"988")
let item = PKPaymentSummaryItem.init(label: "商品", amount: num)
request.paymentSummaryItems = [item]
//附加選項(選填) --------
request.requiredBillingAddressFields = PKAddressField.All//添加收貨地址
request.requiredShippingAddressFields = PKAddressField.All//運輸地址
//添加快遞
let price = NSDecimalNumber.init(string:"988")
let method = PKShippingMethod.init(label: "順豐", amount: price)
method.identifier = "sf"
method.detail = "貨到付款"http://備注
request.shippingMethods = [method]
request.applicationData = "id = 1" .dataUsingEncoding(NSUTF8StringEncoding)//添加附加數據
//7.驗證用戶的支付請求并跳轉支付頁面
let auth = PKPaymentAuthorizationViewController.init(paymentRequest: request)
self.presentViewController(auth, animated: true, completion: nil)
}
這里附加選項里面的可填可不填,但是上面的內容必填
這里需要注意的是 第6步是配置購買的商品列表 注意支付列表最后一個代表總和 注意名稱和價錢
比如你添加了三個商品,前兩個每個都是10元, 而最后一個名字最好使用商家名字,加個則是前兩個的總和
代碼到這里就結束了,沒有什么難度,只有幾個小點需要注意一下,也都以注明。
總結
代碼看一遍就能記住,不需要硬背,如果有錯誤請及時指出。
Demo用swift寫的,后又寫了一個OC版的,都會在這里放出,點擊下載。
來自:http://yimouleng.com/2016/05/27/ios-ApplePay/