你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS編程技術 >> iOS 微信和支付寶關於回調處理

iOS 微信和支付寶關於回調處理

編輯:IOS編程技術

在支付這一塊,發現講支付集成的比較多,但是關於支付後回調處理的不多見,(當時因為這個問題懵逼了好久)就自己總結一下,

1.支付寶回調

  支付寶的回調想對來說比較簡單一些,因為支付寶的回調就在調起支付寶的那個方法中的block中,

    NSString *orderString = nil;
    if (signedString != nil) {orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"];
        
        
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            
            NSString * strTitle = [NSString stringWithFormat:@"支付結果"];
            NSString *strMsg;
            
            //【callback處理支付結果】
            if ([resultDic[@"resultStatus"] isEqualToString:@"9000"]) {
                
                strMsg = @"恭喜您,支付成功!";
                
            }else if([resultDic[@"resultStatus"] isEqualToString:@"6001"])
            {
                strMsg = @"已取消支付!";

            }else{
                strMsg = @"支付失敗!";
               
            }
               UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
            
            [alert show];
        }];
    }

上面我只對,成功,取消,失敗 三種狀態進行判斷,想仔細了解可以查看官方文檔。

2.微信支付的回調

  首先,支付回調API的方法,這個方法中完全是按照官方文檔寫的,自己基本上不需要操作

- (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) {
            //【由於在跳轉支付寶客戶端支付的過程中,商戶app在後台很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】
        }[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由於在跳轉支付寶客戶端支付的過程中,商戶app在後台很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】
        }];
    }
    if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {
        //微信支付回調
        return [WXApi handleOpenURL:url delegate:self];
    }
    
    //跳轉處理
    BOOL result = [UMSocialSnsService handleOpenURL:url];
    if (result == FALSE) {
        //調用其他SDK,例如支付寶SDK等
    }
    return result;
    
}

 

最後微信會調用下面這個方法,我是在這個方法中做的操作,由於這個方法是在AppDelegate中,如果在這裡跳轉到自己指定的頁面,有些困難,

於是就在這個方法中發通知到調起支付的頁面,再進行頁面跳轉操作。

//回調方法
-(void) onResp:(BaseResp*)resp
{
    NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
    NSString *strTitle;
    
    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
        strTitle = @"發送媒體消息結果";
    }
    
    if([resp isKindOfClass:[PayResp class]]){
        //支付返回結果,實際支付結果需要去微信服務器端查詢
        strTitle = [NSString stringWithFormat:@"支付結果"];
        
        switch (resp.errCode) {
            case WXSuccess:{
                strMsg = @"恭喜您,支付成功!";
                
                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}];
                
                break;
            }
            case WXErrCodeUserCancel:{
                strMsg = @"已取消支付!";
                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
                break;
            }
            default:{
                
                strMsg = [NSString stringWithFormat:@"支付失敗 !"];
                [MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
                break;
            }
        }
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
        
        [alert show];
    }
    
}

由於我們的取消和失敗,2種狀態的處理結果都是一樣的,所以就用了相同的通知。

 

由於在調起支付頁面,在調起前就已經注冊了通知,現在支付完後,就可以收到支付狀態的通知了。下面就很簡單了吧

 

最後在說一下,

  由於我們的付款性質不一樣,所以就遇到了同樣的支付成功狀態,由於不同的支付類型要跳轉的頁面也是不同的,這就要求在AppDelegate中的那個處理方法中識別出,不同的支付類型,(如充值,購物等)但是這個方法是微信api回調的方法,它只返回成功,取消,失敗等狀態。那就只能是支付前做個識別標示,但是由於支付跳到api了,脫離了應用,這個識別標示又無法直接傳過來。我想的方法就是保存一個支付標示:

    [[NSUserDefaults standardUserDefaults] setObject:@"CHONGZHI" forKey:@"PAYTYPE"];

在每個類型的支付調起方法中,保存一下不同的key,然後再那個

-(void) onResp:(BaseResp*)resp

 

就總結到這吧!希望能幫到一些還在迷茫的新手,如有什麼錯誤的地方請指出,謝謝!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved