集成支付寶SDK流程

5.2 SDK集成流程api

5.2.1 iOS數組

解壓接口壓縮文件(文件名是 WS_MOBILE_PAY_SDK_BASE.zip),找到iOS的壓縮文件(文件名是支付寶移動支付SDK 標準版(iOS).zip)。安全

1. 導入代碼服務器

  1. 步驟1:  啓動IDE(如Xcode),把iOS包中的壓縮文件中如下文件拷貝到項目文件夾下,網絡

    並導入到項目工程中。app

  2.  

    AlipaySDK.bundle
    AlipaySDK.framework
    

     

  3. 步驟2:  在須要調用AlipaySDK的文件中,增長頭文件引用。異步

  4. #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. 步驟1:  調用order.m 裏的函數 description將商品信息拼接成字符串做爲待簽名字符串,

    如:

  2. 步驟2:  使用類CreateRSADataSigner,調用signString簽名函數作簽名,如:

  3. 步驟3:  把簽名結果賦值給參數sign,並把sign 加入以前的待簽名數組中,此時獲得的即是要請求給支付寶的所有數據。

"partner=\"2088101568353491\"&seller_id=\"2088101568353491\"&out_trade_no=\"YR2VGG3G1I31XDZ\"&subject=\"1\"&body=\"我 是 測 試 數 據\"&total_fee=\"0.02\"&notify_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\"&notify_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&notify_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\"&notify_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了

大笑大笑

但願可以幫到你》》》》

相關文章
相關標籤/搜索