Создание сложного заказа с оплатой через Stripe
Я пытаюсь позволить своим пользователям оплачивать бронирование (для мероприятия) на моем сайте с помощью Stripe. Большая часть обработки работает хорошо, но я не знаю, как подключить ответ, полученный от Stripe, который указывает, что платеж прошел успешно, к моей базе данных, чтобы она знала все детали, необходимые для бронирования.
В стандартной ситуации "покупки X количества продуктов", я знаю, что могу создать заказ на сервере, который содержит эти детали. Затем я могу поместить этот идентификатор заказа в запрос Stripe и использовать его, когда платеж пройдет успешно, для выполнения этого заказа.
Но в моем случае мне нужно принять больше информации, чем эта. Каждое бронирование может иметь несколько участников, прикрепленных к нему - каждый участник будет иметь имя и дополнительную информацию о нем, которая должна быть использована при создании бронирования.
Единственный способ сделать это - добавить ВСЮ информацию об участнике в запрос к Stripe, чтобы она могла быть использована, когда платеж пройдет успешно? Или есть другой способ?
Если это поможет ответить на этот вопрос, я использую Django на бэкенде.
Основным способом достижения этого является:
- Сохраните информацию, связанную с заказом, в собственной базе данных с соответствующим идентификатором намерения платежа (или идентификатором сессии оформления заказа).
- Прослушать событие webhook
payment_intent.succeeded
(илиcheckout.session.completed
), чтобы узнать, когда платеж будет успешным. - В событии webhook получите идентификатор платежа с помощью
event.data.object.id
и используйте его для поиска информации, необходимой для выполнения заказа, в вашей базе данных.
Подробнее о том, как выполнять заказы, вы можете узнать в документации Stripe здесь.
Другим вариантом может быть использование поля metadata
вашего платежного намерения (или сессии оформления заказа) для прямого хранения всей информации, связанной с заказом. Но я бы не рекомендовал этого делать, так как это имеет некоторые ограничения (количество ключей, длина значений и т.д.).