Apple Pay (OC)

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è)購買按鈕

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];

}

//購買商品

-?(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;

//配置購買的商品列表

/*

+?(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];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容