Создание продуктов с помощью Stripe API в Django - PullRequest
1 голос
/ 28 мая 2020

Создаю свой первый полноценный сайт и пытаюсь подключить Stripe для оплаты. Их API не кажется очень динамичным c (я, вероятно, читаю неправильно). Пытаюсь интегрировать их страницу оформления заказа .

Я не понимаю, как делать несколько продуктов одновременно. Пытался l oop через мои OrderItems:

def checkout(request):
    customer = request.user.customer
    order = Order.objects.get(customer=customer)
    items = order.orderitem_set.all()
    for item in items:
        stripe.Product.create(
            name = item.name
            description= item.desc
        )
        stripe.Price.create(
            product= product.id,
            unit_amount=int(order.get_cart_total),
            currency='gbp',
        )

Но застрял в том, как объявить идентификатор продукта для Price.create

Также был сбит с толку в этой части их API:

session = stripe.checkout.Session.create(
  payment_method_types=['card'],
  line_items=[{
    'price': '{{PRICE_ID}}',
    'quantity': 1,
  }],
  mode='payment',
  success_url='https://example.com/success?session_id={CHECKOUT_SESSION_ID}',
  cancel_url='https://example.com/cancel',

Я еще ни на чем не размещал свой сайт, так что я могу установить URL-адреса? а откуда берется Checkout_session? Не могу найти какую-либо актуальную информацию по этому поводу, поэтому я извиняюсь за то, что задаю, вероятно, не лучший вопрос, но не знаю, что делать. Спасибо!

1 Ответ

2 голосов
/ 28 мая 2020

С Stripe каждый запрос API возвращает ответ JSON, который затем может быть десериализован в соответствующем ресурсе API. Это означает, что когда вы вызываете Create Product API , вы получаете Product обратно, а когда вы вызываете Create Price API , вы получаете Price обратно.

Большинство ресурсов API, с которыми вы взаимодействуете, будут иметь идентификатор. Итак, для Product это prod_123456, а для Price это price_abcdefg.

В вашем коде вам необходимо сохранить результат создания продукта в переменной, чтобы вы могли ссылаться на него при создании цены.

def checkout(request):
    customer = request.user.customer
    order = Order.objects.get(customer=customer)
    items = order.orderitem_set.all()
    for item in items:
        product = stripe.Product.create(
            name = item.name
            description= item.desc
        )
        price = stripe.Price.create(
            product= product.id,
            unit_amount=int(order.get_cart_total),
            currency='gbp',
        )

Точно так же, когда вы go пытаетесь создать сеанс, вам необходимо убедиться, что вы установили список позиций с правильными ценовыми идентификаторами, которые вы только что создали.

Точно так же в большинстве случаев вы уже заранее создали бы свой каталог продуктов и цен в Stripe. Идея состоит в том, что вы уже знаете, какие продукты и по какой цене продаете, и настраиваете все это в Stripe. Позже ваша собственная модель заказа будет ссылаться на эти цены и идентификаторы продукта, когда вы go и создадите сеанс оформления заказа.

Если вам нужны только одноразовые продукты, то вместо этого вы должны создать их встроенными, когда вы создаете сеанс оформления заказа, используя price_data в качестве параметра .

Наконец, для части URL-адреса это будет URL-адрес вашего веб-сайта, на который вы хотите отправить клиента обратно. после оплаты. Идея состоит в том, что после оплаты на своем веб-сайте вы перенаправляете своего клиента в Checkout прямо на Stripe. Как только они заплатят, Stripe отправит их вам обратно по указанному вами URL-адресу c, чтобы вы могли поблагодарить их за заказ. Это описано в документации , здесь . Точно так же часть {CHECKOUT_SESSION_ID} в URL-адресе - это просто значение magi c, которое Stripe заменит реальным идентификатором сеанса проверки cs_test_1234567, когда они отправят клиента обратно на ваш веб-сайт.

( Если у вас возникнут дополнительные вопросы, вы, вероятно, захотите напрямую поговорить с командой поддержки Stripe )

...