关于支付宝两个回调的说明

525 阅读2分钟

前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在AppDelegate中,一个在支付代码中,都是支付成功的回调,区别是,在AppDelegate中的回调是调用客户端支付成功后的回调(成功和失败),在支付处的回调是通过web支付成功的回调。代码如下:

//独立客户端回调函数
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
                [[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];
            }

        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//            NSLog(@"result = %@",resultDic);
        }];
    }
    //    [UMSocialSnsService handleOpenURL:url];

    return YES;
}
 //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];

    //将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = nil;
    if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];

        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {
                [[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];
                //支付成功后进行的操作
                PaySuccessViewController *paySuccessVC=[[PaySuccessViewController alloc]init];
                [self.navigationController pushViewController:paySuccessVC animated:YES];
            }
            else
            {
                //支付失败后进行的操作
                PayErrorViewController *payErrorVC=[[PayErrorViewController alloc]init];
                [self.navigationController pushViewController:payErrorVC animated:YES];
            }

        }];


    }

这就是存在于支付宝中的两处回调。
还需要注意的是,支付成功怎么返回到自己的应用中,这里需要设置一个东西:

//支付宝支付代码部分的代码,确保支付成功或者失败可以回到自己的应用中
 NSString *appScheme = @"XXXXXXX";

同事需要设置应用中另一个地方,在工程中选中target
这里写图片描述
写上appScheme的值,确保代码和此处的是一摸一样的,才能成功回到应用中。

补充:在iOS10的系统中,因为增加了左上角自带的返回按钮可以返回到之前的app中,当点击这个按钮后的回调就没有了,那如何监听这个按钮呢,可以查看这篇博客:点击前往