iOS:支付寶AlipaySDK集成流程

集成流程

1. 建立應用android

平臺包括:iOS、安卓、雙平臺。c++

須要填寫信息:應用名稱、應用簡介、iOS bundle ID、android應用包名、android簽名、支付寶網關、應用網關(選填)、受權回調地址、接口內容加密方式(通常使用AES)。web

添加功能:App支付、web支付、快捷手機web支付、刷臉支付等功能。objective-c

以上信息須要審覈經過才能分配AppIDexpress

2. 集成方式json

集成方式:經過 CocoaPods 導入、手動導入。安全

CocoaPods:在Podsfile文件中加入pod 'AlipaySDK-iOS',而後pod install服務器

手動導入:須要把資源包和SDKAlipaySDK.bundleAlipaySDK.framework導入工程中。markdown

這裏有個問題:不一樣版本SDK對應不一樣的場景,目前兩種SDK,一種是集成了UTDID庫,一種是沒有集成UTDID庫,有其餘三方SDK(友盟安全組件SDK)也包含UTDID庫,致使同一個庫重複引用app

添加依賴庫:

在 Build Phases 選項卡的 Link Binary With Libraries 中,增長如下依賴:libc++.tbdlibz.tbdSystemConfiguration.frameworkCoreTelephony.frameworkQuartzCore.frameworkCoreText.frameworkCoreGraphics.frameworkUIKit.frameworkFoundation.frameworkCFNetwork.frameworkCoreMotion.framework,最後還須要把AlipaySDK.framework也加入依賴庫。

須要注意:添加依賴庫除AlipaySDK.framework都是系統依賴庫,能夠直接查找到,三方或私有依賴庫須要手動拖入

這裏,集成就已經完成

開發:

在須要的支付的類中添加頭文件:

import <AlipaySDK/AlipaySDK.h>
複製代碼

組裝支付寶信息:

//將商品信息賦予AlixPayOrder的成員變量
Order* order = [Order new];

// NOTE: app_id設置
order.app_id = appID;

// NOTE: 支付接口名稱
order.method = @"alipay.trade.app.pay";

// NOTE: 參數編碼格式
order.charset = @"utf-8";

// NOTE: 當前時間點
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];

// NOTE: 支付版本
order.version = @"1.0";

// NOTE: sign_type設置
order.sign_type = @"RSA";

// NOTE: 商品數據
order.biz_content = [BizContent new];
order.biz_content.body = @"我是測試數據";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超時時間設置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格

//將商品信息拼接成字符串
NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
NSLog(@"orderSpec = %@",orderInfo);

// NOTE: 獲取私鑰並將商戶信息簽名,外部商戶的加簽過程請務必放在服務端,防止公私鑰數據泄露;
//       須要遵循RSA簽名規範,並將簽名字符串base64編碼和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderInfo];

// NOTE: 若是加簽成功,則繼續執行支付
if (signedString != nil) {
    //應用註冊scheme,在AliSDKDemo-Info.plist定義URL types
    NSString *appScheme = @"alisdkdemo";
    
    // NOTE: 將簽名成功字符串格式化爲訂單字符串,請嚴格按照該格式
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                             orderInfoEncoded, signedString];
    
    // NOTE: 調用支付結果開始支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];
}
複製代碼

其中須要注意的點:

  1. 須要摘取demo中的訂單信息 Order(訂單)、Authinfo(受權信息)類,其中支付寶寫好的屬性和寫好的商品信息拼接方法能夠直接調用。
  2. 私鑰必定要放在服務器,從服務器獲取私鑰簽名過的信息。
  3. 調起支付寶時須要傳入 Url scheme,要區分其餘App,有必定個性化標識度。不然支付寶沒法跳回本身的App。

配置返回Url的處理方法:

- (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. 位置在Appdelegate中,app 代理回調中,此方法是適用iOS9之後App處理方式,如今通常都適配iOS9以上。
  2. 支付完成後回到本身App中的處理方式。
  3. 全部的從第三方應用回跳後都走這個方法,經過不一樣三方app的url進行判斷,作不一樣的操做。

完成!

調研支付寶處理商品信息規則:

  1. 把商品信息轉jsonString。
  2. 把訂單信息和商品信息經過key進行a~z的排序拼接,轉爲jsonString。
  3. 把jsonString經過簽名加密,賦值給sign。
  4. 把賦值好的sign拼接在已經存在的jsonString後,經過支付寶API調起支付寶。
相關文章
相關標籤/搜索