ECSHOP
系统线下发放红包时系统生成的红包序列号是在
10000
的基础上增加四
位随机数字。
所以我们需要更改一下系统的红包序列号发放规则,
让红包的序列号是由
a-z
,
A-Z
,
0-9
的字符组合而成,下面给出修改方法:
1
、修改
ecs_user_bonus
表中
bonus_sn
字段的数据类型
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(10);
$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 .=
“abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXY
Z”;
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']) : ”;
5
、修改购物流程中结算部分的红包序列号验证
flow.php
文件
1914
行
左右,找到
if (is_numeric($bonus_sn))
更改为
if (is_string($bonus_sn))
到这里修改就完成了,
后台清除下缓存就可以为红包生成字母加数字的序列号了,
现在
生成的序列号是由
a-z
、
A-Z
以及
0-9
组成,安全性高的同时,也避免了大批量发放导
致的序列号重复问题。
(上述如有不对的地方请大家指正!谢谢大家!
)