iOS Apple Pay開發流程
一:介紹
專案中要用到支付功能,需要支付寶支付、支付寶網頁支付、微信支付、銀聯支付、Apple pay,所以打算總結一下,方便以後的查閱,也方便大家, 用到的地方避免再次被坑。
今天我們就主要介紹一下銀聯控制元件支付,其他支付也寫了對應教程,並且給出了連線。
二:支付流程介紹
2.1 Apple Pay 頁面演示
- 買家在手機應用中購買商品或服務,在訂單頁面中展示 Apple Pay 按鈕
- 通過銀聯控制元件,掉起 Apple Pay 支付頁面
- 使用者通過支付頁面驗證 Touch ID,輸入銀行卡密碼 是否需要輸入銀行卡密碼取決於交易限額和銀行支援情況
- 支付成功,商戶應用內展示成功頁面
(1)支付成功頁面應參照 UI 示例,展示“銀聯”標識,“雲閃付”標識。
(2)銀聯 SDK 控制元件支援折扣功能。在折扣活動期間,商戶應用內應參照例項 UI 進行原金 額、折扣金額的展示
2.2 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設定
Capability中啟用Apple Pay許可權,並選擇merchantID。申請merchantID
之後專案會多一個Applepay的配置檔案ApplePayYasin.entitlements
四:下載Apple Pay SDK
下載之後,找到.h檔案和庫檔案,使用UPPaymentControl需要將paymentcontrol/inc目錄下UPAPayPlugin.h、UPAPayPluginDelegate.h檔案和paymentcontrol/libs目錄下的libUPAPayPlugin.a檔案新增到商戶應用的工程中
五:呼叫支付介面
在呼叫銀聯支付類裡面,首先增加標頭檔案引用。
#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