# 支付寶使用整理
支付寶使用整理
本文記錄了我使用支付寶的一些過程
第一部分是一些我根據官方文檔中摘錄的可用的重要信息
第二部分是整理的 iOS/Android App 接入主要流程 && Demo
第三部分是遇到的幾個坑,比較重要,特別記錄一下
應用創建及使用流程:
1.創建應用
開發者使用支付寶賬號登錄開放平台(需實名認證的支付寶賬號),根據實際需求創建應用(如“支付應用”)。
備注:創建應用時的應用狀態為“開發中”,無法在線上正式調用接口。如您已經了解應用的基本功能,可點擊此處跳過此步驟;
2.填寫應用基礎信息
名稱 && 圖標 將來會作為審核依據,審核規則
3. 配置應用環境
字段名稱 | 字段描述 |
---|---|
應用網關 對應下圖1 |
用於接收支付寶異步通知,例如口碑開店中, 需要配置此網關來接收開發者門店被動通知 |
授權回調地址 對應下圖2 |
第三方授權或用戶信息授權后回調地址。 授權鏈接中配置的redirect_uri的值必須與此值保持一致。 (如:https://www.alipay.com) 注:當填入該地址時,系統會自動進行安全檢測, 詳情請參考安全檢測。 |
RSA(SHA256)密鑰 (對應下圖3) |
開發者要保證接口中使用的私鑰與此處的公鑰匹配, 否則無法調用接口。可參考密鑰的生成與配置,且接口參數sign_type=RSA2。 |
RSA(SHA1)密鑰 (對應下圖4) |
同上,且接口參數sign_type=RSA。 |
UI 頁面參考
簽名與生成密鑰
如何生成與配置密鑰詳見簽名專區。
TIPS:必須填寫“接口加密方式”(加密方式只需填寫一個),才可以提交審核。
4.接入沙箱環境
開發中的應用無法調用線上正式環境的接口,螞蟻提供了沙箱環境幫助開發者進行開發調通工作,沙箱環境自動為開發者分配沙箱應用,不依賴線上環境的應用創建;
點擊“開放平台-開發者中心-沙箱環境”。進入沙箱環境頁面,系統已經自動為你創建一個應用。與線上流程一致,只要配置了沙箱應用的密鑰即可開始開發。
應用安全性開發指南
《開放平台第三方應用安全開發指南》給出常見開發場景下,幫助開發人員完善應用安全性的開發建議,同時也對常見的安全漏洞進行描述,並提供對應的修復方案。
各種官方Demo下載
各種版本Demo體驗與下載 https://docs.open.alipay.com/399/106844/
開發上線指南
上線和使用指南https://docs.open.alipay.com/399/106853/
iOS端接入指南
Android端接入指南
遇到的坑和解決
這部分是集成Demo過程中主要遇到的三個問題解決,下面是我解決的方法,希望能幫到有緣人
- 集成支付寶 報錯 “openssl/asn1.h file not found”
- 集成支付寶 報錯 “library not found for -xxx”
- 集成支付寶 報錯 "duplicate symbol base64encode"
- 集成支付寶 報錯 "No matching function for call to PEM_read_bio_RSAPrivateKey / EVP_encode_Block"
下面分別說一下這四個問題
1.集成支付寶 報錯 “openssl/asn1.h file not found”
這個問題應該是最常見的問題,官方文檔中也說了是查找頭文件路徑問題,解決方案如下:
點擊項目名稱,點擊“Build Settings”選項卡,在搜索框中,以關鍵字“search”搜索,對“Header Search Paths”增加頭文件路徑:$(SRCROOT)/項目名稱。如果頭文件信息已增加,可不必再增加。
這里着重說一下原理
Build Setting 下面 Search 主要分三個類型
- Framework Search Paths
- Header Search Paths
- Library Search Paths
這三個類別在官方文檔里解釋很清楚(如圖)
- Framework Search Paths
在編譯C、Objective-C、c++或objective - c++,以及產品使用的框架的鏈接器時,這是一個目錄列表,其中包含了包含或導入頭文件的編譯器的目錄。路徑是由空格分隔的,因此任何帶有空格的路徑都必須正確引用。
- Header Search Paths
這是在編譯C、Objective-C、c++或objective - c++時,編譯器要搜索的文件夾的路徑列表。路徑是由空格分隔的,因此任何帶有空格的路徑都需要正確引用。
- Library Search Paths
這是一個目錄列表,用於為該產品使用的庫進行鏈接搜索。路徑是由空格分隔的,因此任何帶有空格的路徑都需要正確引用。
小結
懂了原理就變的很清楚了,找不到文件實際上就是我們的路徑沒有配置正確
- 路徑可以根據我們的項目分層自己設置,相應的路徑配置也要配置正確
- 經測試,openssl文件夾,Utils文件夾,和支付寶SDK的文件夾要配置在同一級
- Framework Search Paths 和 Library Search Paths 是編譯器和連接器找庫和頭文件的路徑,配置內容是一致的
- 支付寶SDK的文件夾內部文件可以放一起,Header Search Paths 配置中只需要找到對應文件夾上一級即可
最終配置方式:
2.集成支付寶 報錯 “library not found for -xxx”
這個問題就是上面說的 Library Search Paths 配置問題。
原因就是項目中使用的第三方庫,Xcode找不到對應的靜態庫,根據上面原理配置即可
3.集成支付寶 報錯 "duplicate symbol _xxxxxx"
這個問題是我項目中在集成支付寶的同時也有其他的支付相關庫,仔細看報錯會發現其中有兩個路徑。一個是支付寶下面 libcrypto.a 一個LLPayUtils下的libRsaCrypto.a 兩者在編譯過程中生成了同樣的連接符號 gost_sign.o 導致連接器在連接過程中無法正確連接。
實際上就是兩個庫中都定義了 gost_sign.m 這樣的源文件,文件內部有符號_unpack_cp_signature
和 _gost94_compute_public
等等
解決辦法
- 如果是自己寫的文件直接修改內部符號
- 如果是三方靜態庫自己看不了實現,就刪除一個吧(歡迎補充更好的方法)
4.集成支付寶 報錯 "No matching function for call to PEM_read_bio_RSAPrivateKey / EVP_encode_Block"
這兩個報錯,實際指向一個問題:找不到對應的需要調用的函數。但實際上這里就是正確的源文件。
具體原因是在混編的過程中,一些類型不匹配導致的報錯
解決辦法
第一個改成: PEM_read_bio_RSAPrivateKey(bio_private, NULL, NULL, NULL);
第二個改成: EVP_EncodeBlock(outputBuffer, (unsigned char *)[signature bytes], signatureLength);
小結
- 支付寶有些坑,但是如果懂原理,其實是很好解決的。要多學習
最后獻上一個自己集成的小Demo歡迎下載查看
支付寶集成Demo:https://github.com/xiaoyouPrince/AliPayDemo