Платежные API, как и где хранить информацию о платеже между редиректами?
Здравствуйте
Во многих платежных api схема работы такая:
1. создаешь объект платежа (он содержит инфу о платеже - id, сумма, тип оплаты, за что оплата и т.д.) 2. отправляешь пользователя подтвердить платеж на страницу платежной системы 3. платежная система возвращает пользователя на указанный в настройках магазина обратный url, где надо обработать результат.
НО! в третьем пункте они не присылают назад информацию о платеже. Просто возвращают пользователя назад на сайт.
Как на этой странице обработать результат платежа, если не известно от какого именно платежа пользователь вернулся редиректом?!
Получается в первом пункте надо как-то временно сохранить объект платежа и связать с ним юзера, где-то хранить эту инфу в промежутке пока пользователь ходит подтверждать платеж... Как такое делается? помогите разобраться пожалуйста
Платежная система присылает ответ на обработчик отдельным запросом. Редирект пользователя на ваше усмотрение. Можно на список счетов или на страницу счета. Зависит от платежной системы. Как укажете, так и будет.
1. создаешь объект платежа (он содержит инфу о платеже - id, сумма, тип оплаты, за что оплата и т.д.)
И сохраняешь id в базе
2. отправляешь пользователя подтвердить платеж на страницу платежной системы
3. платежная система возвращает пользователя на указанный в настройках магазина обратный url, где надо обработать результат.
При редиректе читаешь пользователя и его последний id из базы.
Спасибо
Меня смущало то, что не хотелось хранить незаконченные платежи. Например пользователь кликнул оплатить, потом передумал и ушел по своим делам. А в базе останется некий платеж ни туда ни сюда
Proconsool, и что? Платежная система вам отправляет сообщение в любом случае. Если не оплатил, вы просто выведите статус и предложение повторить оплату. Что кстати классно, вдруг он забыл или потерял
Для большинства способов оплаты после создания платежа вам нужно получить согласие от пользователя, что он готов заплатить. Для этого пользователю нужно дополнительно что-то сделать, например, пройти 3-D Secure при оплате банковской картой, подтвердить оплату в платежном сервисе партнера
Сценарий подтверждения Redirect: Пользователю необходимо что-то сделать на странице ЮKassa или ее партнера (например, ввести данные банковской карты или пройти аутентификацию по 3-D Secure). Вам нужно перенаправить пользователя на confirmation_url, полученный в платеже . При успешной оплате (и если что-то пойдет не так) ЮKassa вернет пользователя на return_url, который вы отправите в запросе на создание платежа .
Вот я создал платеж, от юкассы пришла инфа с id платежа и информацией по нему. Платеж пока находится в статусе "не подтвержденный", и я сохраняю этот платеж в бд с этим статусом. Дальше перенаправляю пользователя по пришедшему от юкассы confirmation_url,там юзер все подтверждает и его возвращает на мой сайт на return_url...
Как мне отловить от какого платежа вернулся пользователь? если он возвращается без каких либо параметров о платеже =\
На юкассе можно либо подписаться на изменение статуса платежа, либо самому посылать периодические запросы с id платежа на проверку обновления статуса. Я хочу пойти по второму пути: Пользователь возвращается на return_url, и я хочу на этой странице, допустим яваскриптом, посылать раз в 3 сек id платежа и по получении нового статуса сообщить, что все ок, либо вывести причину отмены. НО как узнать какой id платежа проверять от браузера конкретного пользователя, чтоб показать ему результат именно его платежа? (ведь между запросами эта информация теряется, и пользователь приходит на return_url как будто новый голенький) Юзеры гости и не требуется регистрация, поэтому непонятно как user_id в базе привязать
Proconsool, При запросе к ЮКассе вы можете в объекте платежа передать любые метаданные (все нужные вам id). Эти метаданные будут присутствовать во всех ответах сервиса.
В ответах от ЮКассы да, все нужные данные присутсвтуют, но возвращение пользователя редиректом после поддтверждения оплаты на третьей стороне это же не то чтобы ответ, как я понимаю...?
Мне посоветовали id платежа подставлять в return_url?pay_id=$payId и тогда уже можно его дергать и проверять обновление статуса. Как вам такое решение?
Proconsool, Ээээ... Я сразу не понял проблемы :)
Недавно делал приём платежей для одного сайта через ЮКассу. Там я так и сделал - передавал в url. Затем уже проверял статус.