Apple Pay 技術分享_陳hong_鑫

知識體系

這裏寫圖片描述

1. 什麼是 Apple Pay?

Apple Pay,是蘋果公司在2014蘋果秋季新品發佈會上發佈的一種基於NFC的手機支付功能,於2014年10月20日在美國正式上線。2016年2月18日凌晨5:00, Apple Pay 業務在中國上線.

2. 應用場景

線下:要求商家擁有支持NFC功能的刷卡機
線上:要求App的支持。目前美團、大衆、京東等網站均支持。這也是爲什麼我們現在需要學習Apple Pay集成的原因

3. 與傳統第三方支付的區別

硬件要求:Apple Pay要求手機在iPhone6以上設備,iOS8以上的系統。
網絡要求:線下支付可以沒有網絡支持
安全: 更加安全,無需第三方賬號
效率: 支付時間短,不需要掃描二維碼等操作
使用功能:功能較單一、升級的ATM機可以取款。但不能進行轉賬理財

4. 線上集成的步驟

1.環境配置

首先創建一個Xcode工廠
登陸開發者賬號,證書中心
添加一個AppID,並勾選Apple Pay功能
配置MerchantID,並創建相應的證書,下載並安裝到鑰匙串中
綁定AppID 與 MerchantID
在Xcode中調到iOS8以上(在中國iOS9.2以後才支持銀聯)
在Xcode中打開Apple Pay功能,出現三個對勾說明配置完成

2.代碼實現:

Apple Pay支付原理圖:

這裏寫圖片描述
支付請求原理圖
這裏寫圖片描述

具體處理步驟如下:

框架發送支付請求給安全模塊,只有安全模塊可以訪問存儲在設備上的標記化的卡信息。
安全模塊把特定的卡和商家等支付數據加密,以保證只有蘋果可以讀取,然後發送給框架。框架會將這些數據發送給蘋果。
蘋果服務器再次加密這些支付數據,以保證只有商家可以讀取。然後服務器對它進行簽名,生成支付token,然後發送給設備
框架調用相應的代理方法並傳入這個token,然後你的代理方法傳送token給你的服務器

步驟:

//判斷設備是否支持
[PKPaymentAuthorizationViewControllercanMakePayments];

判斷wallet卡包是否綁定銀行卡
[PKPaymentAuthorizationViewControllercanMakePaymentsUsingNetworks:@[PKPaymentNetworkMasterCard,PKPaymentNetworkChinaUnionPay,PKPaymentNetworkVisa]];

//創建支付請求
 PKPaymentRequest *requst = [[PKPaymentRequestalloc]init];
    // 配置商家ID
    requst.merchantIdentifier =@"merchant.appyPayDemo1";

    //配置貨幣代碼及國家代碼
    requst.countryCode =@"CN";
    requst.currencyCode =@"CNY";
    //配置請求支持的支付網絡
    requst.supportedNetworks =@[PKPaymentNetworkVisa,PKPaymentNetworkMasterCard,PKPaymentNetworkChinaUnionPay];
    //配置商戶的處理方式
    requst.merchantCapabilities =PKMerchantCapability3DS;
    //配置購買的商品列表,如果有多項 商品 列表信息 最後一項爲彙總信息
    NSDecimalNumber *price = [NSDecimalNumberdecimalNumberWithString:@"0.01"];
    PKPaymentSummaryItem *item = [PKPaymentSummaryItemsummaryItemWithLabel:@"蘋果6s"amount:price];
    requst.paymentSummaryItems =@[item];
    //配置請求的附加項
     //2.1 是否顯示發票收穫地址
    requst.requiredBillingAddressFields =PKAddressFieldAll;
    //2.2 是否顯示快遞收貨地址
    requst.requiredShippingAddressFields =PKAddressFieldAll;
    //2.3 配置快遞方式

    NSDecimalNumber *price1 = [NSDecimalNumberdecimalNumberWithString:@"0.01"];

    PKShippingMethod *method1 = [PKShippingMethodsummaryItemWithLabel:@"順豐快遞"amount:price1];
    method1.identifier =@"順豐";

    requst.shippingMethods =@[method1];
    requst.shippingType =PKShippingTypeShipping;

    //添加附件數據
    requst.applicationData = [@"buyID = 1234567"dataUsingEncoding:NSUTF8StringEncoding];


給支付授權
 //驗證用戶的支付授權
    PKPaymentAuthorizationViewController *avc = [[PKPaymentAuthorizationViewControlleralloc]initWithPaymentRequest:requst];
    avc.delegate =self;
    [selfpresentViewController:avcanimated:YEScompletion:nil];


處理支付憑證
PKPaymentAuthorizationViewControllerDelegate 的方法中處理

// 如果用戶授權成功就會調用方法
//參數一、授權控制器
//參數二、支付對象
//參數三、系統給定一個回調代碼塊,我們需要執行這個代碼塊,來告訴系統當前的支付狀態十分成功
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                       didAuthorizePayment:(PKPayment *)payment
                                completion:(void (^)(PKPaymentAuthorizationStatus status))completion
{

    //這裏拿到支付信息,發送給服務器處理,處理完畢服務器會返回一個狀態,告訴客戶端,是否支付成功,然後由客戶端處理
    BOOL success =YES;
    if (success) {
        completion(PKPaymentAuthorizationStatusSuccess);
    }else
    {
        completion(PKPaymentAuthorizationStatusFailure);

    }


}

//執行這裏的方法代表支付授權結束或者取消。也是返回上一個界面的時機

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller
{
    NSLog(@"授權結束");
    [selfdismissViewControllerAnimated:YEScompletion:nil];
}

—————–陳洪鑫——————-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章