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組成,安全性高的同時,也避免了大批量發放導致的序列號重複問題。
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組成,安全性高的同時,也避免了大批量發放導致的序列號重複問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.