下面圖片是借的別人的

Apple Pay流程
Apple Pay運行環境:
iPhone 6以上設備,當然也包括最新出來的iPhone SE。iOS版本在9.2以上。
Xcode版本號 7.2.1
APP接入ApplePay不需要POS機,但是還是要和銀行簽約,比如和銀聯簽約。
准備工作
在接入Apple Pay之前,首先要申請MerchantID及對應的證書。

申請Merchant ID
需要以merchant開頭的一個字符串

僅在中國使用
申請App ID,這里和Merchant ID填寫一樣的名字為了辨別
申請好后再權限里面打開ApplePay功能,並配置merchant證書

選擇Edit進行相應配置
配置成功后你會看到

配置APP ID和Merchant ID關聯成功
搭建工程文件
bundleID設置,對應手動生成的bundleID

Bundle Id設置
Capability中啟用Apple Pay權限,並選擇merchantID.

Apple Pay使能並勾選對應merchantID
設置需要導入的頭文件、引入的庫
#import <PassKit/PassKit.h>//用戶綁定的銀行卡信息 #import <PassKit/PKPaymentAuthorizationViewController.h>//Apple pay的展示控件 #import <AddressBook/AddressBook.h>//用戶聯系信息相關
在開始Apple Pay支付前需要帶代碼中進行,系統版本檢測,設備是否支持ApplePay檢測以及用戶是否綁定有對應的銀行,三步操作。
if(![PKPaymentAuthorizationViewController class]) { //PKPaymentAuthorizationViewController需iOS8.0以上支持 NSLog(@"操作系統不支持ApplePay,請升級至9.0以上版本,且iPhone6以上設備才支持"); return; }
//檢查當前設備是否可以支付
if(![PKPaymentAuthorizationViewController canMakePayments]) { //支付需iOS9.0以上支持 NSLog(@"設備不支持ApplePay,請升級至9.0以上版本,且iPhone6以上設備才支持"); return; }
//檢查用戶是否可進行某種卡的支付,是否支持Amex、MasterCard、Visa與銀聯四種卡,根據自己項目的需要進行檢測
NSArray*supportedNetworkCards =@[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]; if(![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworks]) { NSLog(@"沒有綁定支付卡"); return; } NSLog(@"可以支付,開始建立支付請求");
//當以上三種檢查都通過后我這里以人民幣作為測試
下面是代碼:
// // ViewController.m // PayDemo // // Created by Jackey on 2017/3/2. // Copyright © 2017年 com.zhouxi. All rights reserved. // #import <PassKit/PassKit.h> //用戶綁定的銀行卡信息 #import <PassKit/PKPaymentAuthorizationViewController.h> //Apple Pay的展示控件 #import <AddressBook/AddressBook.h> //用戶聯系信息相關 #import "ViewController.h" @interface ViewController ()<PKPaymentAuthorizationViewControllerDelegate> @property (nonatomic, strong) NSMutableArray *summaryItems; //賬單列表 @property (nonatomic, strong) PKPaymentAuthorizationViewController *payVC; @property (nonatomic, strong) PKPaymentRequest *payRequest; @end @implementation ViewController @synthesize payRequest; - (void)viewDidLoad { [super viewDidLoad]; PKPaymentButton *payButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeBuy style:PKPaymentButtonStyleWhiteOutline]; payButton.center = self.view.center; [payButton addTarget:self action:@selector(action) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:payButton]; PKPaymentButton *setupButton = [PKPaymentButton buttonWithType:PKPaymentButtonTypeSetUp style:PKPaymentButtonStyleWhiteOutline]; setupButton.center = CGPointMake(self.view.center.x, self.view.center.y + 50); [setupButton addTarget:self action:@selector(jump2MakePaymentsUsingNetworks) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:setupButton]; //檢測當前系統版本是否支持Apple Pay if (![PKPaymentAuthorizationViewController class]) { NSLog(@"系統版本太低, 請升級至9.0以上版本, 且iPhone6以上設備才支持"); } else { NSLog(@"恭喜您, 當前系統支持Apple Pay!"); } //檢查當前設備是否可以支付 if (![PKPaymentAuthorizationViewController canMakePayments]) { NSLog(@"設備不支持Apple Pay, 請升級至9.0以上版本, 且iPhone6以上設備才支持"); } else { NSLog(@"恭喜您, 當前設備支持Apple Pay"); } //檢查用戶是否可以進行某種銀行卡的支付, 是否支持Amex, MasterCard, Visa與銀聯四中卡 NSArray *supportedNetworkCards = @[PKPaymentNetworkAmex, PKPaymentNetworkMasterCard, PKPaymentNetworkVisa, PKPaymentNetworkChinaUnionPay]; if (![PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:supportedNetworkCards]) { NSLog(@"沒有綁定支付卡"); } else { NSLog(@"有綁定支付卡, 可以開始建立支付請求了"); } //開始配置支付信息 payRequest = [[PKPaymentRequest alloc] init]; payRequest.countryCode = @"CN"; //國家代碼 payRequest.currencyCode = @"CNY"; //RMB的幣種代碼 payRequest.merchantIdentifier = @"merchant.com.zhouxi.PayDemo"; //申請的merchantID payRequest.supportedNetworks = supportedNetworkCards; //用戶可以進行支付的銀行卡 payRequest.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV; //設置支持的交易處理協議, 3DS必須支持, EMV為可選 //payRequest.requiredShippingAddressFields = \ PKAddressFieldPostalAddress | PKAddressFieldPhone | PKAddressFieldName; //設置發貨地址 payRequest.requiredShippingAddressFields = PKAddressFieldNone; //空發貨地址 payRequest.shippingMethods = @[]; //設置配送方式 NSDecimalNumber *totalAmount = \ [NSDecimalNumber decimalNumberWithString:@"0.01"]; //創建金額 PKPaymentSummaryItem *total = \ [PKPaymentSummaryItem summaryItemWithLabel:@"重慶周希" amount:totalAmount]; self.summaryItems = [NSMutableArray arrayWithArray:@[total]]; payRequest.paymentSummaryItems = self.summaryItems; } - (void)action { //初始化ApplePay控件 self.payVC = \ [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:payRequest]; self.payVC.delegate = self; [self presentViewController:self.payVC animated:YES completion:nil]; }
//這個方法可以開始配置ApplyPay銀行卡 - (void)jump2MakePaymentsUsingNetworks { /** * 跳轉到添加銀行卡界面,系統直接就給我們提供了一個方法,直接創建界面,然后open即可 */ PKPassLibrary *library = [[PKPassLibrary alloc] init]; /** * 跳轉到綁定銀行卡界面 */ [library openPaymentSetup]; } #pragma mark - PKPaymentAuthorizationViewControllerDelegate Methods - (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion { //支付憑據, 發給服務器端進行驗證支付師傅真是有效 PKPaymentToken *payToken = payment.token; //賬單信息 PKContact *billingContact = payment.billingContact; //送貨信息 PKContact *shippingContact = payment.shippingContact; //送貨方式 PKContact *shippingMethod = payment.shippingMethod; //等待服務器返回結果后再進行系統block調用 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //模擬服務器通信 completion(PKPaymentAuthorizationStatusSuccess); }); } - (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller { [controller dismissViewControllerAnimated:YES completion:nil]; } @end