iOS 支付寶

1,登陸螞蟻金服開發者平臺,申請帳號填寫資料,登錄併成爲(我的應用)商家,【注意】的一點是:支付寶app支付功能,爲了確保應用的合規性合法性,須要審覈應用,審覈是指應用的下載地址(已上架)或者demo的下載地址(未上架),都沒有怎麼辦?可使用word文檔寫一份應用介紹,須要有三項文字注意和若干張圖,三項文字分別是:1,app名稱,用途,用戶羣體;2,所售產品價格區間;3,接口使用場景(付款頁面截圖3-5張),若干張圖分別是:應用首頁,商品列表,商品詳細頁,購買頁面,支付頁面,填寫完後提交,1個工做日內應用能夠被審批下來,審批下來後此帳戶下的這個app就算簽約了支付功能html

2,完善app基本信息,提交審覈,在app完善界面須要上傳app的320x320圖標,以及設置接口加密方式,這個很是重要,須要生成RSA進行數字簽名(數字簽名是什麼?),生成方法:這裏只介紹Mac系統下的兩種,一種是經過openssl生成(戳我進入OpenSSL),另外一種是使用支付寶小應用(戳我進入小應用),生成後會有【商戶應用私鑰】和【商戶應用公鑰】,在app基本信息界面提交應用公鑰,提交應用信息,進行審覈java

3,開始集成sdk,官方文檔的集成步驟又問題,2017/4/13號以前,最簡集成步驟以下:git

  1⃣️,下載SDK,把iOS包中的壓縮文件中的AlipaySDK.bundle,AlipaySDK.framework倒入到工程web

  2⃣️,添加依賴庫,如圖:安全

  3⃣️,以上爲環信官方給的集成步驟,可是卻少了不少東西,此時正確的方式是,繼續添加,以下圖,DEMO裏全部文件都拖過來,除了【APAppDelegate】【APViewController】【APwebviewcontroller】【base】【images。xcassets】【main】【en】這幾個工程的配置文件,以及上一個頁面的兩個文件:以下圖: 重申,只有把這些所有拉進來,你的工程才能經過正常編譯,不然盡是爆紅!app

 

4⃣️,打開DEMO的appdelegate.m,複製demo裏僅有的幾個方法,添加進本身工程。測試

5⃣️,打開DEMO的APViewController.m,複製- (void)doAlipayPay方法,這個是支付方法須要在裏面修改三項,第一是appId,填寫支付寶分派給你應用的appID,加密

第二處是appScheme,此處填寫一個不會和別人重複的字符串,具體做用接下來會解釋,另外一處是修改PrivateKey,是你剛纔申請的應用私鑰,【此處放私鑰是爲了最簡單的集成,真實App裏,privateKey等數據嚴禁放在客戶端,加簽過程務必要放在服務端完成;防止商戶私密數據泄露,形成沒必要要的資金損失,及面臨各類安全風險】-----解決辦法下面詳談url

6⃣️開始測試,運行程序,其中筆者遇到的兩個問題,spa

  第一處錯誤:運行程序點擊支付按鈕後無反應,看了一下控制檯,打印信息爲:private key is NULL,根據一步步的排查錯誤,發現是在密鑰對商品信息加簽的時候致使的異常,兩種解決方法

  :
    (1)在RSADataSigner.m文件中 搜索代碼 [result appendString:@"-----BEGIN PRIVATE KEY-----\n"]; 將其改爲 [result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];
    (2)在RSADataSigner.m文件中 搜索代碼 [result appendString:@"\n-----END PRIVATE KEY-----"]; 將其改爲 [result appendString:@"\n-----END RSA PRIVATE KEY-----"];

  另外一處錯誤:<openssl/asn1.h'> file not found ,首先,先排查是否有pch文件未被拉入prefix header,若是未操做,點擊工程,bulid seeting 搜索prefix header ,點擊成可更改狀態,拖住左面文件拉進框內,顯示路徑便可,           若加入pch路徑後仍然不可行,則點擊工程,bulid seeting 搜索header search paths,點進去,輸入$(SRCROOT)/你工程的名字/ 便可修改此錯誤

7⃣️,點擊工程,進入info,打開URL type,添加你剛纔添加的URLschems,此處解釋一下,這個字符串幹什麼用的,是用於調起別的應用的時候你應用的標識,若是你手機有兩個具備支付功能的應用同時用的一個schem,那麼當你調起支付並返回應用的時候有可能會回到另外一個應用,也就是說,當你從你的app跳到支付寶以後,在返回,依據的是這個Scheme,因此儘可能不要和別人重複

8⃣️,此時工程應該能夠正常支付了,固然訂單的各類信息(名稱,金額等)都還要進行處理,不過此處若是支付成功,就要開始和後臺進行對接,剛纔上文也講了,上文中的商品的加簽的過程是【客戶端用私鑰對商品信息加簽】,而真正的app在商品加簽這一步必定要有後臺來作,私鑰毫不要放在客戶端

9⃣️把第二步生成的【私鑰】【appdi】【支付寶公鑰】,發(郵件,qq,甚至手寫)給後臺,【支付寶公鑰】在你的應用裏,應用信息頁面下

 

🔟,開始和後臺對接,正式由後臺加簽,請注意下圖,其中103行是【建立私鑰】105-109行是【使用本地私鑰對訂單信息進行加簽】,117行是【訂單信息拼接】,121行是【攜帶urlschem 和 拼湊後的訂單信息進行支付請求】

 

然而我下面要說的是,這些代碼你都不用敲!(若是公司有後臺),由於這些代碼都是後臺須要作的,咱們須要作的只有121行-123行。你們應該能夠看出來orderString這個參數是什麼了,沒錯,它是【加簽後的商品信息和公共信息】,而它由於安全緣由,儘可能讓後臺生成傳給你,這樣的話整個支付寶的支付流程爲:1,你向後臺傳遞商品信息(好比價格,數量,帳號);2,後臺對收到的商品信息進行加簽並返回;3,調用121行-123行進行支付;4,在appdelegate裏支付成功/失敗的回調方法裏對客戶進行提示(也可讓後臺設置加簽參數的時候添加notif_url,那樣後臺能夠收到支付成功信息,再傳給客戶端確保消息來源是真實可靠的)

上文中的繁多代碼只是爲了捋清頭緒,並不建議使用客戶端進行加簽, 若是文章對你有幫助請給我點一個贊🙏,若是有任何不清楚的問題歡迎私信或者評論,看到即回覆

相關文章
相關標籤/搜索