1. Direct API 对接
  • 概览
  • 集成模式
    • 收银台模式
    • 嵌入式 iframe 模式
    • Direct API 模式
    • 插件模式
  • 支付方式
    • 支付方式概览
    • 全球
      • 国际卡
      • Afterpay
      • Apple Pay
      • Google Pay
      • Klarna
    • 中国大陆&港台地区
      • Alipay CN
      • Alipay HK
      • JKO PAY
      • TWN BANK
      • WeChat Pay
    • 日韩地区
      • 日本
        • Konbini
      • 韩国
        • Kakao Pay
        • Naver Pay
        • PAYCO
    • 东南亚地区
      • 印度尼西亚
        • Akulaku
        • BNI
        • BRI
        • CIMB Clicks
        • DANA
        • Mandiri
        • Maybank
        • Nobu Bank QRIS
        • OVO
        • Permata
      • 马来西亚
        • Boost
        • Mcash
        • Touch n Go
      • 菲律宾
        • BPI
        • Coins.ph
        • GCash
        • GrabPay
        • Maya
      • 泰国
        • Bualuang iBanking
        • Krungsri Online
        • Prompt Pay
        • Rabbit LINE Pay
        • TrueMoney
      • 越南
        • Napas Card
        • VietQR
        • Zalopay
  • 开始接入
    • 申请测试商户
    • 测试验收场景
    • 上线前准备
    • 如何配置公钥
    • 请求与响应结构
    • API 签名组装规则
    • 支付完成同步跳转参数说明
    • 收银台对接
      • 收银台流程说明
    • iframe 对接
      • 国际卡支付流程(iframe)
      • 国际卡绑卡流程(iframe)
      • Google Pay 流程(iframe)
      • Apple Pay 流程(iframe)
    • Direct API 对接
      • 国际卡支付流程(Direct API)
      • WeChatPay 流程(Direct API)
      • Alipay+ 流程(Direct API)
      • Apple Pay 流程(Direct API)
  • APIs
    • 接口
      • API - 支付
      • API - 支付查询
      • API - 退款
      • API - 退款查询
      • API - 支付取消
      • API - 获取iframe凭证
      • API - 解绑
      • API - 绑卡查询
      • API - 物流上传
      • API - 支付查询-POST
    • 通知
      • Notify - 支付结果通知
      • Notify - 退款结果通知
      • Notify - 绑卡结果通知
      • Notify - 争议结果通知
  • 附录
    • 返回码
    • 业务错误码
    • 订单状态
    • 国家编码
    • 州
    • 币种
    • 承运商
    • 资源下载
      • 插件
      • 对接 SDK - Java
      • 对接 SDK - Node
  1. Direct API 对接

Apple Pay 流程(Direct API)

适用场景
支付方式:Apple Pay
集成模式:Direct API 模式
开放能力对接清单:
API-支付
API-支付查询
Notify - 支付结果通知

一、业务时序图#

通过 Direct API 集成模式对接Apple Pay支付,实现在商家 APP 中接受用户Apple Pay钱包付款;
ApplePay流程图.png
1
用户在商家客户端内购物下单;
2
商家客户端调用 Apple Pay 的 IOS SDK唤起支付;
3
用户通过验证密码或生物识别确认信息;
4
Apple Pay 生成加密的 PaymenToken 等关键参数;
5
并将参数返回商家客户端;
6
商家客户端向后端发送支付指令;
7
商家服务端解密 PaymenToken 等信息(包含eci和cryptogram),Apple为了数据安全,返回的卡信息为虚拟信息,需要将此信息传给连连全球收单;
8
商家服务端调用连连全球收单的 API-支付 接口进行创单支付;
9
连连全球收单同步返回支付结果;
10
支付成功后,连连开放平台会向商家服务端发送 Notify - 支付结果通知 ,同时建议商家对接 API-支付查询 接口,确保及时更新订单状态;
11
商家服务端收到支付结果通知后,须返回固定通知响应,表示商家已处理结果,否则会重新投递消息;
12
商家客户端更新订单支付结果;
13
向用户展示最终支付结果;

二、订单处理说明#

如何处理成功结果
如何处理失败结果
payment_status = "PS" 时,说明连连创单成功且支付完成,商家可以更新自己的订单状态;
payment_status = "WP" 时,说明连连创单成功并等待用户付款,支付结果会以开放消息方式通知给商家指定的notification_url服务地址;

