iOS Apple Pay开发流程

1,494

一:介绍

项目中要用到支付功能,需要支付宝支付、支付宝网页支付转客户端、微信支付、银联支付、Apple_pay,所以打算总结一下,方便以后的查阅,也方便大家, 用到的地方避免再次被坑。 今天我们就主要介绍一下Apple_pay,其他支付也写了对应教程,并且给出了连接。

二:支付流程介绍

2.1 Apple Pay 页面演示

Apple Pay 页面演示

  1. 买家在手机应用中购买商品或服务,在订单页面中展示 Apple Pay 按钮
  2. 通过银联控件,掉起 Apple Pay 支付页面
  3. 用户通过支付页面验证 Touch ID,输入银行卡密码 是否需要输入银行卡密码取决于交易限额和银行支持情况
  4. 支付成功,商户应用内展示成功页面 (1)支付成功页面应参照 UI 示例,展示“银联”标识,“云闪付”标识。 (2)银联 SDK 控件支持折扣功能。在折扣活动期间,商户应用内应参照实例 UI 进行原金 额、折扣金额的展示

2.2 Apple Pay 支付的实现方式

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 负责提示用户交易结果。

三:工程配置

bundleID设置

bundleID设置

Capability中启用Apple Pay权限,并选择merchantID,merchantID申请流程

启用Apple Pay权限

之后项目会多一个Applepay的配置文件ApplePayYasin.entitlements

项目文件

四:下载Apple Pay SDK

Apple Pay SDK

下载之后,找到.h文件和库文件,使用UPPaymentControl需要将paymentcontrol/inc目录下UPAPayPlugin.h、UPAPayPluginDelegate.h文件和paymentcontrol/libs目录下的libUPAPayPlugin.a文件添加到商户应用的工程中

SDK路径

五:调用支付接口

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

#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是交易流水号,服务器端传回来的,客户端只有凭借这个参数才能调用支付控件 进行支付的。只需要调用一个方法就行啦!!!

六:支付结果回调

就在调起支付的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(@"支付过程中用户取消了,请查询后台确认订单");
        
    }
}

支付调起截图

关注 【网罗开发】微信公众号,网罗天下方法,方便你我开发,更多iOS技术干货等待领取,所有文档会持续更新,欢迎关注一起成长!

希望可以帮助大家

如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议

如需转载请联系我,经过授权方可转载,谢谢