1. 程式人生 > >ios開發——支付寶SDK整合流程

ios開發——支付寶SDK整合流程

1、建立應用

這個其實開發者們都應該懂,就是在支付寶這裡掛個號,然後進行下一步業務的申請。


建立應用介面

開發者只需要按照指示一步一步新增內容就可以。

2、申請移動支付

這個就需要一些公司文件什麼的了,根據指示填寫即可,但是要切記不要讓自己的word超過了大小限制,否則有一定機率不會通過。
簽約成為商家


雖然說,整個流程可能需要將近兩週時間,但是根據我這次整合來看,大約一週多就能完成。但是假如你的開發週期比較緊張,建議早申請,畢竟要控制時間成本。

3、下載官方Demo

這個是比較坑的事情。。。不知道是不是公司原來辦公室網路的問題,總之就是用迅雷無論如何也下載不下來,然後用了chrome

之後就一切順利。

點選以上鍊接之後進入各種Demo的下載頁面,當然,也可以下載用於UI的視覺資源。(PS:Android和iOS的Demo是在一起的

以下兩張圖片為下載的Demo的檔案情況:


Demo內部檔案
Demo內部檔案

因為我是做iOS端的整合,所以自行忽略掉了服務端和Android端的Demo。

4、業務邏輯


功能流程
資料互動

支付寶支付的功能流程相比較微信支付來說簡單的很,如上面兩張圖展示的,我們的App(也就是商戶客戶端)所做的大概只有三個步驟:

  • 生成訂單
  • 呼叫支付寶介面,傳送訂單
  • 返回訂單支付結果並處理

功能層面上講就是著這些,但是支付環節肯定有一個安全性問題,那麼就需要加密以及解密的過程。

目前支付寶採取的是RSA的加密方式,這是一種比較常見的非對稱加密演算法,至於怎麼整合,下面會給大家做個詳細介紹。RSA維基

5、整合


iOS工程內容

1)新增framework和其他檔案

開啟iOS工程,你會看到上面的一堆東西,你需要複製貼上到自己工程裡的有:

  • lipaySDK.framework
  • AlipaySDK.bundle
  • Order.h和Order.m
  • Until資料夾
  • openssl資料夾
  • libcrypto.a和libssl.a

2)新增第三方框架和類庫


來源於網路,侵刪


以及上面的libcrypto.a , libssl.a

此時,假如你啟動工程,很大機率上你會發現報error

的情況。
報錯#include <openssl/opensslconf.h> not find
這是一個神奇的大坑,我Google了好久,也不得其解,然後經網友提醒之後想起來#import ""#import <>的區別。

解決方法:Targets -> Build Settings 下的 Header Search Paths。新增如下目錄 "$(SRCROOT)/專案名稱/檔案的絕對地址"

在整合之前,不要忘了還要寫一個URL Scheme,在Targets -> Info 下最後一個即可找到。


3)整合程式碼

你在新增程式碼的時候會發現下圖所示程式碼


  • partner:可以在支付寶的賬戶中找到
  • seller:就是我們的支付寶賬號
  • privateKey:這個就是我們上面提到的RSA加密中的金鑰

金鑰生成方法在上文中可以看到,就是在上文中的下載的官方文件中openssl資料夾中的生成命令。


網頁截圖

注意:我在生成金鑰的時候,在第三行,誤將其以為是JAVA開發者才會使用,所以沒有在命令列中輸入命令,一直導致無法加密,所以iOS開發者務必將所有命令輸入Vim當中。

生成的檔案一共有兩個rsa_private_key.pemrsa_public_key.pem,第一個就是私鑰,可以用vim開啟,也可以用文字檔案開啟,開啟之後複製到工程中即可,值得注意的是,複製的時候不要有空格等東西。。。

上傳公鑰:

上傳公鑰官方指導,和私鑰一樣,上傳的過程中,切記不要有空格等字元出現。

AppDelegate

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {

 //跳轉支付寶錢包進行支付,處理支付結果
  [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
    }];

return YES;

}

執行回撥

    orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                   orderSpec, signedString, @"RSA"];

    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];

以下是幾個回撥返回的resultDic值:

9000 訂單支付成功 
8000 正在處理中  
4000 訂單支付失敗 
6001 使用者中途取消 
6002 網路連接出錯

對於iOS9進行適配

和其他的第三SDK一樣,對於新的iOS9,支付寶SDK一樣需要下infoPlist進行適配。

<key>NSAppTransportSecurity</key>
   <dict>
           <key>NSExceptionDomains</key>
           <dict>
              <key>alipay.com</key>
          <dict>
<!--Include to allow subdomains--> <key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow insecure HTTP requests-->     <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/>
         <!--Include to specify minimum TLS version-->
         <key>NSTemporaryExceptionMinimumTLSVersion</key>
         <string>TLSv1.1</string>
      </dict>
   </dict>
</dict>

4)易發bug以及總結

我覺得最易發的有:

  • 報錯#include <openssl/opensslconf.h> not find
  • 返回錯誤ALI64和ALI69

第一個上面有提到,第二個可以在支付包官方文件中找到:官方連結
理論上講,最大概率出錯就是在公鑰和金鑰的處理上,認真排查應該就會找到問題。
如果還沒有解決,可以尋找客服來解決問題,剛開始的是智慧機器人客服,如果兩次都無法解決問題,還可以後面申請人工客服,只不過等待時間可能會有點長。



文/Derek_老黃(簡書作者)
原文連結:http://www.jianshu.com/p/0f3bb4c2c473
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。