1. 程式人生 > >充值系列—充值系統資料庫設計(一)

充值系列—充值系統資料庫設計(一)

在我們的遊戲充值模組中,接入了支付寶,蘋果,Paypal, googleplay , mycard, mol, 360,機鋒,91等各種充值渠道。這篇文章(包括接下來的幾篇文章)將對充值系統的需求,資料庫設計,構架,充值流程,安全處理,各種渠道的詳細接入方式等各個方面做出詳細的說明。

充值最基本的需求是,玩家付費購買內建商品後得到相應的商品。首先需要解決三個個問題:

(1)購買渠道
(2)商品的資料庫設計
(3)訂單的資料庫設計
購買渠道

這裡所指的渠道不是充值平臺,而是充值平臺提供實現充值的介面,在實現充值模組之前,我們需要對支付的實現方式有一個大致的瞭解。常見的支付實現有兩種方式:SDK和WEB。如支付寶就提供了兩種方式。
我們遊戲對支付寶的接入,同時實現了這兩種方式:遊戲內建充值使用了SDK接入,官網充值使用了WEB接入方式。 SDK接入需要遊戲伺服器和客戶端通訊,我們使用了android.js。 實現官網充值需要考慮官網伺服器和遊戲伺服器之間的通訊方式。這個需要考慮到RPC的設計。關於購買渠道的具體實現以後會有更詳細的說明。

商品的資料庫設計

不同的商品會對應不同的支付平臺。也就是說,每個平臺都會有自己定義的商品。還有一點需要注意的是,在實現蘋果接入的時候,需要把將要上架的商品在蘋果的商店中登記在冊,這樣就會在蘋果的商品中有一個對應的ID號。本地需要保持這個第三方ID,為了之後支付的時候做資料驗證。每次購買商品,需要接受一個平臺ID,通過這個ID來判斷這個商品屬於哪個平臺。

詳細設計結構:

訂單的資料庫設計

當生成一筆訂單的時候,首先要保證的是訂單號不能重合。我們的做法是,提供一個自增的資料來和其他的隨機字串組合生成一個訂單號:

    /**
     * 生成訂單流水號
     *
     * @return string $orderSn
     */
    public static function createSn()
    {
        $setArr = array(
            'create_time' => $GLOBALS['_DATE']
        );
 
        $insertId = Dao('Order_CreateSn')->insert($setArr);
 
        return date('YmdHis') . mt_rand(1000, 9999) . str_pad(substr($insertId, -5), 5, 0, STR_PAD_LEFT);
    }

在我們遊戲中,通過玩家的聯盟號(user_code)來下單,訂單還需要儲存的資料如下: