如果需要集成搭配實際項目中,先閱讀一下
Apple Pay Guides and Reference
銀聯(lián) Apple Pay 文檔
1 申請 Merchant ID
正常的情況,需要到銀聯(lián)那邊下一個證書(而不是自己在電腦生成)與Apple Account 的 Merchant ID 加密等一系列操作。由于是測試使用,所以就直接在本地生成了
** 蘋果文檔截圖 **


大致意思為: 在電腦本地請求證書,與 Merchant ID 加密一系列操作,然后在Xcode Capabilities 中,打開 Apple Pay, 勾選剛剛生成的 Merchant ID.
** 這個 Merchant ID 就可以在測試環(huán)境中使用了 **
2 導(dǎo)入銀聯(lián) Apple Pay SDK
里面的開發(fā)文檔和Demo看一下,有個大概的了解。
這是銀聯(lián) Apple Pay 支付的流程

感嘆一下,銀聯(lián)的Apple Pay文檔寫的蠻好的,頁數(shù)少,講的明確。最后把 ** 銀聯(lián)的Apple Pay SDK ** 導(dǎo)入項目中, 添加 **CFNetwork.framework、libUPAPayPlugin.a、PassKit.framework、 SystemConfiguration.framework **到 App 中,如果編譯有錯誤,
可以查看 開發(fā)問題-IOS控件常見問題
(在我的配置過程中,由于在實際的App集成的時候是OK的,但是在Demo中會報一些亂七八糟的錯誤,而我實際的App中又集成了支付寶支付,所以在測試Demo 中我額外導(dǎo)入了 ** libz.tbd, libc++.tbd, libsqlite3.0.tbd** 解決的問題,我也不知道是怎么回事,如果有知道的可以留言??)
3 實際代碼集成
根據(jù)銀聯(lián)的Apple Pay文檔說的,當(dāng)用戶點擊蘋果支付的時候,商戶App 會請求商戶服務(wù)器,然后商戶服務(wù)器會請求銀聯(lián)支付網(wǎng)關(guān),銀聯(lián)支付網(wǎng)關(guān)返回一個標(biāo)識訂單的 TN 號(全稱: transaction number ?),商戶服務(wù)器把 TN 號返回給商戶 App,這個TN號在商戶App調(diào)用銀聯(lián)SDK的時候需要傳遞過去。在Demo測試的時候可以自己請求銀聯(lián)提供的測試地址獲取一個測試的標(biāo)識訂單的 TN 號。
1 銀聯(lián) Apple Pay SDK 支付接口說明
/**
* 支付接口
*
* @param tn 訂單信息
* @param mode 接入模式,標(biāo)識商戶以何種方式調(diào)用支付控件,00生產(chǎn)環(huán)境,01測試環(huán)境
* @param viewController 啟動支付控件的viewController
* @param delegate 實現(xiàn) UPAPayPluginDelegate 方法的 UIViewController
* @param mID 蘋果公司分配的商戶號,表示調(diào)用Apple Pay所需要的MerchantID;
* @return 返回函數(shù)調(diào)用結(jié)果,成功或失敗
*/
+ (BOOL)startPay:(NSString*)tn
mode:(NSString*)mode
viewController:(UIViewController*)viewController
delegate:(id<UPAPayPluginDelegate>)delegate
andAPMechantID:(NSString* )mID;
Demo中調(diào)用情況:
if tn != nil && tn.characters.count > 0 {
UPAPayPlugin.startPay(tn,
mode: mode,
viewController: self,
delegate: self,
andAPMechantID: merchantID)
} else {
showAlert("獲得交易單號失敗")
}
2 處理支付結(jié)果
// MARK: UPAPay Delegate
func upaPayPluginResult(_ payResult: UPPayResult!) {
if let status = payResult?.paymentResultStatus {
switch status {
case .success:
print("success")
let otherInfo = payResult.otherInfo ?? ""
let successInfo = "支付成功\n\(otherInfo)"
showAlert(successInfo)
case .failure:
print("failure")
let errorInfo = payResult.errorDescription ?? "支付失敗"
showAlert(errorInfo)
case .cancel:
print("cancel")
showAlert("支付取消")
case .unknownCancel:
print("unknownCancel")
let errorInfo = ""
// TODO: get [errorInfo] from server, may success or failure
showAlert(errorInfo)
}
}
}
如果一切OK,會在App中看到一個類似這樣的支付結(jié)果:

當(dāng)然在實際的的集成到App中,需要:
1:到銀聯(lián)認(rèn)證,到銀聯(lián)下載證書配置蘋果賬號生成的 Merchant ID ;
2:請求商戶server生成實際的標(biāo)識訂單的 TN 號;
3:測試測試測試