iOS Apple Pay 开发流程

2021-02-26 15:25:04 浏览数 (1)

1. 介绍

项目中要用到支付功能,需要支付宝支付、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。

今天我们就主要介绍一下 Apple Pay 支付,其他支付介绍后面会尽快更新出来。

2. 支付流程介绍

▐ 2.1 Apple Pay 页面演示
  1. 买家在手机应用中购买商品或服务,在订单页面中展示 Apple Pay 按钮
  2. 通过银联控件,调起 Apple Pay 支付页面
  3. 用户通过支付页面验证 Touch ID,输入银行卡密码 是否需要输入银行卡密码取决于交易限额和银行支持情况
  4. 支付成功,商户应用内展示成功页面 (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 负责提示用户交易结果。

▐ 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. 调用支付接口

在调用银联支付类里面,首先增加头文件引用。

代码语言:javascript复制
#import "UPAPayPlugin.h"

// TODO 商户需要换用自己的mertchantID
#define kAppleMerchantID        @"merchant.com.XXXPay.ApplePay"

在调起支付的方法中代码如下:

代码语言:javascript复制
//当获得的tn不为空时,调用支付接口
if (tn != nil && tn.length > 0) {
        [UPAPayPlugin startPay:tn 
        mode:@"01" 
        viewController:ViewController 
        delegate:self andAPMechantID:kAppleMerchantID];
}

方法需要的几个参数文档上都写的有,tn 是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的。只需要调用一个方法就行啦!!!

6. 支付结果回调

就在调起支付的 ViewController 中写入下面代码即可

代码语言:javascript复制
#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(@"支付过程中用户取消了,请查询后台确认订单");
        
    }
}

0 人点赞