iOS IAP內購 VS 支付寶

nullLululi發表於2018-02-02

國內支付發達,由支付寶引導的支付流程觀念常常會先入為主,導致接入內購時整體觀念錯位。希望藉著對比支付寶和內購流程來讓大家更清晰的瞭解內購流程。

支付寶支付流程:

  1. 使用者選擇支付
  2. app呼叫後臺介面生成支付資訊(生成支付寶訂單,並且繫結我們自己的訂單號)
  3. app使用支付資訊調起支付包sdk
  4. 支付寶sdk請求支付寶伺服器
  5. 支付寶伺服器返回支付結果給後臺和app
  6. app接受到支付寶支付結果,顯示相應頁面

內購流程

  1. 使用者選擇支付
  2. app端使用蘋果product類請求支付 (生成蘋果訂單transaction)
  3. store kit向蘋果伺服器請求
  4. 蘋果伺服器返回請求結果給app
  5. app儲存收據,向後臺請求驗證收據
  6. 後臺返回驗證結果

差異點:

  • 支付寶的每個訂單都可以繫結我們自己的訂單號,但是內購中沒有這樣的欄位
  • 支付寶支付成功後,支付寶伺服器通知我們的伺服器和app;在內購中,支付成功只通知app

差異點帶來的處理區別

  • 我們不能將自己的訂單號與蘋果的訂單號聯絡起來,只能在支付成功後生成我們自己的訂單
  • 在app啟動時就需要註冊蘋果支付回撥,以便能接受到不知道什麼時候進行的支付的成功結果
  • 儲存支付成功的收據,適當的時候需要檢查一下有沒有未驗收的收據

關於applicationUsername和訂單號

有人會選擇用applicationUsername存放訂單號。 這樣做的問題是支付成功後transaction中的applicationUsername可能為空。 以個人實際經驗看,大概每20單就會出現一次applicationUsername沒有返回的現象。蘋果論壇中關於applicationUsername為空的討論

關於支付失敗

當使用者被引匯出應用更新他們的支付資訊時會出現支付失敗/取消,支付資訊更新、扣款完成後,app會再次收到成功的回撥。蘋果論壇關於支付先失敗後成功的討論

關於漏單

理解錯誤導致漏單列舉:

  • app沒有在啟動的時候就註冊支付結果的觀察者,導致以前支付成功的訂單無法處理
  • 接受到支付成功的結果,但是因為 1.先有了支付失敗的回撥 2.此次app生命週期中沒有付費行為 app拒絕處理成功的訂單
  • 用applicationUsername繫結蘋果訂單系統和我們自己的訂單系統,applicationUsername缺失導致無法處理訂單

概念理解無誤,出現問題可以從流程中的每一步來排查與解決,最怕概念理解錯,這樣就不是理性分析可以解決的事了。

作者水平有限,發現錯誤還請不吝賜教

相關文章