生活随笔
收集整理的這篇文章主要介紹了
ApplePay集成教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Apple Pay運行環境:iPhone6以上設備,操作系統最低iOS9.0以上,部分信息設置需要iOS9.2以上。目前還不支持企業證書添加。
環境搭建好后可以在模擬器上面運行,xcode7.2.1+iPhone6SP9.2系統下,系統會綁定幾種虛擬的銀行卡,和幾個聯系人,方便調試,支付也不會發生真實的付款,真的很方便。
準備工作
在接入Apple Pay之前,首先要申請MerchantID及對應證書。
申請MerchantID
申請對應證書
工程設置
Capability中啟用Apple Pay權限,并選擇merchantID。
之后項目會多一個Applepay的配置文件ApplePayDemo.entitlements
如果Steps出現那三項就證明配置正確
[objc]?view plaincopy
#import?"ViewController.h"?? #import?<PassKit/PassKit.h>?? @interface?ViewController?()<PKPaymentAuthorizationViewControllerDelegate>?? {?? ????NSMutableArray?*summaryItems;?? ????NSMutableArray?*shippingMethods;?? }?? @end?? ?? @implementation?ViewController?? ?? -?(void)viewDidLoad?{?? ????[super?viewDidLoad];?? ?? ?????? ????UIButton?*btn=[[UIButton?alloc]init];?? ????btn.backgroundColor=[UIColor?colorWithRed:0.196?green:0.371?blue:0.248?alpha:1.000];?? ????[btn?setTitle:@"開始支付"?forState:UIControlStateNormal];?? ????[btn?addTarget:self?action:@selector(buyNow)?forControlEvents:UIControlEventTouchUpInside];?? ????btn.frame=CGRectMake(100,?100,?100,?50);?? ????[self.view?addSubview:btn];?? }?? ?? ?? ?? ?? -?(void)buyNow?{?? ????if?(![PKPaymentAuthorizationViewController?class])?{?? ?????????? ????????NSLog(@"操作系統不支持ApplePay,請升級至9.0以上版本,且iPhone6以上設備才支持");?? ????????return;?? ????}?? ?????? ????if?(![PKPaymentAuthorizationViewController?canMakePayments])?{?? ?????????? ????????NSLog(@"設備不支持ApplePay,請升級至9.0以上版本,且iPhone6以上設備才支持");?? ????????return;?? ????}?? ?????? ????NSArray?*supportedNetworks?=?@[PKPaymentNetworkAmex,?PKPaymentNetworkMasterCard,PKPaymentNetworkVisa,PKPaymentNetworkChinaUnionPay];?? ????if?(![PKPaymentAuthorizationViewController?canMakePaymentsUsingNetworks:supportedNetworks])?{?? ????????NSLog(@"沒有綁定支付卡");?? ????????return;?? ????}?? ????NSLog(@"可以支付,開始建立支付請求");?? ?????? ????PKPaymentRequest?*payRequest?=?[[PKPaymentRequest?alloc]init];?? ????payRequest.countryCode?=?@"CN";??????? ????payRequest.currencyCode?=?@"CNY";????????? ????payRequest.merchantIdentifier?=?@"merchant.com.kuaichengwuliu";???? ????payRequest.supportedNetworks?=?supportedNetworks;????? ????payRequest.merchantCapabilities?=?PKMerchantCapability3DS|PKMerchantCapabilityEMV;???????? ?????? ?????? ?????? ?????? ?????? ?????? ?????? ?? ?????? ?????? ?????? ????PKShippingMethod?*freeShipping?=?[PKShippingMethod?summaryItemWithLabel:@"包郵"?amount:[NSDecimalNumber?zero]];?? ????freeShipping.identifier?=?@"freeshipping";?? ????freeShipping.detail?=?@"6-8?天?送達";?? ?????? ????PKShippingMethod?*expressShipping?=?[PKShippingMethod?summaryItemWithLabel:@"極速送達"?amount:[NSDecimalNumber?decimalNumberWithString:@"10.00"]];?? ????expressShipping.identifier?=?@"expressshipping";?? ????expressShipping.detail?=?@"2-3?小時?送達";?? ????shippingMethods?=?[NSMutableArray?arrayWithArray:@[freeShipping,?expressShipping]];?? ?????? ????payRequest.shippingMethods?=?shippingMethods;?? ?????? ?????? ?????? ????NSDecimalNumber?*subtotalAmount?=?[NSDecimalNumber?decimalNumberWithMantissa:1275?exponent:-2?isNegative:NO];????? ????PKPaymentSummaryItem?*subtotal?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"商品價格"?amount:subtotalAmount];?? ?????? ????NSDecimalNumber?*discountAmount?=?[NSDecimalNumber?decimalNumberWithString:@"-12.74"];???????? ????PKPaymentSummaryItem?*discount?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"優惠折扣"?amount:discountAmount];?? ?????? ????NSDecimalNumber?*methodsAmount?=?[NSDecimalNumber?zero];?? ????PKPaymentSummaryItem?*methods?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"包郵"?amount:methodsAmount];?? ?????? ????NSDecimalNumber?*totalAmount?=?[NSDecimalNumber?zero];?? ????totalAmount?=?[totalAmount?decimalNumberByAdding:subtotalAmount];?? ????totalAmount?=?[totalAmount?decimalNumberByAdding:discountAmount];?? ????totalAmount?=?[totalAmount?decimalNumberByAdding:methodsAmount];?? ?????? ????PKPaymentSummaryItem?*total?=?[PKPaymentSummaryItem?summaryItemWithLabel:@"ls"?amount:totalAmount];???? ?????? ????summaryItems?=?[NSMutableArray?arrayWithArray:@[subtotal,?discount,?methods,?total]];?? ?????? ????payRequest.paymentSummaryItems?=?summaryItems;?? ?????? ?????? ?????? ????PKPaymentAuthorizationViewController?*view?=?[[PKPaymentAuthorizationViewController?alloc]initWithPaymentRequest:payRequest];?? ????view.delegate?=?self;?? ????[self?presentViewController:view?animated:YES?completion:nil];?? ?????? }?? #pragma?mark?-?PKPaymentAuthorizationViewControllerDelegate?? -?(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController?*)controller?? ??????????????????didSelectShippingContact:(PKContact?*)contact?? ????????????????????????????????completion:(void?(^)(PKPaymentAuthorizationStatus,?NSArray<PKShippingMethod?*>?*?_Nonnull,?NSArray<PKPaymentSummaryItem?*>?*?_Nonnull))completion{?? ?????? ????NSPersonNameComponents?*name?=?contact.name;?????????????????? ????CNPostalAddress?*postalAddress?=?contact.postalAddress;??????? ????NSString?*emailAddress?=?contact.emailAddress;???????????????? ????CNPhoneNumber?*phoneNumber?=?contact.phoneNumber;????????????? ????NSString?*supplementarySubLocality?=?contact.supplementarySubLocality;???? ?????? ?????? ????completion(PKPaymentAuthorizationStatusSuccess,?shippingMethods,?summaryItems);?? }?? ?? -?(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController?*)controller?? ???????????????????didSelectShippingMethod:(PKShippingMethod?*)shippingMethod?? ????????????????????????????????completion:(void?(^)(PKPaymentAuthorizationStatus,?NSArray<PKPaymentSummaryItem?*>?*?_Nonnull))completion{?? ?????? ????PKShippingMethod?*oldShippingMethod?=?[summaryItems?objectAtIndex:2];?? ????PKPaymentSummaryItem?*total?=?[summaryItems?lastObject];?? ????total.amount?=?[total.amount?decimalNumberBySubtracting:oldShippingMethod.amount];?? ????total.amount?=?[total.amount?decimalNumberByAdding:shippingMethod.amount];?? ?????? ????[summaryItems?replaceObjectAtIndex:2?withObject:shippingMethod];?? ????[summaryItems?replaceObjectAtIndex:3?withObject:total];?? ?????? ????completion(PKPaymentAuthorizationStatusSuccess,?summaryItems);?? }?? -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController?*)controller?didSelectPaymentMethod:(PKPaymentMethod?*)paymentMethod?completion:(void?(^)(NSArray<PKPaymentSummaryItem?*>?*?_Nonnull))completion{?? ?????? ????completion(summaryItems);??? }?? -(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController?*)controller?didSelectShippingAddress:(ABRecordRef)address?completion:(void?(^)(PKPaymentAuthorizationStatus,?NSArray<PKShippingMethod?*>?*?_Nonnull,?NSArray<PKPaymentSummaryItem?*>?*?_Nonnull))completion{?? ?????? }?? -?(void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController?*)controller?? ???????????????????????didAuthorizePayment:(PKPayment?*)payment?? ????????????????????????????????completion:(void?(^)(PKPaymentAuthorizationStatus?status))completion?{?? ?????? ????PKPaymentToken?*payToken?=?payment.token;?? ?????? ????PKContact?*billingContact?=?payment.billingContact;??????? ????PKContact?*shippingContact?=?payment.shippingContact;????? ????PKContact?*shippingMethod?=?payment.shippingMethod;??????? ?????? ?????? ?????? ????dispatch_after(dispatch_time(DISPATCH_TIME_NOW,?(int64_t)(33?*?NSEC_PER_SEC)),?dispatch_get_main_queue(),?^{?? ?????????? ????????completion(PKPaymentAuthorizationStatusFailure);?? ????});?? ?????? ?????? }?? -?(void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController?*)controller{?? ????[controller?dismissViewControllerAnimated:YES?completion:nil];?? }?? ?? @end??
demo下載地址?https://github.com/lsmakethebest/LSApplePayDemo
感謝作者原文地址:http://blog.csdn.net/itiapp_home/article/details/52448012
總結
以上是生活随笔為你收集整理的ApplePay集成教程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。