1.內(nèi)購流程
1.APP調(diào)用Apple服務(wù)器接口創(chuàng)建訂單殖演,發(fā)起購買請求
2.內(nèi)購的api完成購買,獲取receipt發(fā)送本地服務(wù)器舅踪,本地服務(wù)器拿到receipt向蘋果發(fā)起驗證辩恼,并回調(diào)結(jié)果給APP
以上就是整個購買的過程,大致分為兩個階段:支付階段和驗證階段
2.為什么會丟單原因完沪?
1.不能得到憑證去Apple服務(wù)器驗證訂單的正確性(支付階段)
解決:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
這個隊列里面存著所有的已支付然走,未支付的訂單疆前,而且需要手動移除认境,而APP每次啟動和每次支付的時候都會去判斷這個隊列里面是否為空,如果不為空的話會調(diào)用<SKPaymentTransactionObserver> 代理方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions;
2.APP在上傳憑證給服務(wù)器時發(fā)生了網(wǎng)絡(luò)或各種原因课竣,造成了憑證的丟失嘉赎,產(chǎn)生了掉單 (驗證階段)
解決:在支付之前需要通過自己的服務(wù)器創(chuàng)建訂單,在交易成功回調(diào)之后于樟,立馬將該訂單和本次交易憑證存儲到數(shù)據(jù)庫中公条。在用戶下次登錄的時候和每次支付結(jié)束時候,要首先驗證該數(shù)據(jù)庫中的交易憑證是否都經(jīng)過后臺驗證過并成功給用戶商品迂曲,然后將本地保存的憑證移除靶橱。
驗證的時機:
- 用戶下次登錄
- 每次支付之后
3.代碼實現(xiàn)
1.設(shè)置監(jiān)聽,在APP啟動時候監(jiān)聽內(nèi)購的訂單情況
2.請求商品訂單
3.查詢構(gòu)造的商品訂單
4.購買成功后的回調(diào)
5.存儲交易憑證,并且上傳憑證
6.驗證交易憑證
注:驗證憑證是將獲取的憑證通過接口交給后臺去驗證App是否交易成功关霸。如果發(fā)生弱網(wǎng)传黄,APP殺死,或者驗證失敗队寇,憑證會保存在本地膘掰,當(dāng)APP重啟時候會把本地保存的憑證進(jìn)行二次的驗證。
參考文章:
http://www.reibang.com/p/e489c6d25dc3