• 概览
  • 集成模式
  • 支付方式
  • 开始接入
    • 申请测试商户
    • 测试验收场景
    • 上线前准备
    • 如何配置公钥
    • 请求与响应结构
    • API 签名组装规则
    • 收银台对接
    • iframe 对接
    • Direct API 对接
      • 国际卡支付流程(Direct API)
      • WeChatPay 流程(Direct API)
      • Alipay+ 流程(Direct API)
      • Apple Pay 流程(Direct API)
  • APIs
  • 附录
亮色模式
  1. 开始接入
  2. Direct API 对接

Apple Pay 流程(Direct API)

:::tip[]
适用场景

  • 支付方式:Apple Pay
  • 集成模式:Direct API 模式

开放能力对接清单:

  • API-支付
  • API-支付查询
  • Notify - 支付结果通知
    :::

一、业务时序图

:::tip[]
通过 Direct API 集成模式对接Apple Pay支付,实现在商家 APP 中接受用户Apple Pay钱包付款;
:::

applepay流程图.jpg

用户在商家客户端内购物下单; 商家客户端调用 Apple Pay 的 IOS SDK唤起支付; 用户通过验证密码或生物识别确认信息; Apple Pay 生成加密的 PaymenToken 等关键参数; 并将参数返回商家客户端; 商家客户端向后端发送支付指令; 商家服务端解密 PaymenToken 等信息(包含eci和cryptogram),Apple为了数据安全,返回的卡信息为虚拟信息,需要将此信息传给连连全球收单; **商家服务端调用连连全球收单的 [API-支付](https://doc.lianlianpay.com/3476473e0?nav=2) 接口进行创单支付;** **连连全球收单同步返回支付结果;** **支付成功后,连连开放平台会向商家服务端发送 [Notify - 支付结果通知](https://doc.lianlianpay.com/3476484e0?nav=2) ,同时建议商家对接 [API-支付查询](https://doc.lianlianpay.com/3476474e0?nav=2) 接口,确保及时更新订单状态;** **商家服务端收到支付结果通知后,须返回固定通知响应,表示商家已处理结果,否则会重新投递消息;** 商家客户端更新订单支付结果; 向用户展示最终支付结果;

二、订单处理说明

- `payment_status = "PS"` 时,说明连连创单成功且支付完成,商家可以更新自己的订单状态; - `payment_status = "WP"` 时,说明连连创单成功并等待用户付款,支付结果会以开放消息方式通知给商家指定的`notification_url`服务地址; - 支付失败结果中 `return_code`,`return_msg` 中提示原因,可以将 `return_code` 映射为商家自己的支付提示信息;

三、开发说明

准备工作

客户端开发是基于IOS SDK进行开发。


Apple Developer 注册应用,添加 apple pay payment processing选项,并添加已创建的 apple pay 证书。如下图:

image.png


在XCode应用的配置中,添加 apple pay 功能。首先targets点击左上角+Capability,添加 apple pay,然后在下方勾选需要的 Merchant IDs。

image.png



流程说明

``` - (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];
}

}


</Step>
<Step title="添加PKPaymentAuthorizationViewControllerDelegate代理">

@interface ViewController : UIViewController

#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);

}

</Step>
<Step title="回调方法收到paymentToken 结果后,将密文送至后端获得明文,再调用支付接口进行交易">

//apple pay 回调方法

  • (void)processPaymentWithToken:(PKPaymentToken *)paymentToken completion:(void (^)(PKPaymentAuthorizationStatus))completion {
    //失败通知
    completion(PKPaymentAuthorizationStatusFailure);

//成功通知
completion(PKPaymentAuthorizationStatusSuccess);
 }

```

四、测试集成

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