Вернуть Stripe Session.id из Django просмотра - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь внедрить Stripe Payment API на свой django сайт. Из моей корзины. html страница У меня есть кнопка, которая переходит в мой checkoutView и создает продукты и цены из корзины:

def checkout(request):
    customer = request.user.customer
    order = Order.objects.get(customer=customer)
    items = order.orderitem_set.all()
    prices =[]
    for item in items:
        product =stripe.Product.create(
            name = item.product.name,
            description= item.product.description
        )
        price = stripe.Price.create(
            product= product.id,
            unit_amount=int(item.product.price.amount)*100,
            currency='gbp',
        )
        prices.append(price.id)

    line_items=[]
    for item, price in zip(items,prices):
            line_items.append({'price':price,'quantity':item.quantity}),
    session = stripe.checkout.Session.create(
    payment_method_types=['card'],
    line_items=line_items,

    mode='payment',
    success_url='http://127.0.0.1:8000/SUCCESS/?session_id={CHECKOUT_SESSION_ID}',
    cancel_url='http://127.0.0.1:8000/'
    )

Затем мне нужно перенаправить на страницу проверки Stripes Документы здесь. Я хотел бы вызвать это с помощью кнопки на моей тележке, но я не уверен, как получить SessionId из представления НАЗАД в шаблон и вызвать это.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 28 мая 2020

Обычно вы передаете идентификатор сеанса в ваше представление или используете асинхронный запрос для создания сеанса из вашего бэкэнда. Например:

from django.shortcuts import render

def build_checkout_session(customer):
  # Use your existing code to create Products, Prices, etc...
  session = stripe.checkout.Session.create(…)
  return session

def checkout_view(request):
  session = build_checkout_session(customer=request.user.customer)
  return render(request, 'checkout.html', {'session_id': session.id})

Затем на кассе. html:

<script src="https://js.stripe.com/v3/"></script>
<script type="text/javascript">
  const sessionID = "{{ session_id }}";

  const stripe = Stripe("pk_test_12345"); // Put your publishable key here
  document.getElementById('checkoutButton').addEventListener('click' (evt) => {
    evt.preventDefault();
    stripe.redirectToCheckout({sessionId: sessionID});
  });
</script>

Я также хотел отметить, что вместо того, чтобы каждый раз создавать товары и цены, вы можете передавать объявление -ho c данные в сеанс оформления заказа, как показано здесь: https://stripe.com/docs/payments/checkout/accept-a-payment#creating -ad-ho c -prices

...