Когда мы делаем сеанс проверки с полосой, мы включаем URL-адрес успеха:
session = await this.stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: lineItems,
payment_intent_data: {
transfer_data: {
amount: 9999999,
destination: someaccountId,
},
},
success_url: `http://localhost:4000/api/checkout/success?true&session_id={CHECKOUT_SESSION_ID}&alias_id=${aliasId}`,
cancel_url: `http://localhost:4000/api/checkout/canceled?session_id={CHECKOUT_SESSION_ID}`,
});
URL-адрес успеха — это место, куда Stripe отправляет пользователя после успешной оплаты. Это запрос GET, так как Stripe перенаправляет пользователя. Многим приложениям, использующим полосу, потребуется выполнить действия после успешной проверки — отправить квитанцию по электронной почте, уведомления, отправить платный контент, обновить порядок в базе данных и т. д. Но рекомендуется не выполнять эти действия в запросах GET, поскольку запросы GET должны быть идемпотентным и безопасно.
Например, ссылка на отмену подписки в электронном письме не должна отменять подписку пользователя, вместо этого правильный подход к ссылкам отписки состоит в том, чтобы вести на страницу, где пользователь может нажать кнопку, чтобы отписаться (где нажатие кнопки вызывает запрос POST). источник Это связано с тем, что многие, многие, многие инструменты, утилиты, поисковые роботы и прочие штуковины предполагают, что GET никогда не будет деструктивным действием (правильно, поскольку оно определено таким образом). Если вы сейчас нарушите свое приложение, нарушив эту спецификацию, вы сохраните обе части своего приложения. источник
Итак, мне было интересно, как правильно обрабатывать URL-адрес успеха полосы? Если мы последуем предложенному выше совету, то URL-адрес успеха будет ссылаться на страницу, где пользователь нажимает кнопку, которая обновляет заказ, отправляет квитанцию по электронной почте и т. Д. Но тогда мы полагаемся на то, что клиент завершит заказ, который уже был оплачен. за. Если они не нажмут эту кнопку, важные действия не будут выполнены. Каков правильный способ сделать это? Или предложение не менять базу данных по GET-запросу по какой-то причине не относится к такого рода действиям?