你是否為蘋果內(nèi)購漏單苦惱過?經(jīng)過網(wǎng)上一些文章描述仍存在一些漏單的問題?
漏單常見原因
- 1.票據(jù)未成功上傳給自己服務(wù)器,(網(wǎng)絡(luò)等原因)就已經(jīng)結(jié)束交易;
- 2.未啟動APP時實(shí)時監(jiān)聽是否有交易未完成,付款后因用戶主動殺死APP時再次啟動未監(jiān)聽到狀態(tài)導(dǎo)致漏單;
- 3.用戶綁定支付寶,銀聯(lián)等其他情況,第一次充值時.蘋果檢測用戶沒錢,狀態(tài)變?yōu)榻灰资?然后去支付寶等頁面綁定,綁定成功后交易重新走交易完成,狀態(tài)變成交易成功,處理交易失敗時你是否刪除了預(yù)訂單并結(jié)束交易.導(dǎo)致服務(wù)端驗(yàn)證的參數(shù)缺少.驗(yàn)證失敗.導(dǎo)致漏單.
我司APP的內(nèi)購處理流程
- 1.點(diǎn)擊充值,發(fā)起預(yù)訂單:用戶點(diǎn)擊立即充值,發(fā)起充值流程,請求自己服務(wù)器,生成預(yù)訂單(為了服務(wù)端驗(yàn)證防止刷單,本地綁定預(yù)訂單處理漏單需要)
- 2.生成的預(yù)訂單給客戶端保存本地.
- 3.調(diào)起內(nèi)購,綁定預(yù)訂單:(存儲模型:產(chǎn)品id,預(yù)訂單,交易狀態(tài),充值狀態(tài),時間戳+產(chǎn)品id)
- 4.用戶輸入完appid后,交易進(jìn)行中狀態(tài)回調(diào)
1).如果交易正在進(jìn)行,需要判斷上一筆訂單是已經(jīng)漏單,如果已經(jīng)漏單,提示用戶正在為您完成上一筆訂單充值,走check流程,發(fā)起自己服務(wù)端驗(yàn)證.如果沒有漏單,提示正在購買中
2).如果交易完成.取本地綁定的預(yù)訂單和交易id和票據(jù)去服務(wù)端驗(yàn)證.驗(yàn)證通過則finishTransaction交易隊(duì)列,更新訂單狀態(tài)(交易成功,充值成功),刷新金額.驗(yàn)證失敗不結(jié)束交易隊(duì)列(充值失敗),均埋點(diǎn)此時訂單狀態(tài)和原因
3),如果交易取消,失敗,拒絕等,結(jié)束交易隊(duì)列(用戶自身原因主動取消等),此時并不刪除本地預(yù)訂單,只是更新訂單狀態(tài). - 5.發(fā)起自己服務(wù)器驗(yàn)證流程.(此時因?yàn)榫W(wǎng)絡(luò),或用戶殺死APP容易漏單.)
1).啟動APP時監(jiān)聽蘋果交易狀態(tài),如果用戶已經(jīng)購買成功,票據(jù)沒有上傳,自己服務(wù)器沒有票據(jù)驗(yàn)證,客戶端不會結(jié)束交易隊(duì)列,此時會重新走服務(wù)驗(yàn)證流程,避免漏單;
2).網(wǎng)絡(luò)狀態(tài)變更,會走check本地訂單狀態(tài)和交易隊(duì)列,如果有漏單會重新發(fā)起驗(yàn)證,避免漏單;
3).進(jìn)入充值頁面,會走check本地訂單狀態(tài)和交易隊(duì)列,如果有漏單會重新發(fā)起驗(yàn)證,避免漏單,并且在此時刪除本地垃圾預(yù)訂單.
4).給自己服務(wù)器發(fā)起驗(yàn)證時,對參數(shù)進(jìn)行保護(hù)(必須有值,這樣防止意外其他不可預(yù)料的漏單情況);
- 我們服務(wù)端與蘋果服務(wù)端驗(yàn)證票據(jù)合法性(防止刷單等情況),服務(wù)端會通過預(yù)訂單號和存儲交易ID,比對.
- 票據(jù)合法后自己服務(wù)端回傳狀態(tài)和金額數(shù)據(jù)
- 客戶端檢測結(jié)果成功,結(jié)束交易,更新金額,埋點(diǎn)數(shù)據(jù). 結(jié)果失敗,如果是已充過的訂單失敗則結(jié)束交易,如果是其他情況則更新并埋點(diǎn)訂單狀態(tài).(埋點(diǎn)監(jiān)聽用戶充值行為流程,回傳交易狀態(tài)和充值狀態(tài))
優(yōu)化上線后效果
目前沒發(fā)現(xiàn)有漏單.