【发布时间】:2012-08-25 03:06:37
【问题描述】:
我正在使用 php 制作自己的电子商务网站。我想向我过去的客户提供优惠券代码,而不向可能像野火一样四处传播的每个人发送通用的“10%OFF”。我希望每个代码都是唯一的,但映射到已知的折扣值。
是否有我可以使用的插件/框架/简单功能可以即时评估优惠券代码(字符串),而无需为我的数据库添加所有可能的组合?
【问题讨论】:
标签: php e-commerce coupon
我正在使用 php 制作自己的电子商务网站。我想向我过去的客户提供优惠券代码,而不向可能像野火一样四处传播的每个人发送通用的“10%OFF”。我希望每个代码都是唯一的,但映射到已知的折扣值。
是否有我可以使用的插件/框架/简单功能可以即时评估优惠券代码(字符串),而无需为我的数据库添加所有可能的组合?
【问题讨论】:
标签: php e-commerce coupon
试试Voucherify - 这是一个用于优惠券代码的 API。使用他们的web app,您将能够创建一个代金券活动,即生成数千个映射到相同折扣的唯一代码:
然后您可以使用PHP SDK 将其集成到您的电子商务网站中。兑换优惠券:
$result = $voucherify->redeem("unique-voucher-code", "customer-id");
如果给定代码有效,结果将包括$result->voucher->discount->percent_off 中的指定折扣。
完全披露,我是 Voucherify 的开发者。
【讨论】:
既然是你自己写的,我建议如下。
创建一个新的优惠券类型,在应用优惠券时,它会检查已登录用户的订单历史记录,以确保他们之前已经下过订单。
在您的优惠券表中,添加以下字段 requireSignIn 和 requirePastOrders。创建一张设置了这些字段的优惠券。当客户尝试使用该优惠券时,请进行必要的检查以确保他们已登录并已下订单。如果这些测试失败,则显示相应的错误消息。
【讨论】:
您可以通过某种方式构建优惠券代码,这样您就可以在不检查数据库的情况下确定优惠券的类型(或者您可以将它们存储在一个只包含优惠券类型的表格中(见下文),而您不这样做需要存储所有可能的组合),然后在末尾附加一个唯一编号,可用于检查优惠券之前是否已使用过。例如:
d8h7bb0778719945 -> d8h7bb 是优惠券类型(与此类型的所有其他优惠券相同),0778719945 是唯一编号(所有优惠券不同,无论类型如何) .
检查优惠券类型是否对首先购买的商品有效。如果是,请对照您的优惠券数据库检查0778719945,看看它是否已被认领。
【讨论】:
对于我工作的公司,我们创建了一个“优惠券代码”生成器,它允许我们生成数百万个自我验证代码,而无需将它们加载到数据库中。
代码计算如下:
创建并存储 16 个或更多字符的盐。
循环一个计数器从 0 到代码数 - 1。对于每个计数器:
一个。生成计数器和盐的哈希值,比如md5(counter + salt)
b.生成优惠券代码作为计数器加上哈希值
然后当收到优惠券代码时,我们提取计数器,并对计数器 + salt 进行哈希处理,并将其与代码中找到的哈希值进行比较。如果它们相同,我们就知道代码是有效的。
如果使用代码生成销售,我们会将其使用记录在表格中,因此无法再次使用。
对于印刷媒体,我们使用大写 base-32 值(2-9、A-H、J-N、P-Z)生成优惠券代码。 对于电子邮件和 URL,我们使用了修改后的 base-64 值(请参阅urlsafe_b64encode())
很遗憾,我无法提供实际代码,因为它受保密协议约束。祝你好运!
【讨论】: