支付寶APP支付開始遇到的一個小坑
支付寶APP支付的第一步是需要由服務端呼叫支付寶介面(類似預建立),獲得一個orderInfo(這個orderInfo包含了訂單資料)返回給客戶端,客戶端呼叫支付寶SDK發起支付時需要這個orderInfo。
那麼,
由官網文件,下載的服務端sdk來發起請求,通過response.getBody()就獲得了orderInfo。
看了下日誌,這個orderInfo帶有一個大概是alipay-sdk的欄位,
問題是客戶端這邊拿到的安卓的呼叫demo,所給的orderInfo示例卻沒有這個欄位,而且呼叫demo發起支付成功。
好吧,沒關係,先測試看看。
(由於測試用的支付金額超過下限->這個是根本原因,但一開始我們還不知道),客戶端發起支付失敗,提示的是“該操作已取消”,根據返回碼也無法在官網找到任何對應的說明,另一邊,後臺預訂單卻得到success的返回,(坑就坑在客戶端sdk沒有顯示金額下限的通知),只是告知操作失效。
由此,結合上面的那個區別。
我們懷疑是orderInfo的alipay-sdk這個欄位多餘了,截掉這個欄位,客戶端再發起支付,這次不會操作失效了,返回40002一看是簽名無效,開始懷疑起簽名問題。。。然後各種找,看到sdk原始碼裡面去了解簽名的具體細節,最後發現並沒有問題(其實我們傻了,生產開發出的SDK怎麼會那麼容易有bug人家都不知道測了幾週期,但缺少友好說明,我們實在難以排查問題)。
後來近乎崩潰,
就用阿里給的簽名工具試試吧,並用安卓那個能成功調起支付的demo裡的orderInfo來改,(它的簽名肯定沒有問題吧哈哈),然後一個個修改引數測試,得到簽名,然後自己拼裝orderInfo給客戶端去調,最後發現只有totalAmount出了事,突然間恍然大悟,阿里的伺服器驗證步驟應該是1. 簽名驗證—2.引數合理化驗證—
所以我們之前帶了alipay-sdk欄位的orderInfo其實已經通過了簽名驗證,只是在金額totalAmount這一步被發現超出下限了,所以客戶端無法成功掉起sdk。
再回去官網一個個連結路徑翻看文件,終於在某個“角落”看到了totalAmount的區間,最低0.01。
行了,這下行了,直接改totalAmount,果然OK。
總結一下,我們到底想說明什麼呢:
1、測試用例的選取問題,我們其實太笨,沒考慮到測試用例的合理性
2、支付寶的返回資訊還是咳咳咳啊,真的,返回msg不夠明白的話我們用的人真的只能踩坑哈哈