Проверка трейд-бана у продавца
При каждой сделке проверяем — нет ли у продавца блокировки обменов в Steam.
Статус: ✅ В проде — вмержено в master 28 мая, коммит 0aa5258. Тесты зелёные (5/5), кеши почищены, autoload пересобран.
Что есть сейчас (до изменений)
1.
Проверка трейд-бана делается только в момент, когда продавец нажимает «выставить скин на продажу». Если бан есть — Steam-ответ режет выставление.
2.
В момент покупки никто заново не спрашивал Steam. Если бан появился между «выставил» и «купили» — покупатель уходил в зависшую сделку.
3.
Лог запросов к Steam был частичный — только при ошибках, без позитивных ответов и без батча.
Что меняется в этой ветке
1.
Проверка теперь идёт и в момент покупки. Если у продавца появился экономический бан Steam — сделка отбивается, лот переходит в «снят с продажи», покупателю сообщение «продавец временно не может передать предмет, выбери другой лот».
2.
Запросы к Steam батчатся. Steam API позволяет проверять до 100 SteamID за один запрос — теперь корзина с 5 продавцами это один HTTP-запрос, а не 5.
3.
Кеш на 10 минут. Чтобы при наплыве покупателей не упереться в дневной лимит Steam (~100k запросов в сутки на бесплатный ключ). Настраивается переменной окружения.
4.
Подробный лог в отдельный файл. storage/logs/steam-trade-ban-YYYY-MM-DD.log — там видно каждый исходящий запрос, ответ Steam, и решение «снять листинг такой-то».
5.
Аварийный выключатель. Флаг SKINSARENA_STEAM_TRADE_BAN_CHECK=false — мгновенно отключает всю проверку, если Steam совсем лёг.
6.
CLI-команда для проверки одного игрока: php artisan sa:trade-ban-check <steamid> — удобно для дебага.
Как выглядит лог одной проверки
[trade_ban.request] url=https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/ steam_ids=[76561198000000001] count=1
[trade_ban.response] players=[
{ steam_id=76561198000000001, economy_ban="banned", vac_banned=false, community_banned=false, days_since_last_ban=1, decided_trade_banned=true }
]
[trade_ban.listing_cancelled_on_purchase] market_item_id=42 seller_id=7 seller_steam_id=76561198000000001 buyer_id=19
Тесты
✅
Покупка отбивается при бане продавца, листинг переводится в Cancelled, деньги покупателя не трогаются.
✅
Покупка проходит когда у продавца всё чисто.
✅
При выключенном флаге к Steam вообще не идёт запросов.
✅
Корзина с двумя разными продавцами — один HTTP-запрос (batch).
Что осталось (опционально, обсуждаем)
→
Плашка в кабинете продавца «у тебя сейчас бан Steam до такой-то даты, новые скины выставить нельзя» — чтобы человек не злился, что листинги снимаются «без причины». Сделаю отдельным шагом, если согласуем.
→
Бизнес-решение: при недоступности Steam API — отбивать сделку или доверять последнему кешу? Сейчас по умолчанию «отбиваем мягко» — это безопаснее.
← Назад к роудмапу