1. 程式人生 > >支付寶支付總結

支付寶支付總結

else rspec 原因 client private nslog oid vat net

  • 現在不少app內都集成了支付寶功能 使用支付寶進行一個完整的支付功能,大致有以下步驟: 1>先與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller) (這個主要是公司的負責) 2>下載相應的公鑰私鑰文件(加密簽名用) 3>下載支付寶SDK(登錄網站:http://club.alipay.com/)
技術分享圖片 裏面提供了非常詳細的文檔、如何簽約、如何獲得公鑰私鑰、如何調用支付接口。 4>生成訂單信息 5>調用支付寶客戶端,由支付寶客戶端跟支付寶安全服務器打交道 6>支付完畢後返回支付結果給商戶客戶端和服務器 SDK裏有集成支付寶功能的一個Demo> 集成支付功能的具體操作方式,可以參考Demo 技術分享圖片
當第一次打開Demo時,可能會出現以下問題: 技術分享圖片 錯誤原因很簡單,就是項目的部署版本設置太低了,從3.0改為4.3即可 技術分享圖片 ?6?1要想集成支付功能,依賴以下文件夾的庫文件(把這3個添加到你的客戶端中) 技術分享圖片 調用支付接口可以參考AlixPayDemoViewController的下面方法 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 如何創建訂單 ( 訂單根據自己公司看是什麽樣的) 如何簽名 如何調用支付接口 都在這個方法裏面了 view source print ? 01. // 02. //選中商品調用支付寶快捷支付 03. // 04. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 05. { 06. /* 07. *點擊獲取prodcut實例並初始化訂單信息 08. */ 09. 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. } 主要集成的關鍵就是下面幾步: view source print ? 01. //.封裝訂單模型 02. AlixPayOrder *order = [[AlixPayOrder alloc] init]; 03. // 生成訂單描述 04. NSString *orderSpec = [order description]; 05. 06. //2.簽名 07. id<DataSigner> signer = CreateRSADataSigner(@“私鑰key”); 08. // 傳入訂單描述 進行 簽名 09. NSString *signedString = [signer signString:orderSpec]; 10. 11. 12. //3.生成訂單字符串 13. NSString *orderString = [NSString stringWithFormat:@‘%@&sign=‘%@‘&sign_type=‘%@‘‘, 14. orderSpec, signedString, @‘RSA‘]; 15. 16. //4.調用支付接口 17. AlixPay * alixpay = [AlixPay shared]; 18. // appScheme:商戶自己的協議頭 19. int ret = [alixpay pay:orderString applicationScheme:appScheme];                                                           清澈Saup

支付寶支付總結