1. 介绍
项目中要用到支付功能,需要支付宝支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。
今天我们就主要介绍一下 Apple Pay 支付,其他支付介绍后面会尽快更新出来。
2. 支付流程介绍
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 负责提示用户交易结果。
▐ 2.3 Apple Pay 调用流程
因为都是控件支付,所以 Apple Pay 的支付流程和银联控件支付流程一模一样,有兴趣可以去研究一下其中的详细流程。
3. 工程配置
bundleID 设置
Capability 中启用 Apple Pay 权限,并选择 merchantID。
之后项目会多一个 Applepay 的配置文件 ApplePayYasin.entitlements
4. 下载 Apple Pay SDK
下载之后,找到 .h 文件和库文件,使用 UPPaymentControl 需要将 paymentcontrol/inc 目录下 UPAPayPlugin.h、UPAPayPluginDelegate.h 文件和 paymentcontrol/libs 目录下的 libUPAPayPlugin.a 文件添加到商户应用的工程中
5. 调用支付接口
在调用银联支付类里面,首先增加头文件引用。
#import "UPAPayPlugin.h"
// TODO 商户需要换用自己的mertchantID
#define kAppleMerchantID @"merchant.com.XXXPay.ApplePay"
在调起支付的方法中代码如下:
//当获得的tn不为空时,调用支付接口
if (tn != nil && tn.length > 0) {
[UPAPayPlugin startPay:tn
mode:@"01"
viewController:ViewController
delegate:self andAPMechantID:kAppleMerchantID];
}
方法需要的几个参数文档上都写的有,tn 是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的。只需要调用一个方法就行啦!!!
6. 支付结果回调
就在调起支付的 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(@"支付过程中用户取消了,请查询后台确认订单");
}
}