ECSHOP如何增加红包序列号字符
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}$/;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中添加紅包的驗證部分
在文件的778行 左右:
/* 添加一個紅包 */ 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組成,安全性高的同時,也避免了大批量發放導致的序列號重復問題。
轉載于:https://www.cnblogs.com/chen-lhx/p/4107810.html
總結
以上是生活随笔為你收集整理的ECSHOP如何增加红包序列号字符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: netif_start_queue/ne
- 下一篇: Quartz作业调度框架及时间表达式的含