Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为python烧瓶生成优惠券_Python 3.x_Encryption_Flask_Stripe Payments - Fatal编程技术网

Python 3.x 为python烧瓶生成优惠券

Python 3.x 为python烧瓶生成优惠券,python-3.x,encryption,flask,stripe-payments,Python 3.x,Encryption,Flask,Stripe Payments,我正在尝试为我的烧瓶应用程序生成优惠券 我需要不容易制作的优惠券,可以用正确的钥匙阅读,并且随着时间的推移是独一无二的 我已经尝试了HashID,比如: from hashids import Hashids hash_id = Hashids(salt='Super salt', min_length=8) hash_id.encrypt(30) # 'voRDznrz' 问题是生成的密钥总是相同的 我还尝试了一个更聪明的解决方案: import itsdangerous signer =

我正在尝试为我的烧瓶应用程序生成优惠券

我需要不容易制作的优惠券,可以用正确的钥匙阅读,并且随着时间的推移是独一无二的

我已经尝试了HashID,比如:

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,这是您的优惠券代码。要将其绑定到订阅(并应用),请执行以下操作:


普通优惠券不是散列键,只是一些类似于30FREE的文本,存储在一个表中,表中有一列指示优惠券是否已被使用(如果优惠券在表中,则优惠券存在)

如果您现在没有使用ORM,我建议使用SQLAlchemyFlask-SLQAlchemy,它们非常容易设置和启动


注意:您可以将优惠券分配给在优惠券表和用户表之间建立关系的部分用户,然后实现只有该组内的用户才能兑换优惠券或类似的逻辑

你没有错,但我发现了一种更好的、可复制的使用Stripe的方法。
subscription = stripe.Subscription.retrieve("Subscription ID")
subscription.coupon = coupon.id
subscription.save()