Apple Pay (OC)
先簡(jiǎn)單介紹一下
1.首先呢來說一說Apple Pay 的使用前提
1)設(shè)備的支持(iPhone6以上版本)
iPhone設(shè)備 支持手機(jī)app內(nèi)支付 店內(nèi)支付
Apple Watch 支持店內(nèi)支付
iPad 支持app內(nèi)支付
2)系統(tǒng)的支持(iOS8.0+版本袜刷,最好升級(jí)到當(dāng)前最新版本iOS9.2)(iOS9.2,Apple Pay 增加了對(duì)銀聯(lián)卡的支持,此時(shí)就意味著可以在國(guó)內(nèi)使用了)
使用的時(shí)候 需要在wallet應(yīng)用當(dāng)中水泉,輸入銀行卡信息(銀行支持)
2.應(yīng)用場(chǎng)景呢
1)線下支付 (商家支持:要求必須有支持NFC的刷卡機(jī))
2)線上支付
接下來要說的就是app開發(fā)集成步驟了
1.配置支付環(huán)境
1)使用XCode創(chuàng)建一個(gè)工程窒盐,并設(shè)置好對(duì)應(yīng)的BundleID
//com.sn.ApplePay
2)注冊(cè)并配置一個(gè)商業(yè)標(biāo)示符
登陸開發(fā)者中心
進(jìn)入證書配置欄目
添加一個(gè)App ID (App Services開啟Apple Pay)
配置Merchant ID
為Merchant ID 配置證書,并下載證書安裝到鑰匙串 (會(huì)有一個(gè)問題提示是否支持美國(guó)以外的地區(qū)使用蟹漓,選擇yes no是不同的,按照提示做就可以)
檢查安裝到鑰匙串中的證書是否有效
綁定Merchant ID到App ID
3)配置XCode項(xiàng)目葡粒,開啟Apple Pay功能
系統(tǒng)版本調(diào)到最低iOS8.0
開啟Apple Pay功能
2.代碼實(shí)現(xiàn)
#import?//支付框架
-?(void)appLePayDemo?{
//PKPaymentButton//自帶樣式按鈕?(Apple?Pay)
//判斷當(dāng)前設(shè)備是否支持蘋果支付
if(![PKPaymentAuthorizationViewController?canMakePayments])?{
NSLog(@"當(dāng)前設(shè)備不支持Apply?Pay");
return;
}
//判斷是否添加了銀行卡
/*
extern?NSString?*?const?PKPaymentNetworkAmex?NS_AVAILABLE(NA,?8_0);
extern?NSString?*?const?PKPaymentNetworkChinaUnionPay?NS_AVAILABLE(NA,?9_2);
extern?NSString?*?const?PKPaymentNetworkDiscover?NS_AVAILABLE(NA,?9_0);
extern?NSString?*?const?PKPaymentNetworkInterac?NS_AVAILABLE(NA,?9_2);
extern?NSString?*?const?PKPaymentNetworkMasterCard?NS_AVAILABLE(NA,?8_0);
extern?NSString?*?const?PKPaymentNetworkPrivateLabel?NS_AVAILABLE(NA,?9_0);
extern?NSString?*?const?PKPaymentNetworkVisa?NS_AVAILABLE(NA,?8_0);
*/
//?目前判斷?visa卡?銀聯(lián)卡?銀聯(lián)卡(iOS9.2)
if(![PKPaymentAuthorizationViewController?canMakePaymentsUsingNetworks:@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay]])?{
//創(chuàng)建一個(gè)按鈕用戶點(diǎn)擊跳轉(zhuǎn)添加銀行卡的界面
PKPaymentButton?*?button?=?[PKPaymentButton?buttonWithType:PKPaymentButtonTypeSetUp?style:PKPaymentButtonStyleWhiteOutline];
//添加到界面上
//添加點(diǎn)擊事件
[button?addTarget:self?action:@selector(jump)?forControlEvents:UIControlEventTouchUpInside];
}
//創(chuàng)建一個(gè)購(gòu)買按鈕
PKPaymentButton?*?button?=?[PKPaymentButton?buttonWithType:PKPaymentButtonTypeBuy?style:PKPaymentButtonStyleBlack];
//添加到界面上
//添加點(diǎn)擊事件
[button?addTarget:self?action:@selector(buy)?forControlEvents:UIControlEventTouchUpInside];
}
//跳轉(zhuǎn)到添加銀行卡界面
-?(void)jump?{
PKPassLibrary?*?pl?=?[[PKPassLibrary?alloc]?init];
[pl?openPaymentSetup];
}
//購(gòu)買商品
-?(void)buy?{
//創(chuàng)建一個(gè)支付請(qǐng)求
PKPaymentRequest?*?request?=?[[PKPaymentRequest?alloc]?init];
//配置支付請(qǐng)求
//配置商家ID
request.merchantIdentifier?=?@"Merchant?ID";//商家ID
//配置貨幣代碼?以及國(guó)家代碼?(中國(guó)的)
request.currencyCode?=?@"CNY";
request.countryCode?=?@"CN";
//配置請(qǐng)求支持的支付網(wǎng)絡(luò)//與上面判斷最好一致
request.supportedNetworks?=?@[PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];
//配置商戶處理方式
/*
PKMerchantCapability3DS?????????????????????????????????=?1UL?<<?0,???//?Merchant?supports?3DS
PKMerchantCapabilityEMV?????????????????????????????????=?1UL?<<?1,???//?Merchant?supports?EMV
PKMerchantCapabilityCredit?NS_ENUM_AVAILABLE_IOS(9_0)???=?1UL?<<?2,???//?Merchant?supports?credit
PKMerchantCapabilityDebit??NS_ENUM_AVAILABLE_IOS(9_0)???=?1UL?<<?3????//?Merchant?supports
PKMerchantCapability3DS?|?PKMerchantCapabilityEMV...
*/
request.merchantCapabilities?=?PKMerchantCapability3DS;
//配置購(gòu)買的商品列表
/*
+?(instancetype)summaryItemWithLabel:(NSString?*)label?amount:(NSDecimalNumber?*)amount;
+?(instancetype)summaryItemWithLabel:(NSString?*)label?amount:(NSDecimalNumber?*)amount?type:(PKPaymentSummaryItemType)type?NS_AVAILABLE(NA,?9_0);
PKPaymentSummaryItemTypeFinal,??????//?The?payment?summary?item's?amount?is?known?to?be?correct?確定的
PKPaymentSummaryItemTypePending?????//?The?payment?summary?item's?amount?is?estimated?or?unknown?-?e.g,?a?taxi?fare?不確定的
*/
//注意:?支付列表最后一個(gè)代表匯總
NSDecimalNumber?*?price1?=?[NSDecimalNumber?decimalNumberWithString:@"10.00"];
PKPaymentSummaryItem?*?item1?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"商品名稱"amount:price1];
NSDecimalNumber?*?price2?=?[NSDecimalNumber?decimalNumberWithString:@"10.00"];
PKPaymentSummaryItem?*?item2?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"商品名稱"amount:price2];
//匯總以上兩個(gè)商品
NSDecimalNumber?*?price3?=?[NSDecimalNumber?decimalNumberWithString:@"20.00"];
PKPaymentSummaryItem?*?item3?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"某某公司或者商城"amount:price3];
request.paymentSummaryItems?=?@[item1,item2,item3];
//配置請(qǐng)求的附加項(xiàng)
/*
PKAddressFieldNone
PKAddressFieldPostalAddress
PKAddressFieldPhone
PKAddressFieldEmail
PKAddressFieldName
PKAddressFieldAll
*/
//是否顯示?invoice?收貨地址?顯示哪些選項(xiàng)
request.requiredBillingAddressFields?=?PKAddressFieldAll;
//是否顯示快遞地址?顯示哪些選項(xiàng)
request.requiredShippingAddressFields?=?PKAddressFieldAll;
//配置快遞方式?NSArray?
NSDecimalNumber?*?p1?=?[NSDecimalNumber?decimalNumberWithString:@"18.00"];
PKShippingMethod?*?method1?=?[PKShippingMethod?summaryItemWithLabel:@"順風(fēng)快遞"amount:p1];
method1.identifier?=?@"shunfeng";
//詳細(xì)描述
method1.detail?=?@"24小時(shí)送到";
NSDecimalNumber?*?p2?=?[NSDecimalNumber?decimalNumberWithString:@"10.00"];
PKShippingMethod?*?method2?=?[PKShippingMethod?summaryItemWithLabel:@"申通快遞"amount:p2];
method2.identifier?=?@"shentong";
method2.detail?=?@"送貨上門";
request.shippingMethods?=?@[method1,method2];
//配置快遞的類型?自取?等
/*
PKShippingTypeShipping,
PKShippingTypeDelivery,
PKShippingTypeStorePickup,
PKShippingTypeServicePickup
*/
request.shippingType?=?PKShippingTypeStorePickup;
//添加一些附加的數(shù)據(jù)
request.applicationData?=?[@"buyID=12345"dataUsingEncoding:NSUTF8StringEncoding];
//驗(yàn)證用戶的支付授權(quán)
PKPaymentAuthorizationViewController?*?avc?=?[[PKPaymentAuthorizationViewController?alloc]?initWithPaymentRequest:request];
[self?presentViewController:avc?animated:YES?completion:nil];
}