iOS內購實現流程和丟單優化

2021-08-04 04:34:30 字數 810 閱讀 7794

客戶端流程(這裡只做個總結,網上有很多詳細的介紹,這裡就不多講):

1.itc新增商品

2.itc新增沙盒測試賬號

3.新增銀行資訊(這一步一定要有,不然呼叫支付會出現invalid productid情況)

4.啟動支付介面

5.支付成功後,會返回乙個json資料串receipt,把這個receipt用base64加密一下丟給伺服器驗單

6.驗單完成之後客戶端重新整理支付情況(例如增加金幣)

坑:1.只遇到乙個坑,就是沒有新增銀行資訊,然後支付出現invalid productid的返回

優化:防丟單:

ios內購在正常cs模型中,大部分工作都是由客戶端完成,包括支付成功返回的receipt,要重點說一下這個receipt,它是客戶端支付成功後,ios系統返回給客戶端的驗單資訊,是乙份json資料流,其中最長的receipt是通過base64加密過的訂單資訊,可以通過解密檢視receipt訂單資訊的詳細情況。找ios驗單也是通過receipt來的。

1.那麼,這麼重要的receipt放在客戶端是不安全的,很容易丟單。例如,使用者支付完成後,在客戶端還未向伺服器驗單之前斷網了,這個驗單流程就丟掉了。

解決方法也很簡單,在本地儲存乙個receipt棧,每次支付完成都把receipt入棧,驗單完成後出棧。如果檢查到不是空棧,就要取出棧頂乙個receipt找伺服器驗單。由於是先進先出,即時棧內有未驗單的塊,再次呼叫支付入棧的receipt也不會紊亂。

解決方案:在下單之前,先通知自己伺服器準備下單,伺服器儲存這份訂單,在丟單之後,使用者拿著ios支付憑證和這個準備下單表做對比,若果確實是準備支付而且憑證屬實,應該為使用者恢復資料。

iOS內購實現及測試Check List

您是否在itunes connect中註冊了您的iap專案,並將其設為cleared for sale?您是否正確填寫了version cfbundleversion 和build cfbuildnumber 兩個數字?兩者缺一不可。您是否在開啟iap以後重新生成過包含iap許可的provision...

PHP實現蘋果 IOS 內購 IAP

反反覆覆經過多次重寫 內部需要 發現蘋果使用php來驗證蘋果內購資料是否正確並不是一件很難的事情。我把我的一些心得寫出來,以供以後有這方面需求的小夥伴參考,以php語言為例,誰讓php是最好的語言呢!首先要知道蘋果內購分沙箱環境和正式環境,兩者區別就是名字不同,請求是需要攜帶的引數是相同的。最重要的...

iOS內購的訂單對應和補單

內購的關鍵類 1.skpayment skmutablepayment可將自己的引數一對一與蘋果產生的payment對應起來 2.transactionobserver 交易狀態更新時執行此方法,此方法會傳入交易skpaymenttransaction陣列,對陣列進行遍歷,對不同狀態進行對應的操作 ...