ECSHOP系統線下發放紅包

ECSHOP系統線下發放紅包時系統生成的紅包序列號是在10000的基礎上增加四位隨機數字。如果當我們要發放大額度紅包的時候,這樣的序列號規則難免給人不安全的感覺,萬一真的有哪個無聊的人,用一天時間來蒙幾個紅包序列號出來,那就虧大了。因爲最多隻要試10000次就可以了,所以我們需要更改一下系統的紅包序列號發放規則,讓紅包的序列號是由a-z,A-Z,0-9的字符組合而成,下面給出修改方法:


1、修改ecs_user_bonus表中bonus_sn字段的數據類型ALTER TABLE `ecs_user_bonus` CHANGE `bonus_sn` `bonus_sn` VARCHAR( 200 ) NOT NULL

ECSHOP 2.7.2中該字段類型爲bigint,我們需要修改爲varchar。

2、修改js/user.js文件中對紅包序列號驗證的部分

在文件的672行左右,找到

    var reg = /^[0-9]{10}$/;

修改爲:

    var reg = /^[0-9a-zA-Z]{10}$/;

3、修改admin/bonus.php  文件中紅包序列號生成規則

在文件的569行左右,註釋掉如下兩行:

    /* 生成紅包序列號 */
    //$num = $db->getOne("SELECT MAX(bonus_sn) FROM ". $ecs->table('user_bonus'));
    //$num = $num ? floor($num / 10000) : 100000;

修改for循環中序列號的生成規則如下:

    for ($i = 0, $j = 0; $i < $bonus_sum; $i++)
    {
                //$bonus_sn = ($num + $i) . str_pad(mt_rand(0, 9999), 4, ’0′, STR_PAD_LEFT);
                $bonus_sn = get_unique_id(20);
                $db->query("INSERT INTO ".$ecs->table('user_bonus')." (bonus_type_id, bonus_sn) VALUES('$bonus_typeid', '$bonus_sn')");
                $j++;
    }

增加生成隨機字符加數字的函數:

function get_unique_id($length=32, $pool="")
{
        if($pool == "") $pool .= "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        mt_srand ((double) microtime() * 1000000);
        $unique_id = "";
        for ($index = 0; $index < $length; $index++) {
        $unique_id .= substr($pool, (mt_rand()%(strlen($pool))), 1);
        }
        return $unique_id;
}

4、修改user.php中添加紅包的驗證部分

在文件的768行 左右:

    /* 添加一個紅包 */
    elseif ($action == ‘act_add_bonus’)
    {
    include_once(ROOT_PATH . ‘includes/lib_transaction.php’);

    //$bouns_sn = isset($_POST['bonus_sn']) ? intval($_POST['bonus_sn']) : ”;
    $bouns_sn = isset($_POST['bonus_sn']) ? trim($_POST['bonus_sn']) : ”;

    if (add_bonus($user_id, $bouns_sn))
    {
    show_message($_LANG['add_bonus_sucess'], $_LANG['back_up_page'], ‘user.php?act=bonus’, ‘info’);
    }
    else
    {
    $err->show($_LANG['back_up_page'], ‘user.php?act=bonus’);
    }
    }

將原來的

    $bouns_sn = isset($_POST['bonus_sn']) ? intval($_POST['bonus_sn']) : ”;

修改爲:

    $bouns_sn = isset($_POST['bonus_sn']) ? trim($_POST['bonus_sn']) : ”;


flow.php

f (is_numeric($bonus_sn)) 改成  if ($bonus_sn)

到這裏修改就完成了,後臺清除下緩存就可以爲紅包生成字母加數字的序列號了,現在生成的序列號是由a-z、A-Z以及0-9組成,安全性高的同時,也避免了大批量發放導致的序列號重複問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章