1.內購流程

內購流程
1.APP調用Apple服務器接口創(chuàng)建訂單,發(fā)起購買請求
2.內購的api完成購買,獲取receipt發(fā)送本地服務器,本地服務器拿到receipt向蘋果發(fā)起驗證,并回調結果給APP
以上就是整個購買的過程,大致分為兩個階段:支付階段和驗證階段
2.為什么會丟單原因?
1.不能得到憑證去Apple服務器驗證訂單的正確性(支付階段)
解決:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
這個隊列里面存著所有的已支付,未支付的訂單,而且需要手動移除,而APP每次啟動和每次支付的時候都會去判斷這個隊列里面是否為空,如果不為空的話會調用<SKPaymentTransactionObserver> 代理方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions;
2.APP在上傳憑證給服務器時發(fā)生了網(wǎng)絡或各種原因,造成了憑證的丟失,產生了掉單 (驗證階段)
解決:在支付之前需要通過自己的服務器創(chuàng)建訂單,在交易成功回調之后,立馬將該訂單和本次交易憑證存儲到數(shù)據(jù)庫中。在用戶下次登錄的時候和每次支付結束時候,要首先驗證該數(shù)據(jù)庫中的交易憑證是否都經(jīng)過后臺驗證過并成功給用戶商品,然后將本地保存的憑證移除。
驗證的時機:
- 用戶下次登錄
- 每次支付之后
3.代碼實現(xiàn)
1.設置監(jiān)聽,在APP啟動時候監(jiān)聽內購的訂單情況

設置監(jiān)聽
2.請求商品訂單

請求商品
3.查詢構造的商品訂單

查詢構造的商品訂單
4.購買成功后的回調

購買成功后的回調
5.存儲交易憑證,并且上傳憑證

存儲交易憑證

上傳憑證
6.驗證交易憑證

驗證交易憑證
注:驗證憑證是將獲取的憑證通過接口交給后臺去驗證App是否交易成功。如果發(fā)生弱網(wǎng),APP殺死,或者驗證失敗,憑證會保存在本地,當APP重啟時候會把本地保存的憑證進行二次的驗證。
參考文章:
http://m.itdecent.cn/p/e489c6d25dc3