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.bundle
、AlipaySDK.framework
導入工程中。markdown
這裏有個問題:不一樣版本SDK對應不一樣的場景,目前兩種SDK,一種是集成了UTDID庫,一種是沒有集成UTDID庫,有其餘三方SDK(友盟安全組件SDK)也包含UTDID庫,致使同一個庫重複引用。app
添加依賴庫:
在 Build Phases 選項卡的 Link Binary With Libraries 中,增長如下依賴:libc++.tbd
、libz.tbd
、SystemConfiguration.framework
、CoreTelephony.framework
、QuartzCore.framework
、CoreText.framework
、CoreGraphics.framework
、UIKit.framework
、Foundation.framework
、CFNetwork.framework
、CoreMotion.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);
}];
}
複製代碼
其中須要注意的點:
配置返回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;
}
複製代碼
須要注意:
完成!
調研支付寶處理商品信息規則: