Создание сложного заказа с оплатой через Stripe

Я пытаюсь позволить своим пользователям оплачивать бронирование (для мероприятия) на моем сайте с помощью Stripe. Большая часть обработки работает хорошо, но я не знаю, как подключить ответ, полученный от Stripe, который указывает, что платеж прошел успешно, к моей базе данных, чтобы она знала все детали, необходимые для бронирования.

В стандартной ситуации "покупки X количества продуктов", я знаю, что могу создать заказ на сервере, который содержит эти детали. Затем я могу поместить этот идентификатор заказа в запрос Stripe и использовать его, когда платеж пройдет успешно, для выполнения этого заказа.

Но в моем случае мне нужно принять больше информации, чем эта. Каждое бронирование может иметь несколько участников, прикрепленных к нему - каждый участник будет иметь имя и дополнительную информацию о нем, которая должна быть использована при создании бронирования.

Единственный способ сделать это - добавить ВСЮ информацию об участнике в запрос к Stripe, чтобы она могла быть использована, когда платеж пройдет успешно? Или есть другой способ?

Если это поможет ответить на этот вопрос, я использую Django на бэкенде.

Основным способом достижения этого является:

  1. Сохраните информацию, связанную с заказом, в собственной базе данных с соответствующим идентификатором намерения платежа (или идентификатором сессии оформления заказа).
  2. Прослушать событие webhook payment_intent.succeeded (или checkout.session.completed), чтобы узнать, когда платеж будет успешным.
  3. В событии webhook получите идентификатор платежа с помощью event.data.object.id и используйте его для поиска информации, необходимой для выполнения заказа, в вашей базе данных.

Подробнее о том, как выполнять заказы, вы можете узнать в документации Stripe здесь.

Другим вариантом может быть использование поля metadata вашего платежного намерения (или сессии оформления заказа) для прямого хранения всей информации, связанной с заказом. Но я бы не рекомендовал этого делать, так как это имеет некоторые ограничения (количество ключей, длина значений и т.д.).

Вернуться на верх