iOS- 如何集成支付寶

現在不少app內都集成了支付寶功能
 
使用支付寶進行一個完整的支付功能,大致有以下步驟:
1>先與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller)
(這個主要是公司的負責)
 
2>下載相應的公鑰私鑰文件(加密簽名用)
3>下載支付寶SDK(登錄網站:http://club.alipay.com/
 
裏面提供了非常詳細的文檔、如何簽約、如何獲得公鑰私鑰、如何調用支付接口。
 
 
4>生成訂單信息
5>調用支付寶客戶端,由支付寶客戶端跟支付寶安全服務器打交道
6>支付完畢後返回支付結果給商戶客戶端和服務器
 
 
 
SDK裏有集成支付寶功能的一個Demo>  集成支付功能的具體操作方式,可以參考Demo
 
 
當第一次打開Demo時,可能會出現以下問題:
 
 
錯誤原因很簡單,就是項目的部署版本設置太低了,從3.0改爲4.3即可
 
 
 
要想集成支付功能,依賴以下文件夾的庫文件(把這3個添加到你的客戶端中)
 
 
 
調用支付接口可以參考AlixPayDemoViewController的下面方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

 

如何創建訂單 ( 訂單根據自己公司看是什麼樣的)

如何簽名

如何調用支付接口

都在這個方法裏面了

 
複製代碼
 1 //
 2 //選中商品調用支付寶快捷支付
 3 //
 4 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 5 {
 6     /*
 7      *點擊獲取prodcut實例並初始化訂單信息
 8      */
 9     Product *product = [_products objectAtIndex:indexPath.row];
10     
11     /*
12      *商戶的唯一的parnter和seller。
13      *本demo將parnter和seller信息存於(AlixPayDemo-Info.plist)中,外部商戶可以考慮存於服務端或本地其他地方。
14      *簽約後,支付寶會爲每個商戶分配一個唯一的 parnter 和 seller。
15      */
16     //如果partner和seller數據存於其他位置,請改寫下面兩行代碼
17     NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];
18     NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"];
19     
20     //partner和seller獲取失敗,提示
21     if ([partner length] == 0 || [seller length] == 0)
22     {
23         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
24                                                         message:@"缺少partner或者seller。" 
25                                                        delegate:self 
26                                               cancelButtonTitle:@"確定" 
27                                               otherButtonTitles:nil];
28         [alert show];
29         [alert release];
30         return;
31     }
32     
33     /*
34      *生成訂單信息及簽名
35      *由於demo的侷限性,本demo中的公私鑰存放在AlixPayDemo-Info.plist中,外部商戶可以存放在服務端或本地其他地方。
36      */
37     //將商品信息賦予AlixPayOrder的成員變量
38     AlixPayOrder *order = [[AlixPayOrder alloc] init];
39     order.partner = partner;
40     order.seller = seller;
41     order.tradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
42     order.productName = product.subject; //商品標題
43     order.productDescription = product.body; //商品描述
44     order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品價格
45     order.notifyURL =  @"http://www.xxx.com"; //回調URL
46     
47     //應用註冊scheme,在AlixPayDemo-Info.plist定義URL types,用於快捷支付成功後重新喚起商戶應用
48     NSString *appScheme = @"AlixPayDemo"; 
49     
50     //將商品信息拼接成字符串
51     NSString *orderSpec = [order description];
52     NSLog(@"orderSpec = %@",orderSpec);
53     
54     //獲取私鑰並將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規範,並將簽名字符串base64編碼和UrlEncode
55     id<DataSigner> signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"]);
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         AlixPay * alixpay = [AlixPay shared];
66         int ret = [alixpay pay:orderString applicationScheme:appScheme];
67         
68         if (ret == kSPErrorAlipayClientNotInstalled) {
69             UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示" 
70                                                                  message:@"您還沒有安裝支付寶快捷支付,請先安裝。" 
71                                                                 delegate:self 
72                                                        cancelButtonTitle:@"確定" 
73                                                        otherButtonTitles:nil];
74             [alertView setTag:123];
75             [alertView show];
76             [alertView release];
77         }
78         else if (ret == kSPErrorSignError) {
79             NSLog(@"簽名錯誤!");
80         }
81 
82     }
83 
84     [tableView deselectRowAtIndexPath:indexPath animated:YES];
85 }
複製代碼

 

主要集成的關鍵就是下面幾步:

 

複製代碼
//.封裝訂單模型
AlixPayOrder *order = [[AlixPayOrder alloc] init];
// 生成訂單描述
NSString *orderSpec = [order description];

//2.簽名
id<DataSigner> signer = CreateRSADataSigner(@“私鑰key”);
// 傳入訂單描述 進行 簽名
NSString *signedString = [signer signString:orderSpec];


//3.生成訂單字符串
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                         orderSpec, signedString, @"RSA"];

//4.調用支付接口
AlixPay * alixpay = [AlixPay shared];
// appScheme:商戶自己的協議頭
int ret = [alixpay pay:orderString applicationScheme:appScheme];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章