iOS 支付宝支付成功不走回调方法

2019-11-12  本文已影响0人  iOS门三闫

一.如果手机装有支付宝APP,支付成功后不会走下面这个方法

- (void)processOrderWithPaymentResult:(NSURL *)resultUrl

                      standbyCallback:(CompletionBlock)completionBlock;

而只走appdelegate里面的下面的方法

// NOTE: 9.0以后使用新API接口

- (BOOL)myApplication:(UIApplication*)appopenURL:(NSURL*)urloptions:(NSDictionary *)options;

// iOS9 之前系统

- (BOOL)myApplication:(UIApplication*)applicationopenURL:(NSURL*)urlsourceApplication:(NSString*)sourceApplicationannotation:(id)annotation;

因此我们需要在这两个方法里用通知来处理支付成功之后我们要做的事情

下面是完整的写法:

// NOTE: 9.0以后使用新API接口

- (BOOL)myApplication:(UIApplication*)appopenURL:(NSURL*)urloptions:(NSDictionary *)options

{

    if ([url.host isEqualToString:@"safepay"]) {

        //跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            //发通知

            [[NSNotificationCenter defaultCenter] postNotificationName:kAlipayResultNotification object:nil userInfo:resultDic];

            NSLog(@"result = %@",resultDic);

        }];

    }

   return  YES;

}

// iOS9 之前系统

- (BOOL)myApplication:(UIApplication*)applicationopenURL:(NSURL*)urlsourceApplication:(NSString*)sourceApplicationannotation:(id)annotation

{

    if ([url.host isEqualToString:@"safepay"]) {

        //跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            //发通知

            [[NSNotificationCenter defaultCenter] postNotificationName:kAlipayResultNotification object:nil userInfo:resultDic];

            NSLog(@"result = %@",resultDic);

        }];

    }

    return YES;

}

二.如果手机中没有安装支付宝APP,这个时候会唤起的H5收银台支付,这个时候支付成功之后才会走下面的回调方法

NSString *appScheme = @"alipayScheme";//info.plist中设置的Scheme

[[AlipaySDK defaultService] payOrder:payModel.aliPayOrderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

            if(resultDic !=nil) {//web回调

                NSError*error;

                NSString*code = [resultDicobjectForKey:@"resultStatus"];

                BOOLsuccess = [codeisEqualToString:@"9000"];

                if(!success) {

                    NSDictionary*userInfo =@{@"errorInfo": resultDic};

                    error = [[NSError alloc]initWithDomain:NSCocoaErrorDomain code: code.integerValue  userInfo:userInfo];

                }

            }

        }];

这个时候可以在此方法里处理我们支付成功之后要做的处理。

上一篇下一篇

猜你喜欢

热点阅读