iOS开发总结-微信支付回调

前言

微信支付成功之后,会弹出一个支付成功的界面,点击返回返回我们的APP,我们才能接受到成功通知,当点击苹果左上角返回键是不走成功回调的,当然双击home键直接跳回我们的APP也是不走回调的

解决思路

需要在进入前台的时候请求服务器,服务器去请求是否支付成功,把结果返回给客户端,判断是否支付成功,成功之后通知相应界面做出处理

实现

APPDelegate中定一个个全局变量

{
    BOOL _payTureFaulseBack;    //支付回调处理判断
}

进入前台的时候,延迟的主要原因是给服务器一定的时间,去请求结果

- (void)applicationWillEnterForeground:(UIApplication *)application {

    _payTureFaulseBack = NO;
    
    //延时操作处理同时收到回调的情况
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        //如果没有收到支付回调
        if (!_payTureFaulseBack) {
            //微信支付左上角点击,
            if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {
                
                [MouoNetManager requestPayRedPacketIsReslutWithRedPacketId1:[MouoPayManager shareManager].redPacketId finish:^(BOOL success, NSError *error) {
                    if (success) {
                        [MouoPayManager shareManager].payState = payEnd;
                        [[MouoPayManager shareManager] synchronize];
                        [WJIMMainManager shareManager].isSucessPay = YES;
                    }else {
                        
                    }
                }];
                
            };
        }
        
    });
}

同时我们要在app程序回调那里判断,如果它走的是回调我们当然不需要进行后台服务器的验证了

#pragma mark - PING++

// iOS 8 及以下请用这个
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    
    _payTureFaulseBack = YES;
    
    return [Pingpp handleOpenURL:url withCompletion:^(NSString *result, PingppError *error) {

        if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {

            if (!error) {
                [MouoPayManager shareManager].payState = payEnd;
                [[MouoPayManager shareManager] synchronize];
                [WJIMMainManager shareManager].isSucessPay = YES;
            }else {

            }
        };
    }];
}

// iOS 9 以上请用这个
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
    
    
    _payTureFaulseBack = YES;
    
    return [Pingpp handleOpenURL:url withCompletion:^(NSString *result, PingppError *error) {

        if ([[MouoPayManager shareManager].payState isEqualToString:payBegin]) {
            [MouoPayManager shareManager].payState = payEnd;
            [[MouoPayManager shareManager] synchronize];
            
            if (!error) {
                [WJIMMainManager shareManager].isSucessPay = YES;
            }else {

            }
        };
    }];
}

成功之后通知相应界面做出相应,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,173评论 25 709
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,734评论 0 15
  • 停滞了2个月的跑步今天又重启了。 前2个月正值盛夏,白天太阳火辣辣,晩上闷热无比,温度一日比一日高。这种极端天气白...
    伍琴阅读 1,443评论 0 0
  • 投射自己以后不说学习方面的话了,儿子不喜欢听并且会因此更不学习。所以说别的话语好了
    吴若阅读 812评论 0 0
  • 我一直是咪蒙老师的粉丝,每天守着手机看她的推送,有种看故事会的那种乐趣,而且我觉得她是一个很幽默的人。 比如之前的...
    迟酱阅读 2,615评论 0 0