Добавление пользователя в Django Group с помощью Stripe API Response - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь добавить пользователя в группу после получения успешного ответа на заказ.

У меня есть группа, подобная приведенной ниже:

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 голосов
/ 23 февраля 2019

Я предполагаю, что вы уже используете Stripe webhooks для перехвата ответов API?

Если это так, самый простой способ работы с веб-крючками Stripe - использовать библиотеку интеграции Django для Stripe, такую ​​как пинакс-полоса или полоса .Требуется немного настройки, но оно того стоит.Эти библиотеки предоставляют модели Django, которые предоставляют сопоставления для объектов JSON API Stripe, таких как Customer и Subscription, и содержат строки идентификаторов, которые Stripe отправляет в своих ответах API.Эти модели выступают в качестве посредников, что упрощает связывание ответов JSON Stripe с моделями вашего собственного приложения, такими как Users и Orders (с дополнительным преимуществом, что вы можете иметь все данные о событиях Stripe в базе данных вашего проекта).

Затем вы можете написать представление, которое автоматически обновляет ваши экземпляры модели Django, когда ответ Stripe API попадает на ваш URL-адрес webhook:

# 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)

Возможно, есть более элегантные способы для анализа различных событий, но выполучить общее представление.Я также отмечаю, что ни одна из упомянутых мной библиотек не имеет конкретной модели для ответов Order Stripe.Но, вероятно, вам это не понадобится, если вы можете получить необходимую информацию из Order веб-сайта Stripe для поиска соответствующих заказов и пользователей в вашей базе данных.

...