面试题答案
一键面试在Objective-C实现Apple Pay支付过程中,处理不同结果的代码逻辑如下:
- 实现支付结果代理方法:
在你的视图控制器或相关类中,实现
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
-
关键方法说明:
paymentAuthorizationViewController:didAuthorizePayment:completion:
:当Apple Pay授权支付时调用。在此方法中,你需要将支付信息发送到服务器进行验证。验证成功后,通过completion
块传递PKPaymentAuthorizationStatusSuccess
;如果验证失败,传递PKPaymentAuthorizationStatusFailure
。paymentAuthorizationViewController:didFinishWithError:
:当支付过程中出现错误时调用,error
参数包含了具体的错误信息。你可以根据此信息向用户显示友好的错误提示。paymentAuthorizationViewControllerDidFinish:
:当用户取消支付时调用,在此方法中可以进行取消支付后的相关操作,如关闭支付界面。
-
设置代理并展示支付界面: 在发起支付请求并创建
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支付过程中不同结果的处理。