1. 介绍
项目中要用到支付功能,需要支付宝支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。
今天我们就主要介绍一下 Apple Pay 支付,其他支付介绍后面会尽快更新出来。
2. 支付流程介绍
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 负责提示用户交易结果。
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.AgreePay.ApplePayAgree"
在调起支付的方法中代码如下:
//当获得的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(@"支付过程中用户取消了,请查询后台确认订单");
}
}