黃阿翔
黃阿翔
Jul 22, 2017 · 6 min read

支付寶支付SDK集成 Swift3 版

此篇將卡了一天支付寶支付寫成筆記記錄,開一個專案重頭到尾實作最簡單的發送訂單流程,由於之前公司專案使用舊的參數請求一直失敗,且網路上各種參數版本搞的我不要不要的,這次記錄以最新的官方SDK(Objective-C版本)改成swift 來實作,而請求訂單參數官方demo加簽做在本機僅展示用,假如日後需要在sever加簽,導入官方sdk就不會這麼麻煩了,第一次菜鳥發文,有問題歡迎反應~。

Note: 在觀看以下資料時必須先到官網或是其他教學了解一下支付寶支付過程流程~

  1. 開啟新專案並加入 ”官方的SDK” 與 ”加密所需文件” (再次提醒,正常情況加密所需文件不用import , 是你們公司server 將你傳的參數靠後台加密後才給你的,假如你們後台不做加密而想再app裡面做…就參考這篇文章吧…官方一再強調別再app裡面加密)
將上面官方紅框拖入專案(左一為SDK,右邊兩張是加密所需文件)

2.拉近去新專案好之後長這樣

上圖AlipaySDK資料夾是自己建的,平常就依照個人習慣來整理,系統自動幫生成了Bridging-Header , 將 sdk import進來才能使用 ,官方demo 已經寫好了一個order類別來整理需要請求的參數與方法,當然我就直接轉來用啦…喜歡的人可以自己寫一個 swift類別來玩玩.. 而#import “RSADataSigner.h” 是加密需要用到的類別。

3.加入支付寶sdk所依賴的庫 (主要學官方demo 他拉哪些我就拉哪些~)

4.此時按下command + B 會出現一連串的錯誤

Error1
Error2
Error3

接下來將報錯的地方加入

#import <UIKit/UIKit.h>

#import <Foundation/Foundation.h>

官方demo沒有出現這些基本類型的錯誤是因為在pch檔裡面加入了,如下~

自己個別加入之後的圖片~

Error 1 fix
Error 2 fix
Error 3 fix

5. 在run過一次之後 剩最後一個錯誤~

Error 4

解決辦法 在 Bulid Settings 找到 Header Seach Paths 添加支付sdk所在的資料夾的路徑,(這裡網路上教學是都用手打,我是直接拖曳文件夾進來,避免手打出錯)

此時run過之後所有error就消失拉 !!!

Error 4 fix

要是一開始支付寶sdk不是照我上面範例拖曳,而是先整理成一個資料夾整個拖曳的話 → 就變成拖曳該資料夾 ex:

另一種範例Header Seach Paths 添加範例

6.設定appScheme

這邊設定主要作用讓app 跳出到支付寶app支付時還可以跳轉回來辨識的字串,若沒有設定,跳轉到支付寶後是無法跳回app…就無從判斷支付結果囉…接下來call支付寶sdk送出時需要兩個參數,一個是準備請求商品拼接後的字串,另一個就是以上設定的appScheme 字串~(以我的例子是用alipaydemo) ,這邊有遇到一個坑,請避免使用 “alipay” 當 appScheme ,因為我用了不給我跳轉…我也不知道為何

7.接下來模擬一顆按鈕送單,將官方demo 的 function 轉成swift ~

doAlipayPay funciton Objective-C

這邊也是遇到一個坑,官方demo轉swift 後 送出狂失敗,(當你跳轉遇到伺服器忙碌,aliooxx啥麼的,基本上就是參數或加密有問題啦…),結果官方demo裡面 order類別寫著非必填項目…..現在改成必填拉

若你們家後台還沒寫好接入api , 卻想先測試,可以先隨便亂填,例如我上面範例就是www.xxxxxxxxx.com 亂填的,總之該屬性不能空白~

至於還有一些可以客製化的參數,可以去參考官方網頁文件,以上只是照著demo請求的參數而已~

8. 在appdelegate 寫上支付寶跳轉回來後的相關代碼~

9.成功後實機要是有裝支付寶 就會顯示成功拉!!

成功跳出購買

10. 未完善項目,之後有更新的話在補上~

(1)要是沒安裝支付寶,就跳網頁支付

(2)判斷各種回傳的result code

11. 最後,不管加密在後台還是前台,最後還是要寫與後端穿接的api,例如定單號的產生、double check支付寶異步通知公司server時資料的一致性等等..此範例僅以成功串接付款為目標~!

Sample code