通过Stripe API响应将用户添加到Django组

时间:2019-02-22 01:26:45

标签: python django django-models stripe-payments

返回成功的Order响应后,我试图将用户添加到组中。

我有一个类似下面的小组:

act_group = Group.objects.create(name='ACT Group')

很可能会有多个产品,但是对于这个特定的组,我们仅在其订单包含名为ACT Course的商品时将用户添加到该组中。

我还没有写出购买后的样子,但是我知道我将使用Django-Oscar 1.6处理订单,因此用户将拥有某种类型的订单历史记录,例如下面的

class oscar.apps.order.processing.EventHandler({ User })

handle_shipping_event()

我正在寻找一种最好的方式来使订购信号使用他们当前登录时使用的用户名将特定用户添加到ACT Group中(用户将需要创建一个帐户,因为他们需要以便访问数字资料。

1 个答案:

答案 0 :(得分:0)

我假设您已经在使用Stripe的webhooks来捕获API响应?

如果是这样,使用Stripe的webhooks的最简单方法是使用Django集成库来存储Stripe,例如pinax-stripedjstripe。这需要一些设置,但值得。这些库为您提供了Django模型,这些模型提供了Stripe的API JSON对象(例如CustomerSubscription)的映射,并且包括Stripe在其API响应中发送的ID字符串。这些模型充当中介,使直接将Stripe的JSON响应与您自己的应用程序模型(例如UsersOrders)链接起来(附加的好处是您可以在项目数据库中拥有所有Stripe的事件数据) )。

然后,您可以编写一个视图,当Stripe API响应击中您的Webhook URL时,该视图将自动更新Django模型实例:

# urls.py
...
path('webhooks/', myviews.webhooks, name='webhooks'),

# views.py
import json
from django.conf import settings
from pinax.stripe import Customer

def webhooks(request):
    import stripe
    stripe.api_key = settings.STRIPE_SECRET_KEY
    event_json = json.loads(request.body.decode())
    if event_json['type'] == 'order.created':
        ...
        # parse the JSON to get the customer's Stripe ID, 
        # and check if it has the relevant order item, then...
        Customer.objects.get(stripe_id='12345678')
        user = Customer.user  # Django user model
        user.groups.add(act_group)

可能有更优雅的方式来解析不同的事件,但是您可以理解。我还注意到,我提到的两个库都没有针对Stripe的Order响应的特定模型。但是,只要您可以从Stripe的Order网络挂钩中获取所需的信息以在数据库中查找相关的订单和用户,就可能不需要它。