5.2 SDK集成流程api
5.2.1 iOS數組
解壓接口壓縮文件(文件名是 WS_MOBILE_PAY_SDK_BASE.zip),找到iOS的壓縮文件(文件名是支付寶移動支付SDK 標準版(iOS).zip)。安全
1. 導入代碼服務器
步驟1: 啓動IDE(如Xcode),把iOS包中的壓縮文件中如下文件拷貝到項目文件夾下,網絡
並導入到項目工程中。app
AlipaySDK.bundle AlipaySDK.framework
步驟2: 在須要調用AlipaySDK的文件中,增長頭文件引用。異步
#import <AlipaySDK/AlipaySDK.h>函數
步驟3: 配置請求信息。ui
AlipaySDK.bundle AlipaySDK.framework
Order *order = [[Order alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO]; //訂單ID(由商家□自□行制定)order.productName = product.subject; //商品標題order.productDescription = product.body; //商品描述編碼
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品價格
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 8頁
移動支付接口 SDK2.0 標準版附錄文檔
order.notifyURL = @"http://www.xxx.com"; //回調URLorder.service = @"mobile.securitypay.pay";order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
//應用註冊scheme,在AlixPayDemo-Info.plist定義URL typesNSString *appScheme = @"alisdkdemo";
//將商品信息拼接成字符串
NSString *orderSpec = [order description];NSLog(@"orderSpec = %@",orderSpec);
//獲取私鑰並將商戶信息簽名,外部商戶能夠根據狀況存放私鑰和簽名,只須要遵循RSA 簽名規範,並將簽名字符串base64 編碼和 UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//將簽名成功字符串格式化爲訂單字符串,請嚴格按照該格式NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSStringstringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appSchemecallback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
[tableView deselectRowAtIndexPath:indexPath animated:YES];}
詳細可參見 Demo中示例文件
AliSDKDemo\APViewController.hAliSDKDemo\APViewController.mAliSDKDemo\Order.h
AliSDKDemo\Order.m
步驟4: 配置支付寶客戶端返回url處理方法。
如示例 AliSDKDemo\APAppDelegate.m文件中,增長引用代碼:
#import <AlipaySDK/AlipaySDK.h>
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3
第 9頁
移動支付接口 SDK2.0 標準版附錄文檔
在@implementation AppDelegate中增長以下代碼:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)urlsourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
//若是極簡SDK 不可用,會跳轉支付寶錢包進行支付,須要將支付寶錢包的支付結果回傳給SDKif ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic); }];
}
if ([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登受權返回authCode
[[AlipaySDK defaultService] processAuthResult:urlstandbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic); }];
}
return YES;}
2. 針對Demo的運行注意
(1) 關於簽名代碼問題
AliSDKDemo\Util及下面全部文件
AliSDKDemo\openssl及下面全部文件
libcrypto.a
libssl.a
這些文件是爲示例簽名所在客戶端本地使用。出於安全考慮,請商戶儘可能把私鑰保存在服務端,在服務端進行簽名驗籤。
(2) 若是遇到運行後報錯,相似於如下提示信息:
Cannot find interface declaration for 'NSObject', superclass of 'Base64'
那麼須要打開報錯了的文件,增長頭文件。
#import <Foundation/Foundation.h>
(3) 若是商戶要在某個文件中使用支付寶的SDK 類庫,需增長引用頭文件。
#import <AlipaySDK/AlipaySDK.h>
(4) 點擊項目名稱,點擊「Build Settings」選項卡,在搜索框中,以關鍵字「search」搜索,對「Header Search Paths」增長頭文件路徑:$(SRCROOT)/項目名稱。若是頭文件信息已增長,可沒必要再增長。
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 10頁
移動支付接口 SDK2.0 標準版附錄文檔
圖5-1增長頭文件信息
(5) 點擊項目名稱,點擊「Build Phases」選項卡,在「Link Binary with Librarles」選項中,新增「AlipaySDK.framework」和「SystemConfiguration.framework」兩個系統庫文件。若是商戶項目中已有這兩個庫文件,可沒必要再增長。
圖5-2增長系統庫文件
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 11頁
移動支付接口 SDK2.0 標準版附錄文檔
(6) 點擊項目名稱,點擊「Info」選項卡,在「URL Types」選項中,點擊「+」,在「URL Schemes」中輸入「alisdkdemo」。「alisdkdemo」來自於文件「APViewController.m」的NSString *appScheme = @"alisdkdemo";。
圖5-3配置 URL Schemes
3. 配置基本信息打開「APViewController.m」文件,對如下三個參數進行編輯
表5-1 IOS基本信息配置
NSString *partner = @""; NSString *seller = @""; NSString *privateKey = @"";
參數 |
含義 |
partner |
合做身份者ID,以2088 開頭由16 位純數字組成的字符串。請參考「7.1如何得到PID與密鑰」。 |
seller |
支付寶收款帳號,手機號碼或郵箱格式。 |
private_key |
商戶方的私鑰,pkcs8格式。請參考「7.2 RSA密鑰生成與使用」。 |
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 12頁
移動支付接口 SDK2.0 標準版附錄文檔注意:
這些參數配置是爲客戶端簽名功能服務的,僅做爲示例使用。商戶在接入支付寶產品時,請把這些信息經過商戶項目本身的服務端傳遞。
4. 代碼示例運行邏輯
步驟1: 調用order.m 裏的函數 description將商品信息拼接成字符串做爲待簽名字符串,
如:
步驟2: 使用類CreateRSADataSigner,調用signString簽名函數作簽名,如:
步驟3: 把簽名結果賦值給參數sign,並把sign 加入以前的待簽名數組中,此時獲得的即是要請求給支付寶的所有數據。
"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"YR2VGG3G1I31XDZ\"&subject=\"1\"&body=\"我 是 測 試 數 據\"&total_fee=\"0.02\"¬ify_url=\"http://www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\""
"GsSZgPloF1vn52XAItRAldwQAbzIgkDyByCxMfTZG%2FMapRoyrNIJo4U1LUGjHp6gdBZ7U8jA1kljLPqkeGv8MZigd3kH25V0UK3Jc3C94Ngxm5S%2Fz5QsNr6wnqNY9sx%2Bw6DqNdEQnnks7PKvvU0zgsynip50lAhJmflmfHvp%2Bgk%3D"
"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"YR2VGG3G1I31XDZ\"&subject=\"1\"&body=\"我 是 測 試 數 據\"&total_fee=\"0.02\"¬ify_url=\"http://www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\"&sign=\"GsSZgPloF1vn52XAItRAldwQAbzIgkDyByCxMfTZG%2FMapRoyrNIJo4U1LUGjHp6gdBZ7U8jA1kljLPqkeGv8MZigd3kH25V0UK3Jc3C94Ngxm5S%2Fz5QsNr6wnqNY9sx%2Bw6DqNdEQnnks7PKvvU0zgsynip50lAhJmflmfHvp%2Bgk%3D\"&sign_type=\"RSA\""
步驟4: 調用(AlipaySDK *)defaultService 類下面的支付接口函數,喚起支付寶支付頁面。
appScheme 爲app 在info.plist 註冊的 scheme。
(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr
callback:(CompletionBlock)completionBlock
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 13頁
移動支付接口 SDK2.0 標準版附錄文檔
圖5-4支付寶支付頁面後面的動做全由買家在支付寶收銀臺中操做完成。若是設備中有支付寶客戶端,會
優先調用支付寶客戶端進行支付,支付完成後會從新喚起商戶app。
步驟5: 當這筆交易被買家支付成功後支付寶收銀臺上顯示該筆交易成功,並提示用戶「返回」。此時在APAppDelegate.m的 -
(BOOL)application:(UIApplication )application openURL:(NSURL )urlsourceApplication:(NSString *)sourceApplication annotation:(id)annotation中調用獲取返回數據的代碼:
拿到返回數據:
點取消後返回
對其作 URLDecode
支付寶(中國)網絡技術有限公司 版權全部|版本:1.3第 14頁
[[AlipaySDK defaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary *resultDic) {NSLog(@"result = %@",resultDic);//返回的支付結果}];
"alisdkdemo://safepay/?%7B%22memo%22:%7B%22result%22:%22%22,%22memo%22:%22%E7%94%A8%E6%88%B7%E4%B8%AD%E9%80%94%E5%8F%96%E6%B6%88%22,%22ResultStatus%22:%226001%22%7D,%22requestType%22:%22safepay%22%7D"
移動支付接口 SDK2.0 標準版附錄文檔點確認後返回
"alisdkdemo://safepay/?{"memo":{"result":"","memo":"用 戶 中 途 取 消","ResultStatus":"6001"},"requestType":"safepay"}"
"alisdkdemo://safepay/?%7B%22memo%22:%7B%22result%22:%22partner=%5C%222088101568353491%5C%22&seller_id=%5C%222088101568353491%5C%22&out_trade_no=%5C%22QU6ZOD85K4HVQFN%5C%22&subject=%5C%221%5C%22&body=%5C%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%5C%22&total_fee=%5C%220.02%5C%22¬ify_url=%5C%22http:%5C/%5C/www.xxx.com%5C%22&service=%5C%22mobile.securitypay.pay%5C%22&payment_type=%5C%221%5C%22&_input_charset=%5C%22utf-8%5C%22&it_b_pay=%5C%2230m%5C%22&show_url=%5C%22m.alipay.com%5C%22&success=%5C%22true%5C%22&sign_type=%5C%22RSA%5C%22&sign=%5C%22pg16DPA%5C/cIRg1iUFCl8lYZG54de+kfw+vCj32hGWye97isZ1A4bW6RNaDXHhZXVaI5Vk2YDxhNUl85EHRd+EL7%5C/+ogQTnsaEHl+D13PuZExIXRKGBnkYqaNV6kH6hDygnf5IOtoojHWLQyem7oRBVzB0vlF%5C/+YGFpzFHZyTVpM8=%5C%22%22,%22memo%22:%22%22,%22ResultStatus%22:%229000%22%7D,%22requestType%22:%22safepay%22%7D"
對其作 URLDecode
"alisdkdemo://safepay/?{"memo":{"result":"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"QU6ZOD85K4HVQFN\"&subject=\"1\"&body=\"我 是 測 試 數 據\"&total_fee=\"0.02\"¬ify_url=\"http:\/\/www.xxx.com\"&service=\"mobile.securitypay.pay\"&payment_type=\"1\"&_input_charset=\"utf-8\"&it_b_pay=\"30m\"&show_url=\"m.alipay.com\"&success=\"true\"&sign_type=\"RSA\"&sign=\"pg16DPA\/cIRg1iUFCl8lYZG54de+kfw+vCj32hGWye97isZ1A4bW6RNaDXHhZXVaI5Vk2YDxhNUl85EHRd+EL7\/+ogQTnsaEHl+D13PuZExIXRKGBnkYqaNV6kH6hDygnf5IOtoojHWLQyem7oRBVzB0vlF\/+YGFpzFHZyTVpM8=\"","memo":"","ResultStatus":"9000"},"requestType":"safepay"}"
以後,對這些數據作處理。
注意:
因爲在跳轉支付寶客戶端支付的過程當中,商戶app在後臺極可能被系統kill了,因此pay 接口的callback 就會失效,請商戶對 standbyCallback返回的回調結果進行處理;
同步返回數據時,建議經過服務端的驗籤功能代碼作驗籤處理,以後再對返回的數據作業務邏輯處理;
須以服務器異步通知的結果數據爲準,並對其作業務邏輯處理。
在集成支付寶的時候會出現一下錯誤:這是路徑錯誤,
一個文件夾:名字本身起裏面放着支付寶的所需的第三方庫,等頭文件如上
在build Setting裏面點擊Header Search Paths而後將文件夾拖進去如上:不要手打比較容易出錯。會自動識別成相對路徑。而後就OK了
但願可以幫到你》》》》