本文介紹了iOS快速集成支付寶支付的方法,本文中介紹的方法是經過一次封裝,因此配置完成之後調用僅需一行代碼即可支付寶支付,非常的方便,希望大家喜歡。
我只是根據官方的文檔,對支付寶的SDK做了進一步封裝,其中密鑰的生成很簡單,需要看官方的文檔,官方的文檔我在工程附件目錄裡也有一份,如果需要馬上集成,沒工夫研究的話,可以大致看一下密鑰的生成即可,其他的配置我會在下面進行討論。
要在iOS應用裡集成支付寶支付,需要公司和支付寶簽約,然後生成相應的密鑰。密鑰的生成支付寶的開發文檔裡已經說的非常清楚了,這裡就不再討論。
以上是作者原文。
附上作者自己封裝的支付寶支付SDK在git鏈接點擊打開鏈接
將工程中的IntegratedAlipay文件夾導入工程中,記得選copy
點擊項目名稱,點擊“Build Settings”選項卡,在搜索框中,以關鍵字“search” 搜索,對“Header Search Paths”增加頭文件路徑:“$(SRCROOT)/項目名稱/IntegratedAlipay/AlipayFiles”(注意:不包括引號,如果不是放到項目根目錄下,請在項目名稱後面加上相應的目錄名)
然後不包括引號是這樣的如圖(小細節)
導入支付寶依賴的庫
附上一段官方文檔的話:
步驟2:在需要調用AlipaySDK的文件中,增加頭文件引用。
1#import
步驟3:如果你的app基於9.0編譯,那麼為了適配iOS9.0中的App Transport Security(ATS)對http的限制,這裡需要對支付寶的請求地址alipay.com、alipayobjects.com做例外,在app對應的info.list中添加如下配置(文中以XML格式描述)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28NSAppTransportSecurity NSExceptionDomains alipay.com NSIncludesSubdomains NSTemporaryExceptionAllowsInsecureHTTPLoads NSTemporaryExceptionMinimumTLSVersion TLSv1.0 NSTemporaryExceptionRequiresForwardSecrecy
說明:
如果商戶配置了如下的配置:
1 2 3 4NSAppTransportSecurity NSAllowsArbitraryLoads
則上述的NSAppTransportSecurity可以不配置。
對於網絡配置。
接下來
導入SDK 導入庫之後 command + B 編譯一下。 如果沒錯誤最好。 如果有錯誤參照如下可能出現的問題
1.
問題詳情:
(null): URGENT: all bitcode will be dropped because ‘xxxx’ was built without bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. Note: This will be an error in the future.
問題分析:
從上述的錯誤中應該可以看出,這是因為一個第三方的庫不兼容,我的工程中開啟了ENABLE_BITCODE(應該是升級之後自動轉換的),而這個第三方的庫在編譯的時候沒有 enable bitcode,所以導致上訴問題。
解決方法:
應該是有兩種吧,一種就是換成 enable bitcode 的第三方庫,再有一種就是將工程的 ENABLE_BITCODE 設置為 false 就可以了。
因為我這裡不太方便換庫,所以,就把工程的設置給改了一下。
具體操作方法如下:
2.在openssl中他定義的一些東西。不能與你項目中自己定義的宏有同名的
原來我項目中就有STORE 後來我改成了 STORe
如上圖
3. SDK中 Order.m 文件是用MRC內存管理模式寫的。 會有release
所以 不願意手動刪的 可以改成ARC
如圖
(微信支付同理, 不過是有2個文件要改。支付寶是1個)
其他問題待遇到。運行成功
接下來
找到文件
在AlipayHeader.h中修改你需要的內容 例如
kPartnerID、
kSellerAccount、
kNotifyURL、
kAppScheme等。
對於這個scheme是回調時需要的要在APP中設置
如圖
圖中圈內內容 要和頭文件中一樣
只需在需要跳轉支付的地方調用此方法即可
在App delegate中添加回調方法,以下是官方文檔內的描述
步驟5:配置支付寶客戶端返回url處理方法。
(外部存在支付包錢包,支付寶錢包將處理結果通過url返回。)
如示例AliSDKDemo\APAppDelegate.m文件中,增加引用代碼:
1#import
在@implementation AppDelegate中增加如下代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19- (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) { //【由於在跳轉支付寶客戶端支付的過程中,商戶app在後台很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】 NSLog(@"result = %@",resultDic); }]; } if([url.host isEqualToString:@"platformapi"]){//支付寶錢包快登授權返回authCode [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) { //【由於在跳轉支付寶客戶端支付的過程中,商戶app在後台很可能被系統kill了,所以pay接口的callback就會失效,請商戶對standbyCallback返回的回調結果進行處理,就是在這個方法裡面處理跟callback一樣的邏輯】 NSLog(@"result = %@",resultDic); }]; } returnYES; }
好了之後。
在AlipayRequestConfig.m中。可以看到支付寶返回的內容
以下是官方文檔給出的錯誤碼描述
到這裡基本就結束了。
之後如果你的秘鑰錯誤 可能會出現如下問題
用模擬器測試可能提示
用真機測試是這樣的
等申請好秘鑰填好所有信息之後運行一切正常
最後附上支付寶官方文檔鏈接:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.3AADE5&treeId=59&articleId=104352&docType=1