蘋果內購伺服器驗證之receipt返回多組in_app思考

來源:互聯網
上載者:User

標籤:library   alt   關鍵點   這一   com   tps   style   最新   src   

最近有部分使用者反映,蘋果內購儲值失敗,經過測試總結有幾個關鍵點出現問題

1.app購買成功蘋果沒有返回票據,屬於票據遺漏(取決於蘋果伺服器的響應狀況),只能用戶端進行監聽重新整理等處理

2.app連續購買的過程中,前幾次蘋果沒有返回票據,幾次之後,蘋果返回了一個有效票據,app提交給伺服器進行驗證的過程中in_app出現多組資料的情況,這種情況還是能儲值成功了,只是不能全部到賬

3.app連續購買,有一次正常返回票據,在提交給伺服器的過程中出現意外,但實際服務端已經接受到票據,為使用者成功儲值,但app進行下次儲值帶回票據,再次提交伺服器驗證的時候,in_app中出現了上次已經提交的票據資訊,這種情況伺服器將判斷為已經儲值,導致最後一次儲值失敗

本著刨根問底的精神,查閱各方資料總結如下,蘋果的官方描述(IAP票據驗證)如下:

百度翻譯如下:

它說,票據在一個在JSON檔案,是一個數組包含所有應用程式購買收據基於應用程式購買交易收據資料輸入Base-64,而且有可能返回一個空的數組(空數組居然還是有效)

在應用程式購買收據消耗型產品添加到發票購買時,它是儲存在你的應用程式接收到完成交易。在這一點上,它是下一次收到的更新-例如從收據後,當使用者再購買或如果您的應用程式顯式重新整理收據。

 

原諒我的英文水平低下,看完之後一臉懵逼,下面總結一下我個人的理解,大概意思如下:

對於消耗型產品的購買,在購買完成(蘋果那邊購買完成,不是伺服器購買完成)之後會被添加到票據資訊中,直到你的APP完成交易(APP的主動行為),之後它會在使用者下一次購買的時候對票據進行重新整理,或者APP進行顯示重新整理。

 

看完這個就很好理解上面出現的問題了,也就是說:

驗證票據返回的receipt裡面的in_app欄位,這個欄位包含了所有你未完成交易的票據資訊。也就是在上面說到的APP完成交易之後,這個票據資訊,就會從in_app中消失。

如果APP不完成交易,這個票據資訊就會在in_app中一直保留。(這個情況可能僅限於你的商品類型為消耗型)

 

知道了事件的原委,就很好最佳化解決了,方案有2個

1.對票據返回的in_app資料全部進行處理,沒有儲值的全部進行儲值

2.僅對最新的儲值資訊進行處理(我們採取的方案)

因為採用一方案:

如果使用者僅進行了一次儲值,該儲值未到賬,他不再進行儲值了,那麼會無法導致。

如果他通過客服的途徑已經進行了補充儲值,那麼他在下一次儲值的時候依舊會把之前的產品票據帶回,這時候有可能出現重複儲值的情況

 

特別說明:如果你需要當前票據的唯一號,取in_app中最後一個票據的transaction_id就行

By  Hgq

蘋果內購伺服器驗證之receipt返回多組in_app思考

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.