2020AliPaySDK-支付寶支付iOS端

最近有了點時間總結(jié)一下支付寶支付的問題,以免以后忘了。
我這里寫的是把主要業(yè)務(wù)邏輯都放后臺實現(xiàn)的方法,移動端直接調(diào)接口就行了,也是官方推薦的方法。
關(guān)于微信支付
官方文檔
AliPaySDK和友盟阿里云推送UTDID的沖突問題

如果你的項目還集成了阿里云推送,這里推薦使用手動集成SDK,不然會有UTDID沖突的問題。

代碼部分

#import "AppDelegate.h"
#import <AlipaySDK/AlipaySDK.h>

// NOTE: iOS9.0以前使用的API接口
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    
    if ([url.host isEqualToString:@"safepay"]) {
        //跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

// NOTE: iOS9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        //跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

//如果還集成了微信支付的SDK,就寫在一起
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options

{
    //微信
    BOOL result = [WXApi handleOpenURL:url delegate:self];
    if (!result) {
        //支付寶
        if ([url.host isEqualToString:@"safepay"]) {
            //跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
                NSLog(@"支付寶客戶端支付結(jié)果result = %@",resultDic);
                [PHTitleAlertView showWithAlerTitle:resultDic[@"memo"]];
                /*
                9000 訂單支付成功
                8000 正在處理中
                4000 訂單支付失敗
                6001 用戶中途取消
                6002 網(wǎng)絡(luò)連接出錯
                */
                if (resultDic && [resultDic objectForKey:@"resultStatus"] && ([[resultDic objectForKey:@"resultStatus"] intValue] == 9000)) {
                    
                    // 發(fā)通知帶出支付成功結(jié)果
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
                } else {
                    
                    // 發(fā)通知帶出支付失敗結(jié)果
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"alpayResult" object:resultDic];
                }
            }];
        }
    }
    return YES;
}

在發(fā)起支付的代碼處

1:給后臺傳支付清單獲取訂單編號orderNo。
2:用戶點擊支付寶支付按鈕的后,給后臺傳orderNo獲取orderStr。
3:喚起微信支付。
備注:AliPaySDK 付款有兩種模式:如果外部存在支付寶錢包,則直接跳轉(zhuǎn)到支付寶錢包付款;不存在的場景下,在 SDK 內(nèi)部進(jìn)行 H5 支付。測試人員需要關(guān)注這兩類測試場景,所以比微信支付少了,判斷是否安裝微信步驟.

#pragma mark - 調(diào)起支付寶支付頁面
/// 自己寫的喚起支付的方法
/// @param payOrder 后臺獲取的orderStr
- (void)SendAliPay:(NSString *)payOrder
{
//:Url_Scheme  為 app 在 info.plist 注冊的 scheme。我用的微信的:Url_Scheme 測試沒毛病
    [[AlipaySDK defaultService] payOrder:payOrder fromScheme:Url_Scheme callback:^(NSDictionary *resultDic) {
            if ([resultDic[@"ResultStatus"] isEqualToString:@"9000"]) {
                /*
                9000 訂單支付成功
                8000 正在處理中
                4000 訂單支付失敗
                6001 用戶中途取消
                6002 網(wǎng)絡(luò)連接出錯
                */
                [SVProgressHUD dismiss];
            }else{
                //最終支付結(jié)果以后臺反饋為準(zhǔn)
                NSString *str = resultDic[@"ResultStatus"];
                NSInteger num = str.integerValue;
                switch (num) {
                    case 8000:
                        [PHTitleAlertView showWithAlerTitle:@"正在處理"];
                        break;
                    case 4000:
                        [PHTitleAlertView showWithAlerTitle:@"訂單支付失敗"];
                        break;
                    case 6001:
                        [PHTitleAlertView showWithAlerTitle:@"用戶中途取消"];
                        break;
                    case 6002:
                        [PHTitleAlertView showWithAlerTitle:@"網(wǎng)絡(luò)連接出錯"];
                        break;
                        
                    default:
                        break;
                }
            }
        }];
    
}

至此結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容