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

前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在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中,当点击这个按钮后的回调就没有了,那如何监听这个按钮呢,可以查看这篇博客:点击前往

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值