iOS整合ApplePay

來源:互聯網
上載者:User

標籤:package   返回   圖片   匯入   標頭檔   sar   設定   驗證   strong   

Apple Pay正式在國內上線的那天,一起工作的小夥伴就走進了Starbucks,7-11等帶有銀聯閃付的店進行了嘗鮮。不管是否要再次輸入一次密碼,但是它的出現確實給我們帶來了極大的便捷。下面就嘗試在一個Demo中來整合下Apple Pay的功能。

下面圖片是借的別人的

 


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

 

iOS整合ApplePay

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.