Apple Pay 流程(Direct API)
:::tip[]
适用场景
- 支付方式:Apple Pay
- 集成模式:Direct API 模式
开放能力对接清单:
一、业务时序图
:::tip[]
通过 Direct API 集成模式对接Apple Pay支付,实现在商家 APP 中接受用户Apple Pay钱包付款;
:::
二、订单处理说明
三、开发说明
准备工作
客户端开发是基于IOS SDK进行开发。
Apple Developer 注册应用,添加 apple pay payment processing选项,并添加已创建的 apple pay 证书。如下图:
在XCode应用的配置中,添加 apple pay 功能。首先targets点击左上角+Capability,添加 apple pay,然后在下方勾选需要的 Merchant IDs。
流程说明
// 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和万事达卡组;
- 沙箱模式新增测试账号必须是未绑定过苹果开发者账号,如已绑过的账号无法添加;
- 沙箱模式必须在手机上登录测试账号,绑定测试卡才可以模拟交易流程,持卡人姓名无校验,如出现部分测试卡无法添加的问题,换张测试卡即可;