應用內購買 IAP 各型別在服務端的驗證規則

2021-07-26 19:17:44 字數 1385 閱讀 1415

一、非消耗品(比如單本雜誌購買,蘋果伺服器支援恢復)

1.先驗證伺服器有沒有購買記錄,如果有,則不處理,此次操作成功 ;

2.如果伺服器沒有購買記錄,則到蘋果伺服器驗證

(1)首先到正式驗證位址驗證收據,如果返回狀態非0,則再向測試驗證位址驗證收據。

(2)如果最後返回的狀態為0,表示是有效購買,則插入,增加許可權,此次操作成功。

(3)否則失敗。

二、消耗品(比如魚食,蘋果伺服器不支援恢復)

1.首先到正式驗證位址驗證收據,如果返回狀態非0,則再向測試驗證位址驗證收據。

2.如果最後返回的狀態為0,表示是有效購買,則插入,增加許可權,此次操作成功。

3.否則失敗。

三、自動續訂的訂閱(產品定義有時長,過期自動續訂,蘋果伺服器支援恢復)

1.購買時:

(1).首先從正式驗證位址驗證收據,如果返回狀態是21007,則再從測試驗證位址驗證收據.

(2).如果蘋果返回狀態為0,則表示訂閱還有效,在蘋果返回json的latest_receipt_info或者receipt結構中(latest_receipt_info優先)取出最新過期時間,插入或者更新過期時間,並賦予對應許可權,此次操作成功。

(3).如果蘋果返回狀態為21006,則表示訂閱過期,但是還有效。在蘋果返回json的latest_expired_receipt_info結構中,取出交易時間(「purchase_date」,過期的訂閱交易記錄中,沒有過期時間字段),[交易時間+訂閱時長]為結束,賦予許可權。    

(4).否則失敗

2.過期驗證時:

(1)當使用者第一次購買訂閱之後,會有乙個最後的過期時間記錄在伺服器,以此計算剩餘時間。如果算出此時剩餘時間等於0了,取出當前使用者最新的一條訂閱記錄(receipt),通過蘋果驗證介面進行驗證。

(2)首先從正式驗證位址驗證收據,如果返回狀態是21007,則再從測試驗證位址驗證收據.

(3)如果蘋果最後返回結果中狀態值為0,表示已經續訂,在latest_receipt_info或者receipt結構中(latest_receipt_info優先),取出最新的過期時間,更新伺服器過期時間,並賦予對應許可權,remainddays用新的過期時間算。

(4)如果返回狀態為21006,表示已經退訂,但是還有效。在蘋果返回json的latest_expired_receipt_info結構中,

取出交易時間(「purchase_date」,過期的訂閱交易記錄中,沒有過期時間字段),以[交易時間+訂閱時長]為過期時間,更新伺服器過期時間。

四、非自動續訂的訂閱(產品定義沒有時長,時長自己控制,可以多次購買,類似於消耗品,蘋果伺服器不支援恢復)

1.驗證過程和消耗品相同

五、免費訂閱(只能在newsstand裡面用,永不過期,蘋果伺服器支援恢復)

1.驗證過程和非消耗品相同

IAP( 應用程式內購買) 完全攻略

轉一篇cocoachina的文章存檔,以備不時之需,未經實踐,僅供參考。參考 在試用了各種可能的解決方桉後,你只能身心疲憊,彷徨無助。廢話少說,我們直入主題吧。概況iap能正常工作的秘訣 分成兩個步驟 建立及提取產品描述 購買產品 第乙個步驟是你可能遇到問題的部分。一旦你在 中成功地獲取了產品描述,...

iOS應用內支付 IAP 的那些坑

猿題庫現在推出了公 行測和申論2個產品,均包括web,ios和android三個平台。這次我們嘗試做乙個收費的產品,所以在ios端整合了應用內支付 iap 功能。在開發過程中和上線後,我們遇到了iap中的一些坑,在此分享給各位。iap 審核相關的坑 iap開發的詳細步驟我寫在另一篇部落格中了。在此主...

IAP內建購買伺服器端

伺服器二次驗證 function getreceiptdata receipt issandbox false else postdata json encode array receipt data receipt ch curl init endpoint curl setopt ch curl...