前言
ApplePay是蘋果公司推出的一種線上/線下的便捷支付方式,根據(jù)TouchId來驗(yàn)證支付卡持卡人身份砾医,ApplePay并不參與資金流動拿撩,最終還是讓銀行完成扣款處理,目前據(jù)Apple介紹只配備在iphone6以上和新款的ipad Air2和ipad mini3上如蚜,中國地區(qū)最低系統(tǒng)要求為iOS9.2.
注意
:Apple Pay功能支持的是iPhone6以上,iOS9.2以上. 且目前企業(yè)級證書是不支持的,只有個(gè)人開發(fā)者證書才支持.
一压恒、 Apple Pay 支付流程介紹
1影暴、買家在手機(jī)應(yīng)用中購買商品或服務(wù),在訂單頁面中展示 Apple Pay 按鈕
2探赫、通過銀聯(lián)控件型宙,掉起 Apple Pay 支付頁面
3、用戶通過支付頁面驗(yàn)證 Touch ID伦吠,輸入銀行卡密碼 ,是否需要輸入銀行卡密碼取決于交易限額和銀行支持情況
4妆兑、支付成功,商戶應(yīng)用內(nèi)展示成功頁面
(1)支付成功頁面應(yīng)參照 UI 示例毛仪,展示“銀聯(lián)”標(biāo)識搁嗓,“云閃付”標(biāo)識。
(2)銀聯(lián) SDK 控件支持折扣功能箱靴。在折扣活動期間腺逛,商戶應(yīng)用內(nèi)應(yīng)參照實(shí)例 UI 進(jìn)行原金額、折扣金額的展示
二衡怀、銀聯(lián)支付控件 SDK 模式 Apple Pay 支付的實(shí)現(xiàn)方式
- 獲取訂單信息tn編號
1-2棍矛、 商戶生成訂單,通過商戶 SERVER 端將訂單信息發(fā)送給銀聯(lián)支付網(wǎng)關(guān);
3-4抛杨、銀聯(lián)支付網(wǎng)關(guān)記錄訂單信息够委,返回用來標(biāo)識訂單的 TN 號,經(jīng)由商戶 SERVER 返回至給 商戶 APP;
- 調(diào)用銀聯(lián)SDK方法發(fā)起支付請求
5蝶桶、 商戶 APP 調(diào)用銀聯(lián) SDK,將 TN 號傳遞給銀聯(lián) SDK
6掉冶、 銀聯(lián) SDK 向 Apple 公司的 PASSKIT FRAMEWORK 發(fā)起支付請求;
- 支付驗(yàn)證
7真竖、 接口返回加密的支付 Token 信息;
8-9、銀聯(lián) SDK 將支付 Token 傳遞給銀聯(lián)支付網(wǎng)關(guān)厌小,完成交易認(rèn)證;
- 返回支付結(jié)果
10-12恢共、銀聯(lián)將支付結(jié)果返回給商戶 APP,商戶 SERVER璧亚,商戶 APP 負(fù)責(zé)提示用戶交易結(jié)果讨韭。
三、銀聯(lián) SDK 模式下商戶接入銀聯(lián) Apple Pay 在線支付流程
步驟一癣蟋、成為銀聯(lián)手機(jī)支付入網(wǎng)商戶
(1)注冊銀聯(lián)開放平臺賬號(https://open.unionpay.com/ajweb/index)
(2)填寫商戶信息并申請成為入網(wǎng)商戶
步驟二透硝、登錄銀聯(lián)商戶服務(wù)平臺,通過商戶服務(wù)平臺申請 CSR文件
- 關(guān)于商戶 CSR
接入銀聯(lián) Apple Pay 在線支付的商戶疯搅,須生成 Apple Pay 專用的 CSR 文件并提交至 Apple 開發(fā)者網(wǎng)站進(jìn)行簽名濒生,以簽署證書,取得 Apple Pay 的訪問權(quán)限幔欧。
在銀聯(lián) SDK 模式中罪治,銀聯(lián)代為商戶生成 CSR 文件丽声,商戶可直接登錄銀聯(lián)商戶服務(wù)平臺獲取。
- 商戶 CSR 申請方式:
a觉义、 成為銀聯(lián)商戶服務(wù)平臺用戶雁社。
在申請銀聯(lián) Apple Pay 接入時(shí),銀聯(lián)的聯(lián)系人會分配商戶服務(wù)平臺的登錄權(quán)限及 CSR 的申請權(quán)限晒骇。存量商戶應(yīng)確認(rèn)是否開通了 Apple Pay 接入權(quán)限霉撵。
b、 通過銀聯(lián)商戶服務(wù)平臺申請 CSR
銀聯(lián)在商戶服務(wù)平臺 (https://merchant.unionpay.com/) 中提供 Apple Pay 的CSR文件下載
功能厉碟。
登錄商戶服務(wù)平臺喊巍,進(jìn)入安全管理-CSR 文件下載,點(diǎn)擊“生成 CSR”按鈕箍鼓,并將 獲取的 CSR 保存崭参。
CSR 文件與商戶代碼一一對應(yīng),是交易安全保護(hù)的重要環(huán)節(jié)款咖,請勿將 CSR 透漏給無關(guān)人員何暮。
步驟三、將 CSR 提交至 Apple铐殃,生成 Merchant ID 和 描述文件
- 1海洼、創(chuàng)建AppID
登錄開發(fā)者中心,創(chuàng)建App ID富腊,填寫描述及Bundle ID坏逢。
- 2、在App Services里勾選 Apple Pay Payment Processing 以開啟該功能
點(diǎn)擊Continue后赘被,會發(fā)現(xiàn)概覽該App ID時(shí)是整,Apple Pay服務(wù)是等待配置狀態(tài)的,接下來點(diǎn)擊Register繼續(xù)
- 3民假、創(chuàng)建 Merchant ID浮入,并綁定到相關(guān)App ID
-
4、由于加密需要證書羊异,所以還要對剛創(chuàng)建的Merchant ID添加證書(加密根據(jù)證書來的),Merchant ID點(diǎn)Edit
點(diǎn)擊 Create Certificate, 這里詢問是否支持中國以外的地區(qū)處理支付事秀,這里要根據(jù)實(shí)際需求選擇
Continue后,需要上傳一個(gè)CSR文件(銀聯(lián)在商戶服務(wù)平臺下載的那個(gè)CSR文件)
把生成的cer文件下載到本地野舶,雙擊安裝
此時(shí)查看鑰匙串發(fā)現(xiàn)該證書顯示 “此證書是由未知頒發(fā)機(jī)構(gòu)簽名的”
解決辦法:重新下載系統(tǒng)證書 Worldwide Developer Relations - G2 Certificate 并雙擊安裝
(http://www.apple.com/certificateauthority/)
- 5易迹、配置 App ID中Apple Pay服務(wù)
由于剛才創(chuàng)建的App ID中Apple Pay服務(wù)仍處于待配置狀態(tài),在App IDs列表中找到剛才創(chuàng)建的App ID展開平道,點(diǎn)擊Edit對其進(jìn)行編輯赴蝇。
在彈出的界面中勾選對應(yīng)的Merchant ID,Continue
然后Assign巢掺,此時(shí)就完成了為App ID添加 Merchant ID句伶【Ⅱ撸可以點(diǎn)開該App ID進(jìn)行確認(rèn),可看到Apple Pay服務(wù)已可用
- 6考余、生成開發(fā)和發(fā)布描述文件并下載添加到Xcode
步驟四先嬉、創(chuàng)建Xcode工程并為其開啟Apple Pay
-
1、使用Xcode創(chuàng)建工程楚堤,設(shè)置相關(guān)Bundle ID:
2疫蔓、開啟Apple Pay功能:
到Xcode的Capabilities中,找到Apple Pay開關(guān)身冬,打開
- 3衅胀、添加銀聯(lián)SDK 并加入依賴的庫文件
a、添加 Apple Pay 版本靜態(tài)庫文件
包含文件:
UPAPayPlugin.h
UPAPayPluginDelegate.h
libUPAPayPlugin.a
b酥筝、添加 CFNetwork.framework 滚躯、 libUPAPayPlugin.a 、 PassKit.framework 嘿歌、 SystemConfiguration.framework 到商戶 App 工程中
c掸掏、http 請求設(shè)置,設(shè)置NSAllowsArbitraryLoads 屬性值為 YES
注意:
如果工程的 compile source as 選項(xiàng)的值不是 Objective–C++宙帝,則引用此頭文件的文件類型都要 改為.mm
- 4丧凤、接口調(diào)用
a、商戶 App 從商戶服務(wù)器獲取 tn步脓,當(dāng) tn 不為空時(shí)愿待,調(diào)用支付接口。
//當(dāng)獲得的tn不為空時(shí)靴患,調(diào)用支付接口
if (tn != nil && tn.length > 0) {
if([PKPaymentAuthorizationViewController canMakePaymentsUsingNetworks:@[PKPaymentNetworkChinaUnionPay]] )
{
//調(diào)用銀聯(lián)支付控件
[UPAPayPlugin startPay:tn mode:self.testMode viewController:self delegate:self andAPMechantID:kAppleMechantID]; }
}
b仍侥、處理支付結(jié)果
銀聯(lián)手機(jī)支付控件結(jié)果回調(diào)函數(shù)有四個(gè)支付狀態(tài)返回值,在 UPPayResult 類中有關(guān)于 UPPaymentResultStatus 的詳細(xì)說明蚁廓。
商戶 App 通過在工程中添加頭文件 “UPAPayPluginDelegate.h”访圃,然后在處理交易結(jié)果界面中根據(jù)該頭文件中定義的回調(diào)函數(shù):-(void)UPAPayPluginResult:(UPPayResult *)result 來實(shí)現(xiàn)回調(diào)方法厨幻,從而根據(jù)支付結(jié)果的不同進(jìn)行相應(yīng)的處理相嵌。
結(jié)果回調(diào)函數(shù)示例代碼:
-(void)UPAPayPluginResult:(UPPayResult *)result
{
if(result.paymentResultStatus == UPPaymentResultStatusSuccess) {
NSString *otherInfo = result.otherInfo?result.otherInfo:@"";
NSString *successInfo = [NSString stringWithFormat:@"支付成功\n%@",otherInfo];
[self showAlertMessage:successInfo];
}
else if(result.paymentResultStatus == UPPaymentResultStatusCancel){
[self showAlertMessage:@"支付取消"];
}
else if (result.paymentResultStatus == UPPaymentResultStatusFailure) {
NSString *errorInfo = [NSString stringWithFormat:@"%@",result.errorDescription];
[self showAlertMessage:errorInfo];
}
else if (result.paymentResultStatus == UPPaymentResultStatusUnknownCancel) {
//TODO UPPAymentResultStatusUnknowCancel表示發(fā)起支付以后用戶取消,導(dǎo)致支付狀態(tài)不確認(rèn)况脆,需要查詢商戶后臺確認(rèn)真實(shí)的支付結(jié)果
NSString *errorInfo = [NSString stringWithFormat:@"支付過程中用戶取消了饭宾,請查詢后臺確認(rèn)訂單"];
[self showAlertMessage:errorInfo];
}
}