AppStore充值至關(guān)重要寇钉,開(kāi)發(fā)流程別人總結(jié)很多晶府,比如這篇iOS Apple內(nèi)購(gòu)及掉單問(wèn)題,我就不多說(shuō)了箱歧,就總結(jié)一下我們AppStore充值設(shè)計(jì)流程:
作為補(bǔ)單的主要依據(jù)信息惨篱,以數(shù)組形式筒饰,數(shù)組的每個(gè)item為一個(gè)鍵值串的方式,存入到本地Keychains中。
表1.1補(bǔ)單依據(jù)表
token(身份串) | uid(賬號(hào)唯一ID) | item(商品ID) | itemnum(商品數(shù)量) | appsid(服務(wù)器ID) | vtime(當(dāng)前時(shí)間戳) | country(國(guó)家碼) | ext(角色I(xiàn)D) | transactionId(蘋果返回訂單號(hào)) | receipt(蘋果返回收據(jù)信息) | finishTransaction (是否已結(jié)單) |
---|---|---|---|---|---|---|---|---|---|---|
空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 |
表1.2
token(身份串) | uid(賬號(hào)唯一ID) | item(商品ID) | itemnum(商品數(shù)量) | appsid(服務(wù)器ID) | vtime(當(dāng)前時(shí)間戳) | country(國(guó)家碼) | ext(角色I(xiàn)D) | transactionId(蘋果返回訂單號(hào)) | receipt(蘋果返回收據(jù)信息) | finishTransaction (是否已結(jié)單) |
---|---|---|---|---|---|---|---|---|---|---|
存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 空 | 存入 | 空 | 空 | 空 |
表1.3
token(身份串) | uid(賬號(hào)唯一ID) | item(商品ID) | itemnum(商品數(shù)量) | appsid(服務(wù)器ID) | vtime(當(dāng)前時(shí)間戳) | country(國(guó)家碼) | ext(角色I(xiàn)D) | transactionId(蘋果返回訂單號(hào)) | receipt(蘋果返回收據(jù)信息) | finishTransaction (是否已結(jié)單) |
---|---|---|---|---|---|---|---|---|---|---|
存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 空 | 空 | 空 |
表1.4
token(身份串) | uid(賬號(hào)唯一ID) | item(商品ID) | itemnum(商品數(shù)量) | appsid(服務(wù)器ID) | vtime(當(dāng)前時(shí)間戳) | country(國(guó)家碼) | ext(角色I(xiàn)D) | transactionId(蘋果返回訂單號(hào)) | receipt(蘋果返回收據(jù)信息) | finishTransaction (是否已結(jié)單) |
---|---|---|---|---|---|---|---|---|---|---|
存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 空 |
表1.5
token(身份串) | uid(賬號(hào)唯一ID) | item(商品ID) | itemnum(商品數(shù)量) | appsid(服務(wù)器ID) | vtime(當(dāng)前時(shí)間戳) | country(國(guó)家碼) | ext(角色I(xiàn)D) | transactionId(蘋果返回訂單號(hào)) | receipt(蘋果返回收據(jù)信息) | finishTransaction (是否已結(jié)單) |
---|---|---|---|---|---|---|---|---|---|---|
存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 | 存入 |
表2.訂單發(fā)貨失敗次數(shù)匯總表
訂單號(hào) | 失敗次數(shù) |
---|---|
1232321321 | 1 |
1232321321 | 3 |
說(shuō)明:作為訂單是否關(guān)單的依據(jù)表羹呵,以鍵值傳形式存入本地keychain中骂际,鍵為訂單號(hào),值為失敗次數(shù)冈欢,某筆訂單號(hào)如果結(jié)單則從表中刪除對(duì)應(yīng)的鍵歉铝,否則根據(jù)鍵找到對(duì)應(yīng)的值并失敗次數(shù)+1,最多為3凑耻。
【程序BUG方面】
針對(duì)充值失敗的判斷處理太示;具體情況:玩家支付成功,蘋果未及反饋充值成功之前香浩,網(wǎng)絡(luò)突然中斷类缤,蘋果客戶端會(huì)通知失敗的消息,因?yàn)榇耸∠](méi)有明細(xì)弃衍,SDK客戶端認(rèn)為玩家放棄充值呀非,從而刪除本地的訂單信息,網(wǎng)絡(luò)恢復(fù)后,蘋果送達(dá)成功支付的訂單信息岸裙,此時(shí)客戶端找不到本地的相關(guān)訂單信息猖败,給服務(wù)端發(fā)送的訂單信息不完整,導(dǎo)致了掉單降允。
現(xiàn)在的解決方案:
本地記錄玩家最后一次充值的記錄恩闻,如果出現(xiàn)上述異常,把蘋果充值成功的訂單信息和最后一次充值的記錄合并后發(fā)給服務(wù)端剧董,通知服務(wù)端發(fā)貨幢尚。
在任何情況下(即使本地沒(méi)有找到對(duì)應(yīng)的訂單信息),蘋果發(fā)給客戶端充值成功的信息翅楼, 都要通知給服務(wù)端尉剩;這樣即使掉單,也可以人工補(bǔ)單毅臊。
【可能的風(fēng)險(xiǎn)預(yù)防】
充值過(guò)程中理茎,如果蘋果返回的成功信息缺少“訂單信息”,需要重新跟蘋果獲取訂單信息管嬉,嘗試3次都失敗的情況下皂林,才可以關(guān)閉訂單。這樣處理既可以減少掉單蚯撩,也能夠避免當(dāng)前充值檔位被死鎖的情況發(fā)生础倍。
【異常收集】
采集充值過(guò)程中出現(xiàn)的所有異常,為后續(xù)版本持續(xù)優(yōu)化提供參考依據(jù)