支付寶使用流程和踩坑小記(附Demo)


 

# 支付寶使用整理

支付寶使用整理

官方開發指南

本文記錄了我使用支付寶的一些過程
第一部分是一些我根據官方文檔中摘錄的可用的重要信息
第二部分是整理的 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 等等

解決辦法

  1. 如果是自己寫的文件直接修改內部符號
  2. 如果是三方靜態庫自己看不了實現,就刪除一個吧(歡迎補充更好的方法)

 

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);

小結

  1. 支付寶有些坑,但是如果懂原理,其實是很好解決的。要多學習

最后獻上一個自己集成的小Demo歡迎下載查看
支付寶集成Demo:https://github.com/xiaoyouPrince/AliPayDemo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM