Я создал тестовый продукт через https://dashboard.stripe.com/test/products. Этот продукт имеет идентификатор "prod _...". Я хотел бы продать этот продукт через Stripe Elements.
Я создал базовую форму c Stripe Elements, которая берет адрес электронной почты пользователя и информацию о его карточке на основе их руководства :
purchase.html
<form action="/api/process_payment" method="post" id="payment-form">
<label>Email</label>
<input type="text" name="email">
<div id="card-element">
<!-- Elements will create input elements here -->
</div>
<!-- We'll put the error messages in this element -->
<div id="card-errors" role="alert"></div>
<button id="submit">Pay</button>
</form>
stripe.js
var stripe = Stripe('pk_test_lp7ZS0B23jNmorIoW6Wj0Rs2009E1xTCwS');
var elements = stripe.elements();
// Set up Stripe.js and Elements to use in checkout form
var style = {
base: {
color: "#32325d",
}
};
var card = elements.create("card", { style: style });
card.mount("#card-element");
card.addEventListener('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
var submitButton = document.getElementById('submit');
submitButton.addEventListener('click', function(ev) {
stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: card,
}
}).then(function(result) {
if (result.error) {
// Show error to your customer (e.g., insufficient funds)
console.log(result.error.message);
} else {
// The payment has been processed!
if (result.paymentIntent.status === 'succeeded') {
// Show a success message to your customer
// There's a risk of the customer closing the window before callback
// execution. Set up a webhook or plugin to listen for the
// payment_intent.succeeded event that handles any business critical
// post-payment actions.
}
}
});
});
Однако проблема, с которой я сталкиваюсь в этой системе, заключается в том, что мне нужно убедиться, что адрес электронной почты пользователя существует в моей базе данных. Поэтому мне нужно подтвердить оплату на стороне сервера, а не запускать stripe.confirmCardPayment (...).
Я подумал, что мог бы просто использовать flask для создания платежного намерения, когда они посещают мой URL покупки:
@app.route("/payment", methods=["GET"])
def payment():
return render_template("payment.html)
@app.route("/api/process_payment", methods=["POST"])
def process_payment():
data = request.get_json()
if data["email"] ...: # some check
payment_intent = stripe.PaymentIntent.create(
amount=2000,
currency="gbp",
payment_method_types=["card"],
)
stripe.PaymentIntent.confirm(payment_intent["id"],)
# verify payment and give status to user
else:
# inform user of invalid email
Поэтому идея заключается в том, что, когда пользователь отправляет форму, он Отправьте данные в /api/process_payment
, который на основе этих данных создает намерение оплаты, а затем обрабатывает платеж. Тем не менее, я не смог выработать способ фактического использования их платежной информации в рамках платежного намерения. Как я могу обработать их платежный сервер?
Кроме того, я хотел бы создать платежное намерение одного из моих продуктов, а не просто указать сумму. Как я могу это сделать?