1. 程式人生 > >iOS Apple Pay開發流程

iOS Apple Pay開發流程

一:介紹

專案中要用到支付功能,需要支付寶支付支付寶網頁支付微信支付銀聯支付、Apple pay,所以打算總結一下,方便以後的查閱,也方便大家, 用到的地方避免再次被坑。
今天我們就主要介紹一下銀聯控制元件支付,其他支付也寫了對應教程,並且給出了連線。

二:支付流程介紹

2.1 Apple Pay 頁面演示

Apple Pay 頁面演示

  1. 買家在手機應用中購買商品或服務,在訂單頁面中展示 Apple Pay 按鈕
  2. 通過銀聯控制元件,掉起 Apple Pay 支付頁面
  3. 使用者通過支付頁面驗證 Touch ID,輸入銀行卡密碼 是否需要輸入銀行卡密碼取決於交易限額和銀行支援情況
  4. 支付成功,商戶應用內展示成功頁面
    (1)支付成功頁面應參照 UI 示例,展示“銀聯”標識,“雲閃付”標識。
    (2)銀聯 SDK 控制元件支援折扣功能。在折扣活動期間,商戶應用內應參照例項 UI 進行原金 額、折扣金額的展示

2.2 Apple Pay 支付的實現方式

Apple Pay 支付的實現方式

1-2. 商戶生成訂單,通過商戶 SERVER 端將訂單資訊傳送給銀聯支付閘道器;
3-4. 銀聯支付閘道器記錄訂單資訊,返回用來標識訂單的 TN 號,經由商戶 SERVER 返回至給 商戶 APP;
5.商戶 APP 呼叫銀聯 SDK,將 TN 號傳遞給銀聯 SDK
6.銀聯 SDK 向 Apple 公司的 PASSKIT FRAMEWORK 發起支付請求;
7.介面返回加密的支付 Token 資訊;
8-9.銀聯 SDK 將支付 Token 傳遞給銀聯支付閘道器,完成交易認證;
10-12.銀聯將支付結果返回給商戶 APP,商戶 SERVER,商戶 APP 負責提示使用者交易結果。

三:工程配置

bundleID設定

bundleID設定

Capability中啟用Apple Pay許可權,並選擇merchantID。申請merchantID

啟用Apple Pay許可權

之後專案會多一個Applepay的配置檔案ApplePayYasin.entitlements

專案檔案

四:下載Apple Pay SDK

下載之後,找到.h檔案和庫檔案,使用UPPaymentControl需要將paymentcontrol/inc目錄下UPAPayPlugin.h、UPAPayPluginDelegate.h檔案和paymentcontrol/libs目錄下的libUPAPayPlugin.a檔案新增到商戶應用的工程中

SDK路徑

五:呼叫支付介面

在呼叫銀聯支付類裡面,首先增加標頭檔案引用。

#import "UPAPayPlugin.h"

// TODO 商戶需要換用自己的mertchantID
#define kAppleMerchantID        @"merchant.com.AgreePay.ApplePayAgree"

在調起支付的方法中程式碼如下:

//當獲得的tn不為空時,呼叫支付介面
if (tn != nil && tn.length > 0) {
        [UPAPayPlugin startPay:tn 
        mode:@"01" 
        viewController:ViewController 
        delegate:self andAPMechantID:kAppleMerchantID];
}

方法需要的幾個引數文件上都寫的有,tn是交易流水號,伺服器端傳回來的,客戶端只有憑藉這個引數才能呼叫支付控制元件 進行支付的。只需要呼叫一個方法就行啦!!!

六:支付結果回撥

就在調起支付的ViewController 中寫入下面程式碼即可

#pragma mark -
#pragma mark 響應控制元件返回的支付結果
#pragma mark -
- (void)UPAPayPluginResult:(UPPayResult *)result
{
    if(result.paymentResultStatus == UPPaymentResultStatusSuccess) {
        NSString *otherInfo = result.otherInfo?result.otherInfo:@"";
        NSString *successInfo = [NSString stringWithFormat:@"支付成功\n%@",otherInfo];

        NSLog(@"%@",successInfo);

    }else if(result.paymentResultStatus == UPPaymentResultStatusCancel){

        NSLog(@"支付取消");

    }else if (result.paymentResultStatus == UPPaymentResultStatusFailure) {

        NSString *errorInfo = [NSString stringWithFormat:@"%@",result.errorDescription];
        NSLog(@"支付失敗%@",errorInfo);
    }else if (result.paymentResultStatus == UPPaymentResultStatusUnknownCancel)  {

        //TODO UPPAymentResultStatusUnknowCancel表示發起支付以後使用者取消,導致支付狀態不確認,需要查詢商戶後臺確認真實的支付結果
//        NSString *errorInfo = [NSString stringWithFormat:@"支付過程中使用者取消了,請查詢後臺確認訂單"];
//        [self showAlertMessage:errorInfo];
        NSLog(@"支付過程中使用者取消了,請查詢後臺確認訂單");

    }
}

支付調起截圖

希望可以幫助大家
如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議
iOS技術交流群:668562416