Платежные api, помогите разобраться

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Платежные api, помогите разобраться

Сообщение louisvuitton »

Здравствуйте

Во многих платежных api схема работы такая:

1. создаешь объект платежа (он содержит инфу о платеже - id, сумма, тип оплаты, за что оплата и т.д.) (в этот момент я его нигде не сохраняю, тк. пока неизвестно чем закончится оплата и будет ли она)

2. отправляешь пользователя подтвердить платеж на страницу платежной системы

3. платежная система возвращает пользователя на указанный в настройках магазина обратный url, где надо обработать результат.

НО! в третьем пункте они не присылают назад информацию о платеже! Просто возвращают пользователя назад на сайт.
Как на этой странице обработать результат платежа, если я не знаю от какого именно платежа пользователь вернулся редиректом?!

В первом пункте надо как то временно сохранить объект платежа и связать с ним юзера, где то хранить эту инфу в промежутке пока пользователь ходит подтверждать платеж... Как такое делается, помогите разобраться пожалуйста :?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Платежные api, помогите разобраться

Сообщение ElisDN »

Да, в первом пункте сохранить у себя в БД объект заказа с user_id и со статусом "ожидает".

Вы пропустили, что между вторым и третьим пунктом платёжная система производит к нам скрытый POST-запрос для проверки до оплаты и запрос об оплате или ошибке после оплаты с номером и данными заказа. По этим запросам мы и переключаем у себя статус заказа на "оплачен" или "ошибка". В настройках системы обычно все эти callback-адреса тоже указываются.

А потому уже система автоматически или по ссылке "Вернуться в магазин" пересылает посетителя на страницу успеха или ошибки.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Платежные api, помогите разобраться

Сообщение ElisDN »

У всех систем по-разному, а полный алгоритм такой:

1. Мы у себя создаём и сохраняем заказ со статусом "ожидает" и редиректим посетителя на платёжную систему с данными для оплаты.

2. Система скрыто присылает запрос проверки заказа. Там мы возвращаем OK если всё верно или возвращаем ошибку, если что-то не совпадает.

3. Система даёт посетителю оплатить.

4. Система скрыто присылает запрос с результатом оплаты и номером заказа. Мы по этому номеру достаём у себя заказ и переключаем его на "оплачен" или "ошибка".

5. Посетитель может либо закрыть вкладку, либо вернуться в магазин на декоративную страницу успеха или ошибки.
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Платежные api, помогите разобраться

Сообщение louisvuitton »

ElisDN,
Спасибо большое
Меня смущало то, что не хотелось хранить незаконченные платежи. Например пользователь кликнул оплатить, потом передумал и ушел по своим делам. А в базе останется некий платеж ни туда ни сюда

зы: читаю ваши статьи и смотрю видео, очень качественно делаете! 👍
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Платежные api, помогите разобраться

Сообщение ElisDN »

louisvuitton писал(а): 2021.02.07, 15:37 ...не хотелось хранить незаконченные платежи.
Можно вычищать старые неоплаченные по cron-у
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Платежные api, помогите разобраться

Сообщение louisvuitton »

Посмотрите пожалуйста на примере yookassa

Из доки:

Для большинства способов оплаты после создания платежа вам нужно получить согласие от пользователя, что он готов заплатить. Для этого пользователю нужно дополнительно что-то сделать, например, пройти 3-D Secure при оплате банковской картой, подтвердить оплату в платежном сервисе партнера
Сценарий подтверждения Redirect: Пользователю необходимо что-то сделать на странице ЮKassa или ее партнера (например, ввести данные банковской карты или пройти аутентификацию по 3-D Secure). Вам нужно перенаправить пользователя на confirmation_url, полученный в платеже . При успешной оплате (и если что-то пойдет не так) ЮKassa вернет пользователя на return_url, который вы отправите в запросе на создание платежа .

Вот я создал платеж, от юкассы пришла инфа с id платежа и информацией по нему. Платеж пока находится в статусе "не подтвержденный", и я сохраняю этот платеж в бд с этим статусом. Дальше перенаправляю пользователя по пришедшему от юкассы confirmation_url,там юзер все подтверждает и его возвращает на мой сайт на return_url...
Как мне отловить от какого платежа вернулся пользователь? если он возвращается без каких либо параметров о платеже =\

На юкассе можно либо подписаться на изменение статуса платежа, либо самому посылать периодические запросы с id платежа на проверку обновления статуса. Я хочу пойти по второму пути: Пользователь возвращается на return_url [/i ], и я хочу на этой странице, допустим яваскриптом, посылать раз в 3 сек id платежа и по получении нового статуса сообщить, что все ок, либо вывести причину отмены. НО как узнать какой id платежа проверять от браузера конкретного пользователя, чтоб показать ему результат именно его платежа? (ведь между запросами эта информация теряется, и пользователь приходит на return_url как будто новый голенький) Юзеры гости и не требуется регистрация, поэтому непонятно как user_id в базу привязать
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Платежные api, помогите разобраться

Сообщение ElisDN »

louisvuitton писал(а): 2021.02.07, 15:37 зы: читаю ваши статьи и смотрю видео, очень качественно делаете! 👍
Да, в https://deworker.pro/edu теперь сильно стараюсь :)
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Платежные api, помогите разобраться

Сообщение louisvuitton »

Сори за нубские вопросы, просто хочу раз и навсегда разобраться, как это делается правильно =\
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Платежные api, помогите разобраться

Сообщение ElisDN »

louisvuitton писал(а): 2021.02.07, 18:50 Дальше перенаправляю пользователя по пришедшему от юкассы confirmation_url, там юзер все подтверждает и его возвращает на мой сайт на return_url
Тогда номер заказа добавляйте в return_url:

Код: Выделить всё

'return_url' => 'https://site.com/return?order_id=' . $id,
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Платежные api, помогите разобраться

Сообщение louisvuitton »

Кажется это то что нужно! Спасибо еще раз, буду пробовать
Ответить