#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}}.