http://blog.chukong-inc.com/index.php/2012/04/28/server_verify_iap_payment/
手游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是否為未返回狀態,如果這幾項都符合驗證,表明付費成功,給客戶端返回成功,增加購買物品.