您当前的位置:首页 > CMS常见问题 > ecshop常见问题 >

ecshop红包类型设计原理及红包序列号安全问题

0

ECSHOP红包类型设计原理

ecshop的促销管理当中有一项名为红包类型,顾名思义,这是创建红包与发放红包给商城网站会员的一项重要促进会员下单到订单成交的功能,商城网站管理员可在后台创建红包,所有的红包类型存储在数据库的pre_bonus_type表中,该表的字段信息带注释如下列出:

  • type_id 红包类型自增ID号,用来标识每一个红包类型
  • type_name 红包名称
  • type_money 红包金额,即该红包可以抵销的金额
  • send_type 如何发放此类型红包,0表示按会员发放,1表示按商品发放,2表示按订单金额发放,3表示线下发放的红包
  • min_amount 订单下限(如果红包是按订单金额发放时,这里存储的是订单下限,只要订单金额达到该数值,就会发放红包给会员)
  • max_amount 订单上限
  • send_start_date 红包发放起始日期
  • send_end_date 红包发放结束日期,只有当前时间介于起始日期和截止日期之间时,此类型的红包才可以发放
  • use_start_date 红包使用起始日期
  • use_end_date 红包使用结束日期
  • min_goods_amount 最小订单金额,只有商品总金额达到这个数的订单才能使用这种红包

从以上各个字段信息可以看到,其中有一个名为send_type的字段需要重点解释下,该字段的作用就是用来指明红包是如何操作发放的,如果该字段的值存储为0,那表示该红包是按会员发放的,也就是说可以将该红包发放到某部分会员(商城网站开发管理员通过网站后台搜索这部分会员),如果该字段的值存储为1,那表示该红包按商品发放,也就是说,只要会员购买了设置的相关商品,且购买时间介于红包发放起始日期和截止日期之间时,商城网站程序就会自动地把红包发放到会员的账户上,会员通过我的红包栏目可查看到赠送的红包,如果该字段的值存储为2,那表示该红包按订单金额发放,也就是说,只要会员购买商品的订单总金额大于等于订单下限,会员就可获得该红包,如果该字段的值存储为3,那表示该红包是线下发放,也就是说,商城网站或企业通过组织线下活动,比如举办的展会有快乐大转盘、抽奖箱等等活动,通过类似的抽奖活动将这些红包券赠送给会员,而拿到红包券的会员在商城网站上下订单时便可使用(通过输入红包券里面的兑换码或序列号进行抵销)。

ECSHOP红包序列号的生成规则

通过仔细阅读ecshop商城网站程序的pre_user_bonus会员红包记录表(已经发送的红包信息)中可以看出,该表里面有一个名为bonus_sn的字段,该字段就是保存着线下红包的兑换码(序列号),而这个兑换码的生成规则是100000拼接0至9999之间的伪随机数,伪随机数不足四位数的使用0字符串向左填充,如下图所示的就是pre_user_bonus会员红包记录表保存线下红包的信息:

user_bonus用户红包记录表
可以看到bonus_sn字段保存的值的生成规则

而这样简单的兑换码(序列号)是很容易被暴力破解的,所以,需要进行修改线下红包的兑换码生成格式。

顶部中部底部