一:介紹
最近支付寶,微信,銀聯支付類sdk均做了更新,其中支付寶sdk變化比較大,由原來需要匯入六個檔案:
- AlipaySDK.framework
- AlipaySDK.bundle
- Order.h和Order.m
- Until資料夾
- openssl資料夾
- libcrypto.a和libssl.a
在新版之後只需要匯入兩個檔案就可以解決了,檔案如下:
- AlipaySDK.framework
- AlipaySDK.bundle
下面我在舊版文章的基礎上,為大家詳細介紹最新版本支付寶支付開發流程。
因為工作的需要,我先後總結了iOS支付相關的近五類支付開發文章,分別是支付寶支付、支付寶網頁支付轉客戶端、微信支付、銀聯支付、Apple_pay,做這些總結第一是方便以後的查閱,第二也為大家提供方便, 以免在用到的地方重複踩坑。
注意開始填坑!!!
二:互動流程
建議先把開發文件仔仔細細看一遍,一定要看,剛開始的時候沒有老老實實地看完,結果遇到很多的坑,浪費的挺多的時間的,所以建議一定要好好看看,特別是互動流程這一部分。
2.1 功能流程
流程說明:
- 第4步:呼叫支付介面
- 第5步:支付請求
- 第8步:介面返回支付結果
- 第12步:非同步傳送支付通知
2.2 資料互動
資料互動說明:
- 構造訂單資料並簽名
- 傳送請求資料
- 手機支付寶支付開發包對請求資料進行處理
- 返回處理的結果資料
- 商戶對獲取的返回結果資料進行處理
三:下載支付寶SDK
支付寶業務眾多,真想找到想要的支付sdk還是要費一番功夫的,這裡給出了最新的sdk地址(注意的是下載出來的SDK包裡面並沒有傳說中的開發文件,需要其他地方找或者看網頁上的)。
公鑰、私鑰、PID、sellerID、key這些東西的用途和獲取方式在文件上都有詳細的說明,這裡不再贅述,一定要把概念分清楚再去做,不然一會就亂了。如果遇到問題的話我們們可以再一起探討。
四: 匯入庫整合SDK
4.1 匯入檔案和關鍵庫
官方demo檔案
把iOS包中的壓縮檔案中以下檔案拷貝到專案資料夾下,並匯入到專案工程中:
- AlipaySDK.framework
- AlipaySDK.bundle
在Build Phases選項卡的Link Binary With Libraries中,增加以下依賴:
其中,需要注意的是:- 如果是Xcode 7.0之後的版本,需要新增libc++.tbd、libz.tbd;
- 如果是Xcode 7.0之前的版本,需要新增libc++.dylib、libz.dylib(如下圖)。
此時,假如你啟動工程,很大機率上你會發現報error的情況。 報錯#include <openssl/opensslconf.h> not find 這是一個神奇的大坑,我Google了好久,也不得其解,然後經網友提醒之後想起來#import ""和#import <>的區別。
解決方法:Targets -> Build Settings 下的 Header Search Paths。新增如下目錄 "$(SRCROOT)/專案名稱/檔案的絕對地址" 如圖:
4.2
在需要呼叫AlipaySDK的檔案中,增加標頭檔案引用。
import <AlipaySDK/AlipaySDK.h>
複製程式碼
4.3 呼叫支付介面
在支付寶的接入文件中,是將生成一個訂單這步放在客戶端來做了,但這個最好是 放在伺服器端來做。 後臺生成訂單然後拼接,簽名,然後伺服器端直接給客戶端傳一個加密簽名過的引數就可以了,這樣比較安全。 所有的訂單資訊,商戶資訊等都掌握在自己的手中,這樣的話APP端就不怕被攔截資料,並且呼叫起來也就特別簡單了,只需要呼叫支付的介面。 如果只需要傳送訂單和處理支付返回結果,只需要新增AlipaySDK.bundle和AlipaySDK.framework這兩個就行了,下載的SDK中很容易發現。 快捷支付方法是這個:
-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;
複製程式碼
在支付的按鈕中,使用支付寶這個類,再呼叫這個方法就行啦!如下如:
[[AlipaySDK defaultService] payOrder:credential fromScheme:fromScheme callback:^(NSDictionary* resultDic) {
NSLog(@"%@",resultDic);
}];
複製程式碼
4.4 配置支付寶客戶端返回url處理方法
如示例AliSDKDemo\APAppDelegate.m檔案中,增加引用程式碼:
import <AlipaySDK/AlipaySDK.h>
複製程式碼
在*@*implementation AppDelegate中以下程式碼中的NSLog改為實際業務處理程式碼:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
if ([url.host isEqualToString:@"safepay"]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
// NOTE: 9.0以後使用新API介面
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
//跳轉支付寶錢包進行支付,處理支付結果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
複製程式碼
4.5 專案配置
最後,不要忘了還要寫一個URL Scheme,在Targets -> Info 下最後一個即可找到, 點選“Info”選項卡,在“URL Types”選項中,點選“+”。
到這裡支付寶支付就基本完成了,如果小夥伴們在整合過程中遇到什麼問題,可以留言給我或者新增qq,線上幫你解決。
關注 【網羅開發】微信公眾號,網羅天下方法,方便你我開發,更多iOS技術乾貨等待領取,所有文件會持續更新,歡迎關注一起成長!
希望可以幫助大家,如有問題可加QQ群: 668562416 交流
如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議
如需轉載請聯絡我,經過授權方可轉載,謝謝