國內支付發達,由支付寶引導的支付流程觀念常常會先入為主,導致接入內購時整體觀念錯位。希望藉著對比支付寶和內購流程來讓大家更清晰的瞭解內購流程。
支付寶支付流程:
- 使用者選擇支付
- app呼叫後臺介面生成支付資訊(生成支付寶訂單,並且繫結我們自己的訂單號)
- app使用支付資訊調起支付包sdk
- 支付寶sdk請求支付寶伺服器
- 支付寶伺服器返回支付結果給後臺和app
- app接受到支付寶支付結果,顯示相應頁面
內購流程
- 使用者選擇支付
- app端使用蘋果product類請求支付 (生成蘋果訂單transaction)
- store kit向蘋果伺服器請求
- 蘋果伺服器返回請求結果給app
- app儲存收據,向後臺請求驗證收據
- 後臺返回驗證結果
差異點:
- 支付寶的每個訂單都可以繫結我們自己的訂單號,但是內購中沒有這樣的欄位
- 支付寶支付成功後,支付寶伺服器通知我們的伺服器和app;在內購中,支付成功只通知app
差異點帶來的處理區別
- 我們不能將自己的訂單號與蘋果的訂單號聯絡起來,只能在支付成功後生成我們自己的訂單
- 在app啟動時就需要註冊蘋果支付回撥,以便能接受到不知道什麼時候進行的支付的成功結果
- 儲存支付成功的收據,適當的時候需要檢查一下有沒有未驗收的收據
關於applicationUsername和訂單號
有人會選擇用applicationUsername存放訂單號。 這樣做的問題是支付成功後transaction中的applicationUsername可能為空。 以個人實際經驗看,大概每20單就會出現一次applicationUsername沒有返回的現象。蘋果論壇中關於applicationUsername為空的討論
關於支付失敗
當使用者被引匯出應用更新他們的支付資訊時會出現支付失敗/取消,支付資訊更新、扣款完成後,app會再次收到成功的回撥。蘋果論壇關於支付先失敗後成功的討論
關於漏單
理解錯誤導致漏單列舉:
- app沒有在啟動的時候就註冊支付結果的觀察者,導致以前支付成功的訂單無法處理
- 接受到支付成功的結果,但是因為 1.先有了支付失敗的回撥 2.此次app生命週期中沒有付費行為 app拒絕處理成功的訂單
- 用applicationUsername繫結蘋果訂單系統和我們自己的訂單系統,applicationUsername缺失導致無法處理訂單
概念理解無誤,出現問題可以從流程中的每一步來排查與解決,最怕概念理解錯,這樣就不是理性分析可以解決的事了。
作者水平有限,發現錯誤還請不吝賜教