За последние 24 часа нас посетили 22653 программиста и 1016 роботов. Сейчас ищут 696 программистов ...

Проверка статуса заказа в платежных системах

Тема в разделе "Прочие вопросы по PHP", создана пользователем Дюран, 15 окт 2021.

  1. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Приветствую.
    На сайте оформляют счет, и ссылку отправляют клиенту, на оплату.
    Потом сайт кроном стучит на сервер платежной системы , запрашивая статус заказа.
    Сделал очередь, - запоминаю сколько проверок сделано и дату последней проверки.
    Текущие проверяемые соответственно у кого поменьше и того и того.
    Но все равно вижу что по заказам сильно много проверок идет.
    По 500 например.
    А они могут вообще и не оплатить, а сайту проверяй и проверяй.
    Думаю когда все это завершать? Или как решить лучше?
    Проверки каждую минуту, по одной проверке за раз,
    Минуту, т.к. успешный результат нужен быстро.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Больше деталей....
    какой счет, какая ссылка, какая платежная система?
    это вообще выше моего разумения ..... особенно про.... и того и того .. что это????

    в нормальный платежных системах не надо стучаться никуда, они сами шлют на ваш сервер данные об успешности/неуспешности платежей
     
  3. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Платежных систем много подключено.

    Это не у всех есть.
    Но и жестко потребовали на это не рассчитывать. Т.к. не всегда это надежно работает.

    Запоминаю кол-во проверок по заказу(счету) и дату последней проверки.
    Соответственно order by check_amount, check_last_time всегда дадут те записи, которые надо сейчас проверить.
    Те что много проверяются, будут иметь большой check_amount и поэтому не будут конкурировать с новыми заявками.
    А для тех что имеют одинаковый check_amount - выбирает по check_last_time.
    Очередь такая.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    ну опять же - обратиться опыту платежных систем, которые уведомляют...
    там они стучатся не каждую минуту, а как то так 1 1 1 3 5 10 30 60 минут... если за час не достучались - это проблемы сайта
     
  5. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    как правило у платежных систем практически у всех есть callback который сообщает про статус платежа.. мы за последнее время больше 20 наверно уже подключили платежных систем.. только в одном пришлось сделать крон по проверке статусов.. да и то оно не долго дергает.
     
  6. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    не долго - это когда заказ оплачивается, а вот если весит неоплаченным.

    Я сделал пока проверку - время следующей проверки, и для таких "зависших" заказов отодвигаю ее в будущее
     
    #6 Дюран, 19 окт 2021
    Последнее редактирование: 19 окт 2021
  7. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    дать время жизни заказу.. у нас если через два часа не прошла оплата - то мы переводим заявку в отмененную и перестаем ее проверять.. если чел оплатил через сутки - тогда через саппорт решает вопрос - потому что за сутки курс мог изменится и цена совсем другой стать.
     
  8. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Ну вот я к тому же прихожу, поэтому и спросил, т.к. с такой проблемой не сталкивался.

    У нас просто нет курсов, все в одной валюте, клиенту могут отправить ссылку на оплату, а он может и потупить
     
  9. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    Практика показала что в таком алгоритме есть минус:
    - неоплаченная заявка будет проверяться и ее check_amount будет расти
    - поэтому когда ее все же оплатят, до нее куча времени требуется, чтобы очередь дошла
    - а видеть то оплаченные заказы хотят "прям сразу".

    Так что в сырую так не пойдет, периодически, рандомно, проверяю просто по order by check_last_time
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    ну зачем же так..... вы ж знаете что заявка оплачена - статус изменился. Для таких заявок приоритет просто выше должен быть и все
     
  11. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    256
    Симпатии:
    19
    нет, это ж у меня как раз проверки среди ожидающих на то, оплачена ли.

    с алгоритмом выше, вообще не жалуются