ios支付寶支付集成及實現

許久未寫博客,趁著這段時間項目比較輕松來寫寫。最近的項目的遇到了第三方支付,有支付寶支付、微信支付,這里我先寫一下支付寶支付的集成和使用,可以給小白們一些幫助。具體的集成流程在官方文檔中都有,可以前去參考。

第一步集成

支付寶的集成比較簡單,首先進入螞蟻金服開放平臺,注冊好開發者賬號,然后創建應用

選擇自用型應用

在創建應用后會進行完善應用信息,如果要使用支付功能必須要進行簽約,簽約的話會審核商家也就是應用內支付的收款方的相關信息,只有用過了審核才能使用支付功能。關于簽約我們就不細說了,直接先說集成。
步驟1:啟動IDE(如Xcode),把iOS包中的壓縮文件中以下文件拷貝到項目文件夾下,并導入到項目工程中。
AlipaySDK.bundleAlipaySDK.framework
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:


在導入依賴庫后集成就基本完成了。
作為移動端在支付上做的事其實很少,具體的如公鑰密鑰的配置,商品信息的配置還有價格計算等等都是放在商戶服務端完成,從安全的角度來說在移動端代碼中是不允許進行商品加密的。所以這交給后臺人員就好了,他們處理后我們直接調用支付接口獲取組裝和簽名后的請求串orderString,將獲取到的orderString直接傳入調用啟動支付寶的的SDK中。

第二步使用

首先在Appdelegate中寫下以下方法

- (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);
        }];
    }
    return YES;
}

// NOTE: 9.0以后使用新API接口
- (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);
        }];
    }
    return YES;
}

在使用支付寶支付前,先寫一個支付單列,方便在各個地方調用支付,當然也有其他方式,我這里使用的是單列。
1.首先創建支付單列
在.m文件中

/**
 *  支付單例管理類
 */
+(id)sharePayManager
{
    static SYPayManager *asAlixPay = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        asAlixPay = [[SYPayManager alloc] init];
    });
   

支付寶支付方法

/**
 *  支付寶支付
 */
-(void)handleOrderPayWithParams:(NSDictionary *)aParam
{
 
    
    NSLog(@"aParm = %@",aParam);
    NSString *appScheme = @"alisdkofshuyinHotel";
    NSString *orderString = aParam[@"payInfo"];
    
    
    // NOTE: 調用支付結果開始支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
        int statusCode = [resultDic[@"resultStatus"]  intValue];
        
        if (statusCode == 9000)
        {
            //訂單支付
            [MBProgressHUD showText:@"支付成功"];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
            
        }
        else
        {
            //交易失敗
           // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
            [MBProgressHUD showText:@"支付異常"];
        }

        
    }];
}

在.h文件里面

//生成支付寶單例類
+(id)sharePayManager;


//支付寶支付
//aParam 后端返回支付信息
-(void)handleOrderPayWithParams:(NSDictionary *)aParam;

記得先引用頭文件
#import <AlipaySDK/AlipaySDK.h>

單列寫好后,在需要支付的地方調用單列就可以了。我這里采用的是字典,在用的地方將從服務端請求下來支付商品信息orderString裝入字典,appScheme是在開發平臺中得到的。得到這兩個后傳入調用支付寶的方法中。

 NSString *appScheme = @"alisdkofshuyinHotel";
   NSString *orderString = aParam[@"payInfo"];

調用支付寶

 // NOTE: 調用支付結果開始支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
        int statusCode = [resultDic[@"resultStatus"]  intValue];
        
        if (statusCode == 9000)
        {
            //訂單支付
            [MBProgressHUD showText:@"支付成功"];
            [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
            
        }
        else
        {
            //交易失敗
           // [[NSNotificationCenter defaultCenter] postNotificationName:@"PAY_STATUS" object:@"0"];
            [MBProgressHUD showText:@"支付異常"];
        }

        
    }];

在使用單列的地方如下寫
[[SYPayManager sharePayManager]handleOrderPayWithParams:responseObject[@"data"]];
以上基本就是移動端所需要做的事了。麻煩的事情都交給服務端去做了,我們簡單調用接口就好了,所以支付還是比較簡單的。微信支付其實也差不多,有空再寫微信支付。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容