ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字。如果当我们要发放大额度红包的时候,这样的序列号规则难免给人不安全的感觉,万一真的有哪个无聊的人,用一天时间来蒙几个红包序列号出来,那就亏大了。因为最多只要试10000次就可以了,所以我们需要更改一下系统的红包序列号发放规则,让红包的序列号是由a-z,A-Z,0-9的字符组合而成,下面给出修改方法: 1、修改ecs_user_bonus表中bonus_sn字段的数据类型 ECSHOP 2.7.2中该字段类型为bigint,我们需要修改为varchar。
ALTER TABLE `ecs_user_bonus` CHANGE `bonus_sn` `bonus_sn` VARCHAR( 32 ) NOT NULL DEFAULT ’0′
2、修改js/user.js文件中对红包序列号验证的部分 在文件的672行左右,找到 var reg = /^[0-9]{10}$/; 修改为:
var reg = /^[0-9a-zA-Z]{10,32}$/;
3、修改admin/bonus.php 文件中红包序列号生成规则 在文件的569行左右,注释掉如下两行:
/* 生成红包序列号 */ 修改for循环中序列号的生成规则如下:
for ($i = 0, $j = 0; $i < $bonus_sum; $i++)
$j++; 增加生成随机字符加数字的函数:
function get_unique_id($length=32, $pool=””) 4、修改user.php中添加红包的验证部分 在文件的768行 左右:
/* 添加一个红包 */
//$bouns_sn = isset($_POST['bonus_sn']) ? intval($_POST['bonus_sn']) : ”;
if (add_bonus($user_id, $bouns_sn)) 将原来的 $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组成,安全性高的同时,也避免了大批量发放导致的序列号重复问题。 问题:实际中,应该在添加红包类型的时候指定生成红包的规则,毕竟每次活动的规则可能不同。 (责任编辑:最模板) |