深度分析ecshop红包功能二次开发和BUG
2011-05-26 23:35 来源:www.chinab4c.com 作者:熊斌
接触了ecshop这么长时间了。也对ecshop二次开发积累了不少经验。ecshop红包的概念,在ecshop中是十分常见的事情。相信使用过ecshop的人都了解红包有些什么功能。红包很简单。在ecshop里面我们可以通过购买的时候,拿到红包编码来抵消部分现金。
常用的ecshop红包就是在注册的时候,通过对ecshop的二次开发,发送注册红包。还有就是在ecshop系统搞活动的时候,对ecshop促销活动发送一些红包。来促进消费。
首先我们知道,ecshop的红包有两类,一类是线下发放的编码,一类是线上发放的编码。一般我们常用的就是线下发送。客户可以将领取的编码放到自己的会员中心,也可以将自己的编码直接在购买的时候,输入编码进行抵消。
这里就遇到ecshop红包的第一个BUG。就是增加在个人中心之后,你可以在登陆状态下选择红包,可以抵消部分现金,但是如果你将被录入到你帐户中的红包编码,再手动在输入框中输入,这个时候就提示该红包存在,理由很简单。直接使用的编码,被控制了不能手动输入。
if (((!empty($bonus) && $bonus['user_id'] == $_SESSION['user_id']) || ($bonus['type_money'] > 0 && empty($bonus['user_id']))) && $bonus['order_id'] <= 0)
我们看该代码, $bonus['user_id'] == $_SESSION['user_id']这个问题造成了非常严重的后果。
其次,我们可以看到,线上发布的红包,没有红包编码,这个让客户用起来,十分的不方便,也没有报表,相当困难,统计起来。
ecshop的BUG还体现在编码重复上,ecshop红包编码的规则十分简陋,这样的算发容易存在重复。
$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++;
}
当你数据库中的红包编码超过了100万之后,你想想看,是否会出现重复的现象。我有个朋友,他发出去了几百万的红包,但是里面有很大部分是重复的。而且ecshop在发送红包的过程中,也没有很好的控制该红包是否存在。就直接将红包编码发送到客户的帐户上去了。会导致100面值的红包结果只能抵消10面值的红包。
在这个过程中,为了让ecshop红包插件使用更广泛,更安全。我们必须对ecshop红包规则进行修改,同时避免重复红包编码的出现。
最近更新
常用插件
- ecshop购物车功能改进[插件
ecshop购物车功能改进[插件套餐]主要是我们最近开发工作和开发项目中。...
- ecshop降价通知登记插件
ecshop降价通知登记插件,主要是为了方便某些客户,对商品价格要求比...
- ecshop通用红包编码
很多时候,为了结合促销,必须扩展一下ecshop的红包功能。ecshop的红包...
- ecshop分类树中统计商品数
最近忙于开发其他项目,在不少朋友不断要求和催促的情况下,做出了该小...
- ecshop红包修改成满多少减
我们在长期使用ecshop的时候,我们可以发现。ecshop的红包是一个非常强...