我正在尝试为我的烧瓶应用程序生成优惠券。
我需要不容易制作的优惠券,该优惠券可以用适当的密钥读取并且在时间上是唯一的。
我已经尝试使用类似以下的哈希值:
from hashids import Hashids
hash_id = Hashids(salt='Super salt', min_length=8)
hash_id.encrypt(30)
# 'voRDznrz'
问题在于生成的密钥将始终相同。
我也尝试过危险的解决方案:
import itsdangerous
signer = itsdangerous.URLSafeTimedSerializer("Super salt")
coupon = signer.dumps("30 days free!")
signer.load(coupon, max_age=3600*24*30)
# IjMwIGRheXMgZnJlZSEi.Dl1JAQ.u_ilEm7nQ_8XIQt3nbwe31hyyRc
解决方案要好得多,但我需要存储已使用的优惠券以禁止任何重复使用。另外,优惠券非常难看,很难为我们的用户键入。
好的,所以我使用Stripe进行付款,答案在他们的文档中。 在python中使用Stripe,您可以通过以下方式创建优惠券:
stripe.api_key = "Your secret api key"
coupon = stripe.Coupon.create(
duration='repeating',
duration_in_month=2,
percent_off=100,)
这意味着优惠券将为任何订阅免费提供2个月的服务,但是我没有找到如何选择可应用优惠券的特定产品。
创建了优惠券对象后,您只需获取他的ID,这就是您的优惠券代码。要将其绑定到订阅(并应用),请执行以下操作:
subscription = stripe.Subscription.retrieve("Subscription ID")
subscription.coupon = coupon.id
subscription.save()
答案 0 :(得分:0)
通常的优惠券不是哈希键,只是诸如 30FREE 之类的文本,并存储在带有指示是否已使用优惠券的列的表中(如果表中有优惠券,则存在) )。
如果您现在不使用ORM,建议您将 SQLAlchemy 与 Flask-SLQAlchemy 一起使用,它们非常容易设置和启动。
注意:您可以将优惠券分配给在优惠券表和用户表之间建立联系的一部分用户,然后实施只有该组内的用户才能兑换优惠券的逻辑或类似的东西。