Ошибка Flask Stripe Checkout dynamic prices SessionID

#javascript #python #flask #stripe-payments

#javascript #python #flask #stripe-платежи

Вопрос:

Я использовал https://stripe.com/docs/payments/checkout/migrating-prices#server-side-code-for-inline-items и https://stripe.com/docs/payments/checkout/accept-a-payment а также другие руководства / SO публикует в качестве руководства.

Кнопка «Оформить заказ» в payments.html страница не работает; на странице ничего не происходит.
В функции Flask / payment я смог нормально распечатать session / идентификатор сеанса.
Я попытался передать сеанс и session.id для того, чтобы payments.html страница, но ни то, ни другое не сработало. {{Цена}} на payments.html работает нормально.

Что я здесь упускаю из виду / перепутал, чтобы заставить страницу оформления заказа работать?

base.html

 <!DOCTYPE html>
<html>
  <head>
    <title>Stripe Checkout</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}">
    <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css') }}">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  </head>
  <body>
    <div class="container">
      {% block content %}
      {% endblock %}
    </div>
    {% block scripts %}
    {% endblock %}
  </body>
</html>
  

Payments.html

 {% extends "base.html" %}

{% block content %}
  <div>
    <h1>Cost</h1>
    <h2>Pay ${{price}}</h2>
    <button type="button" class="btn btn-primary" id="checkout">Pay with Card</button>
    <button type="button" class="btn btn-primary" id="back">Back</button>
    
  </div>
  <div id="status">
    <br>
    <div class="alert alert-primary" id="alert" role="alert"></div>
  </div>
{% endblock %}

{% block scripts %}
  <script src="https://js.stripe.com/v3"></script>
  <script>
    var stripe = Stripe('pk_test_...');

    var checkoutButton = document.querySelector('#checkout');
    checkoutButton.addEventListener('click', function () {
      stripe.redirectToCheckout({
        sessionId: {{sessionID}}
      });
    });
  </script>
{% endblock %}
  

Функция Flask / payment

 @app.route("/payment")
def payment():
    price = "50"
    session = session.Session().getSession(int(price)*100)
    sessionID = session.id
    print("SessionID:", sessionID)
    return render_template("payment.html", sessionID=sessionID, price=price)
  

Файл Stripe на Python

 import stripe

stripe.api_key = 'sk_test_...'

class Session:
  
    def __init__(self):
        pass
  
    def getSession(self, price):
        session = stripe.checkout.Session.create(
          payment_method_types=['card'],
          line_items=[{
            'price_data': {
              'currency': 'usd',
              'product_data': {
                'name': 'blah',
              },
              'unit_amount': price,
            },
            'quantity': 1,
          }],
          mode='payment',
          success_url='https://example.com/success',
          cancel_url='https://example.com/cancel',
        )
      
        return session
  

Комментарии:

1. Есть ли какие-либо ошибки в браузере?

2. @floatingLomas о, чувак, спасибо, я не подумал использовать консоль браузера. Да, я понял это, я должен использовать session.id и кавычки вокруг {{SessionID}}.

3. Рад, что вы с этим разобрались! 🙂

Ответ №1:

Благодаря @floatingLomas я не подумал использовать консоль браузера. Да, я понял это, я должен использовать session.id и кавычки вокруг {{SessionID}}.