💳 Палец нажал дважды — списали дважды
💳 Палец нажал дважды — списали дважды Женщина на ресепшене трижды тыкала «оплатить», потому что терминал висел секунд восемь. Деньги ушли трижды. Возвращали руками, извинялись, писали объяснительную. Тогда я полез смотреть, почему у платёжек бывает такая дыра. Надёжный способ, как выяснилось, один: не списывать сразу. Сначала резерв — это как если продавец откладывает вещь за тобой, но из кошелька ещё ничего не взял. Пока задача в работе, второй раз списать нельзя: в базе лежит пометка «этот занят». Дошло до успеха — списываешь ровно зарезервированное. Не дошло — стираешь пометку, возвращать нечего, потому что и не брали. Красиво. Но есть заноза: если сервер упал посреди работы, пометка остаётся навсегда, и человек больше ничего не купит. Как застрявшая дверь в подсобку — ключ есть, а войти нельзя. Лечится уборщиком по расписанию: раз в пару минут он снимает протухшие пометки и пишет «что-то пошло не так, попробуйте снова». У себя на арене такого не чинил, но зарубил на будущее: резерв и блокировка — одна строка в таблице. Захочешь пускать клиента в два потока — переделывать придётся заранее. #платежи #серверы