如何变更ECSHOP系统红包序列号规则
2016-07-07 15:16 来源:www.chinab4c.com 作者:ecshop专家
现有系统的线下红包发放是在10000的基础上增加四位随机数字. 因为我要发放大额红包,所以总感觉这样不是很安全, 万一真的有哪个无聊的人,用一天时间来蒙几个红包序列号出来,我就亏大了.. 所以,我想更改一下系统的红包序列号发放规则.在bonus.php中我看到了规则: /* 生成红包序列号 */ $num = $db->getOne("SELECT MAX(bonus_sn) FROM ". $ecs->table('user_bonus')); $num = $num ? floor($num / 10000) : 100000; for ($i = 0, $j = 0; $i < $bonus_sum; $i++) { $bonus_sn = ($num + $i) . str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT); $db->query("INSERT INTO ".$ecs->table('user_bonus')." (bonus_type_id, bonus_sn) VALUES('$bonus_typeid', '$bonus_sn')"); $j++; } 那么,有没有可能把这个规则改的复杂一些呢?例如增加几个字母之类的? 我只在论坛上搜索到了如下关于红包的描述,其他的完全就是空白,希望有能力的人帮忙解决一下,谢谢! |
回答:
这个我想知道哦 |
1 看下数据库 表 user_bonus 对存储的字段类型是什么类型 2 检查程序,是否在验证红包的时候有对数字过滤,如果有过滤,那么这个部分也需要改 并不是简单改生成的序列号就可以了。 如果以上都没问题,那么修改就相对简单了。 $bonus_sn = ($num + $i) . str_pad(mt_rand(0, 9999), 4, '0', STR_PAD_LEFT) 这段里面添加随机字符就可以了 |
验证的时候过不去,因为intval函数超过10位就溢出了 |
ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字。如果当我们要发放大额度红包的时候,这样的序列号规则难免给人不安全的感觉,万一真的有哪个无聊的人,用一天时间来蒙几个红包序列号出来,那就亏大了。因为最多只要试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 .= “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']) : ”; 到这里修改就完成了,后台清除下缓存就可以为红包生成字母加数字的序列号了,现在生成的序列号是由a-z、A-Z以及0-9组成,安全性高的同时,也避免了大批量发放导致的序列号重复问题。 原文可参考: 为ECSHOP系统红包序列号增加字符 |
红包序列 增加 |
嗯,学习了 |
不错,学习了! |
我也来学习中, 高人啊 |
为什么按照你这样需改了红包发放,前台用户登入了添加红包是可以 ,但是直接购买的时候那里验证红包序列号的时候会提示红包不存在,这什么情况? |
为什么按照你这样需改了红包发放,前台用户登入了添加红包是可以 ,但是直接购买的时候那里验证红包序列号的时候会提示红包不存在,这什么情况? 我也遇到这个问题了。。。。郁闷 寻求解决 |
为什么按照你这样需改了红包发放,前台用户登入了添加红包是可以 ,但是直接购买的时候那里验证红包序列号的时候会提示红包不存在,这什么情况? 我也是。。。 |
最近更新
常用插件
- ecshop供应商插件免费下载
ecshop供应商插件免费下载...
- ecshop快递发货单打印商品
ecshop快递发货单打印商品信息,大家都知道ecshop快递单打印的时候,只能...
- ecshop按分类筛选销售排行
ecshop按分类筛选销售排行...
- ecshop二次开发售后维修卡
插件介绍: 本插件是用于专门从事电子,信息,软件等售后服务关键比...
- ecshop选择下单时间插件
ecshop选择下单时间插件主要是根据不同的下单配送要求,在ecshop购物车...
ecshop热门问答
ecshop热门资料
ecshopECMALL银联支付
ecshopactual
ecshopseo
ecshop进销存
ecshop固定价格
ecshoprepair
ecshopposition
ecshophxl
ecshop安装程序幕
ecshop外币
ecshop德国
ecshop初级
ecshop买包包
ecshop没有问题
ecshop经销商
ecshop谷歌
ajaxecshop
ecshop文件大小
ecshop宽度调节
ecshop网上超市
ecshoptest
ecshop通俗易懂
ecshopU尚网
ecshop怪事
ecshop价格上调
ecshopchrome
ecshop答复
ecshopuser
ecshop商品图片
ecshop加密方式