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 {

            }
        };
    }];
}

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

你可能感兴趣的:(iOS开发总结-微信支付回调)