From: http://www.jianshu.com/p/e95080d8b464
接入支付寶的大致流程如下:
1.向支付寶申請, 與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller)和私鑰(PRivateKey)
(1)生成公鑰和秘鑰的方法 打開終端
生成私鑰pem,執行命令 openssl genrsa -outrsa_private_key.pem 1024

生成公鑰,執行命令 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

//如果服務器端已經生成公私密鑰,那么獲取他們的公私密鑰文件,然后編碼,然后將私鑰發給服務器,然后開始調試。
將RSA私鑰轉換成PKCS8格式,命令執行openssl pkcs8 -topk8 -inform PEM -in
rsa_private_key.pem -outform PEM -nocrypt php服務端語言讀取私鑰不需要PKCS8轉換。
2. 下載支付寶的demo
3. 生成訂單,簽名加密
4.調用支付寶客戶端,由支付寶客戶端跟支付寶安全服務器打交道
5.支付完畢后,支付寶客戶端會自動跳回到原來的應用程序
6.在原來的應用程序中顯示支付結果給用戶看
下面開始正式的接入支付寶,假設你已經獲得了 獲得商戶ID(partner- 一般以2088開頭)和賬號ID(seller)和私鑰(privateKey)
1.先將支付寶demo 中把下圖的文件拷貝到工程中

這個步驟值得注意的是,不要直接拖拽文件拷貝的工程,這樣你的路徑會出錯。
解決方法先拷貝到一個文件夾中,然后在拷貝到工程中。
2. 添加依賴庫,在Build Phases選項卡的Link Binary With Libraries中

值得注意的是
如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib
可能遇到的困難
1.

不要慌張看到這么多錯誤,這是阿里比較坑的地方,原因是缺少
#import<UIKit/UIKit.h> 和 #import<Foundation/Foundation.h> 這兩個頭文件在
支付寶中AliSDKDemo-Prefix.pch 這個文件里添加了頭文件,我們只需要添加上即可。
問題2 找不不這個文件

解決:Build Settings --> Search Paths --> Header Search paths : $(SRCROOT)/支付寶的文件路徑
例如:


問題3

遇到這樣的問題是因為自己粗心而導致,沒有添加下圖的這兩個文件

接下來我們開始生成訂單 (必須按照要求嚴格配置訂單,必須嚴格,必須嚴格,重要的事情說三遍)
//1.添加寫partner/seller/privateKey,簽約后獲得
NSString *partner =@"partner";
NSString*seller =@"seller";
NSString*privateKey =@"privateKey";
2.1.創建訂單Order *order =[[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.subject = @“”; //商品標題
order.body = @“”; //商品描述
order.totalFee = [NSString stringWithFormat:@"0.01"]; //商品價格
order.notifyURL = @""; //回調URL
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
order.showURL = @"m.alipay.com";
//應用注冊scheme,在AlixPayDemo-Info.plist定義URL types
NSString *appScheme = @"alisdkdemo";
//將商品信息拼接成字符串 NSString *orderSpec = [order description]; NSLog(@"orderSpec = %@",orderSpec);
//獲取私鑰并將商戶信息簽名,外部商戶可以根據情況存放私鑰和簽名,只需要遵循RSA簽名規范,并將簽名字符串base64編碼和UrlEncode
idsigner = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=/"%@/"&sign_type=/"%@/"",orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
上面為 生成訂單和 簽名的代碼。
值得注意的是官方推薦,一般生成訂單和簽名,獲得商戶ID(partner- 一般以2088開頭)和賬號ID(seller)和私鑰(privateKey) 都應該放在后臺進行,這樣極大方面的保護了金錢安全。我們只需要負責調用支付寶的回調方法,來處理結果。
配置完成后,我們快點興奮的來檢測一下,誒,好像遇到什么問題了。
我擦嘞,好不容易配置好了,可以測試了,他竟然又出現了錯誤
顯示系統繁忙,請稍后再試(ALI10)
這個問題很好解釋,字面意思就是錯了唄。 解決方法
1. 你配置的秘鑰有問題,由于調用支付寶接口的那個平臺,他的秘鑰可能過期導致,或者是一些其他的協議出現了問題。
2.請聯系客服(不過我沒有試過)
解決了上面的問題我們在來測試下,oh 買噶的。 又遇到了問題,我也是醉了。
交易訂單處理失敗,請稍后再試。(ALI59)
小伙子們不要慌張,這個問題也是我們粗心而導致的,是因為我們生成的訂單有問題。解決方案:
1. 認真核對配置訂單的信息,認真核對,認真核對,認真核對。一定要認真,也許是我們訂單商品名稱錯了,訂單描述錯了,拼接的價錢錯了,要記住他們都是 NSString 類型。
以上就是本次的內容,不的不說的是支付寶太任性了,我也是爬過了都少個坑才總結的經驗。以上的內容也并非我自己解決的,查看了很多技術博客然后自己歸納整編到一起的,我是這方面的菜鳥,我的格言就是——站在巨人的肩膀上編程。謝謝前輩們開創的經驗道路,讓我們后輩繼承。
新聞熱點
疑難解答