美文网首页iOS之报错上架填坑iOS开发杂货铺
iOS集成支付宝,支付成功之后"收不到回调"

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

作者: YNTCode | 来源:发表于2016-07-01 17:19 被阅读7382次

    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<NSString*, id> *)options NS_AVAILABLE_IOS(9_0);
    

    使用如下:

    
        #ifdef IOS9
        - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)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
    

    相关文章

      网友评论

      • RunningMan_Fly:请问一下小编,我iOS9之前和之后的方法都实现了,调起支付宝客户端支付成功之后,processOrderWithPaymentResult这个方法里面的block就是不走,反而走H5支付成功的回调payOrder: fromScheme: callback,这是什么原因啊
        泠樵:我也是,payOrder: fromScheme: callback 根本不走,走的是processOrderWithPaymentResult这个方法,而另一个应用里面,走的是 payOrder: fromScheme: callback这个方法,有解吗??两个应用代码一样的,没有什么变的。
        方寸山_linyut:请问解决了吗,我的也是同一个情况,一模一样
        Elvis丶仰望星空:请问解决了吗,我的也是同一个情况,一模一样
      • 清都:原来```payOrder:fromScheme:callback``下的block不走,但是在Appdelegate里添加你写得方法后,你写得方法里的block没有走,``payOrder:fromScheme:callback``里的block倒是走了,真神奇:joy:
      • 苜蓿鬼仙::joy: :joy: :joy: 我也是因为写了下划线不走回调了!好尴尬!!!
        HKrystal:@苜蓿鬼仙 我现在没有下划线也遇到不走回调的问题。
        苜蓿鬼仙:@老阿姨代码 就是字面上的意思,设置的 schemes字符串中不能带有下划线
        HKrystal:你好,请问URL schemes不能带下划线是什么意思
      • 9292a3b2c699:请问下怎么监听 支付宝 网页版的回调
      • feng_dev:app delegate 里面 的 回调不走,支付 成功了,钱扣了。
        okios:@杨大仙_ 已经解决了,原来是URL schemes不能带下划线
        YNTCode:@王易凡King URL schemes设置正确吗
        okios:你好,我也是这个问题,网上查到的全都是iOS9之后方法变更的问题,但是我老的方法旧的方法连走都没走,请问你解决了吗?什么原因?
      • 现在的执着:您好,想请教一个问题,我支付成功之后,返回到app,会走appdelegate中application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options这个方法,打断点也会走[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback到这步,但是block里面打印的却不输出,也就是不走block里面,想问一下是什么原因呢?
        feng_dev:@现在的执着 我尴尬的是 ,我支付成功了,支付宝里面有记录,然而不走回调啊,Demo就行,我工程就不行。。明明复制Demo的 。
        feng_dev:@现在的执着 我看博客说block是针对没有安装支付宝app的用户的。

      本文标题:iOS集成支付宝,支付成功之后"收不到回调"

      本文链接:https://www.haomeiwen.com/subject/cghmlttx.html