fast-je
@fast-je
Пишу на php.

Как запретить два параллельных запроса?

Всем привет! Есть сайт site.com.
На сайте есть раздел выплат. Пользователь заходит и выбирает платежную систему ту, на которую он хочет получить свои деньги. Проблема в чем ?
Проблема заключается в том, что юзер заходит на сайт например в обычном режиме браузера и через инкогнито в один и тот же аккаунт, а также может создать сколько угодно изолированных сессий в один и тот же аккаунт с одного браузера с помощью sessionbox (расширение).
Так вот дальше, процесс выплат на стороне сайте происходит так, что юзер шлет запрос и сервер его принимает и php шлет запрос в платежную систему, а затем пишет в бд если транзакция успешно прошла.
Но представим ситуацию когда юзер присылает 3 одинаковых запроса с разных сессий с одного аккаунта.
В какой момент непонятно но скорее всего когда php ждет ответ от платежной системы, а то есть 3 запроса ждут ответа от ПС, то он происходит с какой-то задержкой, то есть в зависимости от ПС API мы будем ждать разное время ответа, от payeer.com например 2 секунды, от qiwi 500мс.
Но по итогу выполняются все 3 запроса и юзеру 3 раза приходит выплата, а не 1 раз.

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

Какое еще может быть решение в данной ситуации ?
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В начале транзакции снимать сумму с баланса пользователя, записывая её вместе с идентификатором транзакции. После подтверждения перевода удалять запись. При отказе или таймауте возвращать сумму на баланс пользователя.
Как вариант - не снимать сумму, а отмечать её как заблокированную, проводя реальное уменьшение баланса после подтверждения перевода.
Ну и ограничить частоту запросов на снятие средств от одного пользователя.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 13:10
400000 руб./за проект
24 апр. 2024, в 13:01
5000 руб./за проект
24 апр. 2024, в 13:00
3000 руб./за проект