1. 程式人生 > >APP STORE 付費驗證(IAP)服務端驗證全過程(三)

APP STORE 付費驗證(IAP)服務端驗證全過程(三)

手遊APP Store付費 服務端驗證流程

蘋果付費服務端驗證

蘋果付費服務端驗證圖解

我把整個過程叫做三方協定,也叫四次握手.

首先,由客戶端APP發出購買請求,這裡要求要向伺服器,蘋果APP STORE同時傳送購買請求.
服務端接收到請求之後,在資料庫log_Purcharse中新增一條記錄,並將新增記錄的ID返回給客戶端.(log_Purcharse表的設計見後文)
蘋果APP STORE接收到請求之後,進行扣費,返回一個付費成功詳細資訊,或者失敗資訊.
以上我們稱之為一次和第二次握手

如果蘋果APP STORE返回付費失敗,則客戶端終止購買流程.
如果蘋果APP STORE返回付費成功,則將第一次服務端返回的ID和蘋果返回的付費詳情字串一同傳送給服務端.
這裡是第三次握手開始.

服務端接收到ID和付費詳情字串,首先到資料庫中檢索ID是否合法(檢驗方法詳見後文),ID不合法則返回給客戶端失敗,客戶端終止購買流程,ID合法則將付費詳情字串傳送給蘋果APP STORE進行驗證.
蘋果APP STORE驗證付費字串之後會返回給服務端一個付費驗證成功碼(0表示成功),或者失敗碼(很多情況,各有其含義).
這裡稱作第四次握手.

服務端檢測蘋果APP STORE返回的成敗資訊,更新表log_Purcharse對應ID下面的數值.
返回給客戶端成功/失敗資訊,成功客戶端增加購買物品,失敗客戶端終止購買流程.
此處算是第三次握手的結束.

附一:log_Purcharse表結構設計與簡單解析:

Id 自增主鍵,自增主鍵是一次握手時客戶端請求時新增的主鍵,也就是將此鍵值返回給客戶端.三次握手的時候也將根據此值來定位購買資訊
UserId 付費使用者ID,用於三次握手時的驗證條件之一
GoodsId 購買物品ID
IAPState 蘋果返回狀態,三次握手的時候將更新此值,以便記錄蘋果的具體返回情況,方便核對,為後期客服服務提供依據.
ServerState DEFAULT ’0′ 是否付費成功,0未驗證,1成功,2不成功
Money 充值錢數
PayTime 付費請求時間,一次握手更新此值
DateTime 付費成功時間,四次握手成功更新此值

附二:檢索ID是否合法的方法:
根據ID,檢索資料庫中對應的欄位,此時需要驗證UserId是否與發出請求的UserId一致,檢測ServerState是否仍處於未驗證狀態,IAPState是否為未返回狀態,如果這幾項都符合驗證,表明付費成功,給客戶端返回成功,增加購買物品.