MST

星途 面试题库

面试题:Objective-C实现Apple Pay支付的交易处理

假设在Objective-C实现Apple Pay支付过程中,支付请求已经创建并发送,如何处理支付交易过程中的成功、失败和用户取消等不同结果情况,描述具体的代码逻辑和关键方法调用。
33.5万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

在Objective-C实现Apple Pay支付过程中,处理不同结果的代码逻辑如下:

  1. 实现支付结果代理方法: 在你的视图控制器或相关类中,实现 PKPaymentAuthorizationViewControllerDelegate 协议的方法。
@interface YourViewController : UIViewController <PKPaymentAuthorizationViewControllerDelegate>
//...
@end

@implementation YourViewController
// 支付成功
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                      didAuthorizePayment:(PKPayment *)payment
                              completion:(void (^)(PKPaymentAuthorizationStatus status))completion {
    // 这里进行与服务器验证支付信息等操作
    // 假设验证成功
    completion(PKPaymentAuthorizationStatusSuccess);
}

// 支付失败
- (void)paymentAuthorizationViewController:(PKPaymentAuthorizationViewController *)controller
                      didFinishWithError:(NSError *)error {
    // 处理支付失败逻辑,例如显示错误信息给用户
    NSString *errorMessage = [NSString stringWithFormat:@"支付失败: %@", error.localizedDescription];
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"支付失败"
                                                                           message:errorMessage
                                                                    preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定"
                                                      style:UIAlertActionStyleDefault
                                                    handler:nil];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated:YES completion:nil];
}

// 用户取消支付
- (void)paymentAuthorizationViewControllerDidFinish:(PKPaymentAuthorizationViewController *)controller {
    // 处理用户取消支付逻辑,例如返回上一界面
    [controller dismissViewControllerAnimated:YES completion:nil];
}
@end
  1. 关键方法说明

    • paymentAuthorizationViewController:didAuthorizePayment:completion::当Apple Pay授权支付时调用。在此方法中,你需要将支付信息发送到服务器进行验证。验证成功后,通过 completion 块传递 PKPaymentAuthorizationStatusSuccess;如果验证失败,传递 PKPaymentAuthorizationStatusFailure
    • paymentAuthorizationViewController:didFinishWithError::当支付过程中出现错误时调用,error 参数包含了具体的错误信息。你可以根据此信息向用户显示友好的错误提示。
    • paymentAuthorizationViewControllerDidFinish::当用户取消支付时调用,在此方法中可以进行取消支付后的相关操作,如关闭支付界面。
  2. 设置代理并展示支付界面: 在发起支付请求并创建 PKPaymentAuthorizationViewController 后,设置代理并展示该视图控制器。

// 创建支付请求并配置...
PKPaymentRequest *paymentRequest = [[PKPaymentRequest alloc] init];
//...配置支付请求参数

PKPaymentAuthorizationViewController *paymentViewController = [[PKPaymentAuthorizationViewController alloc] initWithPaymentRequest:paymentRequest];
if (paymentViewController) {
    paymentViewController.delegate = self;
    [self presentViewController:paymentViewController animated:YES completion:nil];
} else {
    // 处理无法创建支付界面的情况,例如设备不支持Apple Pay
    NSString *errorMessage = @"设备不支持Apple Pay";
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"错误"
                                                                           message:errorMessage
                                                                    preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定"
                                                      style:UIAlertActionStyleDefault
                                                    handler:nil];
    [alertController addAction:okAction];
    [self presentViewController:alertController animated:YES completion:nil];
}

这样就完成了在Objective-C中Apple Pay支付过程中不同结果的处理。