1. 程式人生 > >iOS整合支付寶支付的詳細講解以及常見錯誤

iOS整合支付寶支付的詳細講解以及常見錯誤

  文章轉載自 http://www.bubuko.com/infodetail-1139083.html ,自覺寫的很詳細,粘貼出來供學習。。。

一,在支付寶開放平臺下載支付寶SDK(https://openhome.alipay.com/platform/document.htm#down)

二,新增sdk檔案到xcode

  1,新建一個aliPaySDK資料夾,提取SDK包中以下檔案到此資料夾裡,在xcode中新增此資料夾

       技術分享

  2.在xcode中,點選專案名,選擇"target"->"Link Binary With Libraries"新增依賴庫。  

技術分享

  3.編譯專案,會出現以下問題:

  1)"Unknown type name ‘NSString‘ "或者"Unknown type name ‘NSData‘ "等不識別常見類的問題。

  技術分享

  這是因為缺少Foundation類庫和UIKit類庫,支付寶Demo中之所以沒有出現此錯誤,是因為在.pch檔案中匯入過這些類庫

  解決辦法:只需要在出現錯誤的檔案中匯入這些類庫即可

  技術分享

  2)‘openssl/asn1.h‘ file not found

  技術分享

  這是openssl資料夾標頭檔案連結問題,如果openssl資料夾隨意拉進專案中,即使新增標頭檔案連結,也可能解決不了此問題,

  這也是問什麼一開始就將所需要的檔案放到一個新建資料夾中再新增到專案中的原因。

  解決辦法:Targets->Build Settings->Header Search Path中新增1中建立的aliPaySDK資料夾的路徑(拖拽此資料夾至輸入框即可)

  技術分享

  3)根據專案需求新增demo中ViewController中的程式碼 編譯後可能會出下面錯誤:

  "_OBJC_CLASS_$_Product", referenced from: objc-class-ref in ViewController.o

  技術分享

  AlipaySDK的demo中將Product的定義寫在了ViewControler.h中所致

  技術分享

  解決辦法:新建Product類,將ViewController中的程式碼

拷貝過去即可。

  技術分享

三,新增支付邏輯程式碼,完成支付過程。

  ViewController.m檔案

 1 /*============================================================================*/
 2     /*=======================需要填寫商戶app申請的===================================*/
 3     /*============================================================================*/
 4     //這裡的三個引數是公司和支付簽約之後得到的,沒有這三個引數無法完成支付
 5     NSString *partner = @"";
 6     NSString *seller = @"";
 7     NSString *privateKey = @"";
 8     /*============================================================================*/
 9     /*============================================================================*/
10     /*============================================================================*/
11     
12     //partner和seller獲取失敗,提示
13     if ([partner length] == 0 ||
14         [seller length] == 0 ||
15         [privateKey length] == 0)
16     {
17         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
18                                                         message:@"缺少partner或者seller或者私鑰。"
19                                                        delegate:self
20                                               cancelButtonTitle:@"確定"
21                                               otherButtonTitles:nil];
22         [alert show];
23         return;
24     }
25     
26     /*
27      *生成訂單資訊及簽名
28      */
29     //將商品資訊賦予AlixPayOrder的成員變數
30     Order *order = [[Order alloc] init];
31     order.partner = partner;
32     order.seller = seller;
33 #warning 這裡需要填商品資訊
34     order.tradeNO = @""; //訂單ID(由商家自行制定)
35     order.productName = @"測試商品"; //商品標題
36     order.productDescription = @"這是一個測試商品"; //商品描述
37     order.amount = @"0.01"; //商品價格
38     order.notifyURL = @""; //回撥URL   這個URL是在支付之後,支付寶通知後臺伺服器,使資料同步更新,必須填,不然支付無法成功
39     
40     //下面的引數是固定的,不需要改變
41     order.service = @"mobile.securitypay.pay";
42     order.paymentType = @"1";
43     order.inputCharset = @"utf-8";
44     order.itBPay = @"30m";
45     order.showUrl = @"m.alipay.com";
46 
47     //應用註冊scheme,在AlixPayDemo-Info.plist定義URL types
48     //如果不知道scheme是神馬東西,請自行百度
49     NSString *appScheme = @"";
50     
51     //將商品資訊拼接成字串
52     NSString *orderSpec = [order description];
53     
54     //獲取私鑰並將商戶資訊簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規範,並將簽名字串base64編碼和UrlEncode
55     id<DataSigner> signer = CreateRSADataSigner(privateKey);
56     NSString *signedString = [signer signString:orderSpec];
57     
58     //將簽名成功字串格式化為訂單字串,請嚴格按照該格式
59     NSString *orderString = nil;
60     if (signedString != nil) {
61         orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
62                        orderSpec, signedString, @"RSA"];
63         
64         
65         [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
66             NSLog(@"使用支付寶的支付結果 %@",resultDic);
67             
68         }];
69         
70     }

AppDelegate.m

 1 - (BOOL)application:(UIApplication *)application
 2             openURL:(NSURL *)url
 3   sourceApplication:(NSString *)sourceApplication
 4          annotation:(id)annotation {
 5     
 6      //跳轉支付寶錢包進行支付,處理支付結果
 7       [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
 8                     NSLog(@"result = %@",resultDic);
 9         }];
10     
11     return YES;
12 }

以上就是支付寶整合流程和可能遇到的問題。