首次接入支付宝 SDK 时,很多开发者容易混淆其中的两个回调机制。文档里虽然写了,但如果不细看,真不知道到底该用哪个。今天咱们就把这两个回调的区别彻底讲清楚。
第一个是支付接口直接传入的回调 Block。当你调用 payOrder:fromScheme:callback: 时,这个 Block 会立即返回结果。它主要用于处理网页版支付(WAP)或者不需要跳转支付宝客户端的场景。注意看注解里的说明,这是用于非跳转钱包支付的回调。
[[AlipaySDK defaultService] payOrder:orderString
fromScheme:appScheme
callback:^(NSDictionary *resultDic) {
NSLog(@"result1 = %@", resultDic);
// 状态码 9000 代表成功
if ([[resultDic objectForKey:@"resultStatus"] integerValue] == 9000) {
successCallBack(1);
} else {
failureCallBack(0);
}
}];
第二个回调是最常用的,也是和微信支付位置一样的那个。它发生在用户从支付宝客户端返回到你的 App 时,需要在 AppDelegate 中处理 URL Scheme。
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
if ([url.host isEqualToString:@"safepay"]) {
// 这里处理支付宝返回的结果
NSString *resultString = [url query];
// 解析 resultString 判断支付结果
return [[AlipaySDK defaultService] handlePaymentResult:resultString
callback:^(NSDictionary *resultDic) {
if ([[resultDic objectForKey:@"resultStatus"] integerValue] == 9000) {
successCallBack(1);
} else {
failureCallBack(0);
}
}];
}
return YES;
}
简单总结一下:第一种是直接同步返回结果,适合内部流程;第二种是异步跳转回来,适合唤起支付宝客户端支付。实际开发中,通常两者配合使用,确保支付闭环。