三、开发说明#

准备工作#

客户端开发是基于IOS SDK进行开发。
1
注册Apple应用
Apple Developer 注册应用,添加 apple pay payment processing选项,并添加已创建的 apple pay 证书。如下图:
bbb31897-2102-4f80-bd5d-c2c6794b1041.jpg
2
添加Apple Pay功能
在XCode应用的配置中,添加 apple pay 功能。首先targets点击左上角+Capability,添加 apple pay,然后在下方勾选需要的 Merchant IDs。
a7f6236d-314c-4b84-85cc-5b10ade82aab.jpg
3
Apple Pay 证书每两年过期,需要更新证书重新打包应用。

流程说明#

1
客户端调用Apple Pay打开支付页相关核心代码(参考示例)
- (void)createPaymentRequest {
    // 创建支付请求
    PKPaymentRequest *request = [[PKPaymentRequest alloc] init];
    
    // applePay 的 id
    request.merchantIdentifier = @"merchant.-testing";
    request.supportedNetworks = @[PKPaymentNetworkVisa, PKPaymentNetworkMasterCard, PKPaymentNetworkChinaUnionPay, PKPaymentNetworkAmex];
    request.merchantCapabilities = PKMerchantCapability3DS | PKMerchantCapabilityEMV;
    request.countryCode = @"CN";
    request.currencyCode = self.currencyTextField.text ?: @"CNY";
    
    // 创建支付项
    PKPaymentSummaryItem *item = [PKPaymentSummaryItem summaryItemWithLabel:@"订单金额" amount:[NSDecimalNumber decimalNumberWithString:self.amountTextField.text]];
    PKPaymentSummaryItem *total = [PKPaymentSummaryItem summaryItemWithLabel:@"总计" amount:[NSDecimalNumber decimalNumberWithString:self.amountTextField.text]];
    
    request.paymentSummaryItems = @[item, total];
    
    // 显示支付授权界面
    PKPaymentAuthorizationViewController *authVC = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:request];
    authVC.delegate = self;
    
    if (authVC) {
        [self presentViewController:authVC animated:YES completion:nil];
    }
}
2
添加PKPaymentAuthorizationViewControllerDelegate代理
@interface ViewController : UIViewController<PKPaymentAuthorizationViewControllerDelegate>

#pragma mark - PKPaymentAuthorizationViewControllerDelegate

- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller didAuthorizePayment:(PKPayment *)payment completion:(void (^)(PKPaymentAuthorizationStatus))completion {
    // 处理支付授权
    [self processPaymentWithToken:payment.token completion:completion];
}

- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
    [controller dismissViewControllerAnimated:YES completion:nil];
}

//模拟后端支付请求
- (void)processPaymentWithToken:(PKPaymentToken *)paymentToken completion:(void (^)(PKPaymentAuthorizationStatus))completion {
    //返回 apple pay 支付失败
    completion(PKPaymentAuthorizationStatusFailure);
    
    //返回 apple pay 支付成功
    completion(PKPaymentAuthorizationStatusSuccess);
}
3
回调方法收到paymentToken 结果后,将密文送至后端获得明文,再调用支付接口进行交易
//apple pay 回调方法
- (void)processPaymentWithToken:(PKPaymentToken *)paymentToken completion:(void (^)(PKPaymentAuthorizationStatus))completion {
//失败通知
    completion(PKPaymentAuthorizationStatusFailure);
                
//成功通知
    completion(PKPaymentAuthorizationStatusSuccess);
 }
4
在调用服务端交易接口,有了确切交易结果的情况下,调用completion(PKPaymentAuthorizationStatusFailure)或者completion(PKPaymentAuthorizationStatusSuccess),结束 Apple Pay 交易流程。如果超时不调用,交易会自动失败,并在 Apple Pay 钱包页面上展示。

四、测试集成#

Apple Pay 为开发者提供了沙箱环境,可以参考 Apple Pay - 沙盒测试 ,请注意沙箱环境仅支持Visa和万事达卡组;
沙箱模式新增测试账号必须是未绑定过苹果开发者账号,如已绑过的账号无法添加;
沙箱模式必须在手机上登录测试账号,绑定测试卡才可以模拟交易流程,持卡人姓名无校验,如出现部分测试卡无法添加的问题,换张测试卡即可;
上一页
Alipay+ 流程(Direct API)
下一页
API - 支付