iOS集成支付宝,支付成功之后"收不到回调"解决

iOS集成支付宝,支付成功之后"收不到回调"解决

以下方法仅适用于支付宝sdk从 v15.1.0之前的版本 升级到 v15.1.0版本及之后

看下官方更新日志

IOS版本号:v15.1.0
修改时间:2016-4-28
更新点:
1. 支付结果返回统一,便于用户接入。
   原有方案:payOrder:fromScheme:callback接口,业务传入callback1,用于支付结果返回;
   processOrderWithPaymentReulst:standbyCallback接口,业务传入callback2,用于支付结果返回;
    一般一次支付中(跳支付宝客户端支付),都会涉及到这两个接口;原有的规则是callback1存在,则统一调用callback1返回支付结果给业务方,若callback1不存在(app被杀掉的情况),则调用callback2返回支付结果给业务方。
   现有方案:payOrder:fromScheme:callback接口,业务会传入CompletionBlock1(本地没有安装支付宝客户端的情况下(走H5收银台),会通过该CompletionBlock1反馈结果);                processOrderWithPaymentResult:standByCallback接口,业务会传入CompletionBlock2(本地安装了支付宝客户端的情况下,会通过该CompletionBlock2反馈结果)。

可以发现在 v15.1.0 之后回调机制发生变化,调用支付宝客户端支付不会走payOrder:fromScheme:callback 的回调,只会走Appdelegate 的方法:

注:iOS 9.0之后方法的变更

//可以看到该方法适用于iOS 4.2 - > iOS 9.0
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;

//iOS 9.0 之后使用下面方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options NS_AVAILABLE_IOS(9_0);

使用如下:


    #ifdef IOS9
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
    {
    if ([url.host isEqualToString:@"safepay"]) {
    //一般只需要调用这一个方法即可
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            [[NSNotificationCenter defaultCenter] postNotificationName:kAliPayCallBack object:resultDic];
        }];
        
        [[AlipaySDK defaultService] processAuth_V2Result:url
                                         standbyCallback:^(NSDictionary *resultDic) {
                                             NSLog(@"result = %@",resultDic);
                                             NSString *resultStr = resultDic[@"result"];
                                             NSLog(@"result = %@",resultStr);
                                         }];
    }
    else if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
    }
    #else
    -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    
    
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        [[AlipaySDK defaultService] processAuth_V2Result:url
                                         standbyCallback:^(NSDictionary *resultDic) {
                                             NSLog(@"result = %@",resultDic);
                                             NSString *resultStr = resultDic[@"result"];
                                             NSLog(@"result = %@",resultStr);
                                         }];
    }
    else if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
    }
    #endif

你可能感兴趣的:(iOS集成支付宝,支付成功之后"收不到回调"解决)