Комментарии 73
Особенно обидно было осознавать, что мы вернули деньги, которых не получали — это были тестовые заказы.
Заказы в продакшен-базе были оплачены и выполнены. При копировании в тестовую базу обезличивание данных сделало какие-то заказы невыполненными. Скрипт откатил оплаты по этим заказам. Но откатил не по тестовому шлюзу, а по живой Яндекс.Кассе :)
Из того, что я прочитал, мне представляется, что в норме бесхозные оплаты всё равно не должны возикать — вы же не удаляете заказы сразу после того, как их застопорили?
Соответственно, автоматом отменять нужно только те оплаты, которые привязаны к застопоренному заказу.
А возникновение вообще бесхозной оплаты должно считаться нештатной ситуацией. И если такое обнаруживается, то нужно отправлять аларм человеку, который будет руками разбираться, почему случился такой пердимонокль.
Например, оплаты банковскими картами могут быть двух типов
SMS и DMS. В первом случае авторизация и ее выполнение происходят в рамках одной транзакции, а во втором случае они проходят в рамках 2 транзакций, т.е. клиент видит и думает, что оплатил, а по факту деньги только заблокировались и не ушли получателю, а выполнение транзакции происходит только при одобрении первой транзакции получателем
- да, скорее всего так.
- при первой транзакции создается ее id, который в дальнейшем и финишируется, если все устраивает получателя, либо финишируется с корректировкой суммы
P.S.: Мы работали по DMS с эквайером, чтобы избежать эксцессов по поводу отсутствия товара и оплаченной сумме. После перехода к Я.Кассе нам пришлось запретить оплату несобранных заказов в личном кабинете пользователей. И это очень неудобно добросовестным клиентам
Обеспечивая бурный рост Dodo IS, мы нередко предпочитали скорость разработки всему остальному. Иногда это происходило в ущерб системной логике, архитектуре и инфраструктуре.
У меня приятель в Dodo работал. Рассказывал, что подобные «ускорения» приводили к тому, что js и css писали прямо в cshtml файлах в массовом порядке. Описанная в статье проблема была конечно архитектурная, а не тактическая, но симптомы на лицо. Он ушел из Dodo, потому что боялся что «ускорения» к чему-то подобному приведут. Надеюсь выводы сделаны и в дальнейшем у Dodo будет рост качества кода и безотказности системы! А пицца и так вкусная)
Это называется https://en.wikipedia.org/wiki/Eating_your_own_dog_food, и продукт в результате получается в сто раз круче.
«С такой точки зрения инженерам много что полезно, побывать на всех этапах цепочки. И поработать курьером, поразвозить пиццу»
У нас пока нет аппов для курьеров. Но где-то через год они будут и тогда — да, поработать курьером будет полезно
«И поработать официантом, потому что они через сколько-то слоев взаимодействуют с бакендом»
В пиццерии нет официантов.
«И поработать уборщицей в туалете, потому что у вас вот все сотрудники взаимозаменяемы.»
Мы не автоматизируем уборку туалетов, так что это лишнее
«Для того чтобы писать хороший отказоустойчивый бакенд или разрабатывать архитектуру платежного гейта, или быть хорошим DBA или админом линукс-сервера не нужно знать специфику приготовления теста.»
Знать специфику приготовления теста не обязательно. Понимать, как работает пиццерия изнутри обязательно. От этого однозначно не будет хуже — как минимум, это новые знания, расширение кругозора и т.д. В нашем же случае мы видим очевидную пользу от этого — такие стажировки влияют на мотивацию людей и на отношение к разрабатываемому продукту.
Можно просто доставить несколько заказов, находясь рядом с настоящим курьером. Было бы желание, а решение найдется.
«Для этого совершенно необязательно работать неделю в Сывтывкаре.»
Необязательно в Сыктывкаре и неделю. Пиццерии есть в Москве.
«Но будет ли лучше — далеко не факт.»
Наш опыт показывает, что будет лучше. Опыт — штука субъективная, я понимаю. Что и хочу донести в нашей переписке.
А Додо может конкурировать с Империей пиццы и прочим локальным продуктом.
Зря боялся:
> Мы не будем наказывать людей
И зря ушёл, они ведь теперь меняются:
> мы просто сделаем все, чтобы такого больше не повторилось.
Итог: Вместо того, чтобы попробовать направить в нужное русло он просто свалил…
И да, ни какой финансовый запрос в АПИ не должен выполняться в обход системы антифрода. Это аксиома для платежного шлюза. У разработчика не должно быть шансов создать endpoint в АПИ не унаследовав базовые проверки в антифроде. В первом приближении система антифрода может быть обычной таблицей барьерных лимитов.
Неужели Senior Developer не поменяли? Просто пройтись по статье — косяков Senior Developer немеряно, начиная от «сильной связи». Жесткие такие косяки.
Хотя, такие люди, как правило, очень амбициозны, и поэтому очень убедительны. "Я создал монстра, и потратил на это много денег" — и его начальство любит и очень ценит, ведь он так крут. «Unix Way? Игрушка. Устойчивая распределенная архитектура? Оставьте это для учебников...»
Только в любой другой действительно ИТ-ориентированной компании такой надолго не задержался бы.
Простите за прямоту.
А когда вы растете на 100% в год, и так несколько лет подряд. Вот тогда, чтобы ты не напридумывал сегодня через некоторое время это станет неактуальном в любом случае. Либо бизнес загнется, либо надо все переделывать под новые требования. Если делать хорошо, но долго, бизнес может к тому времени загнуться.
Обеспечивая бурный рост Dodo IS, мы нередко предпочитали скорость разработки всему остальному. Иногда это происходило в ущерб системной логике, архитектуре и инфраструктуре.
Типичная ситуация, разработчики как раз тут чаще всего не особо виноваты, хотя часто оказываются "крайними". Скорее тут похвально то, что не стали наказывать за косяки, допущенные из-за построения процесса разработки.
В чем беда то, люди потеряли 200к рублей? Они больше на тестирование теряют, просто не с таким шумом. Это копейки.
Люди смогли безопасно протестировать архитектуру. Если бы потом заказов было бы на 100 миллионов, на реальных клиента?
В по такого применения иногда быстро написанный говнокод принесет миллиарды прибыли, а тут какие то 200к блин.
У них не спутник упал, и не машина контроль потеряла, как было у тойоты с 100 жертвами и 8 миллионами отозванных машин.
Windows по всему миру не упал и по никому деньги не перевело.
«Безусловно, мы сделаем серьезнейшие выводы из этой критической ошибки. Мы не будем наказывать людей — мы просто сделаем все, чтобы такого больше не повторилось.»
Ни разу у вас пиццу не заказывал (в нашем городе относительно недавно), но сегодня это сделаю.
Исходный код платежного шлюза располагается в специальном репозитории, закрытом от всех разработчиков. Для любого изменения исходников разработчику нужно оформить отдельную заявку.
И изменение, видимо, разработчик делает на выделенной машине без доступа в интернет с выдранными внешними портами и перенакатом образа ОС каждые два часа, под неусыпным присмотром охранника.
Хотя, вероятнее, копия репозитория с некоей версией шлюза валяется на локальном диске каждого разработчика, вносившего изменения.
Привет, Андрей, весело у тебя там.
Ситуация с Додо-пиццей привлекла и моё внимание. Именно из-за того, что
Примерно полтора года назад мы в CloudPayments сделали возможность отменять совершенные возвраты в течение 3 часов после их совершения: в это время мы еще не отправляем окончательное подтверждение в МПС. Кроме того, даже если эти три часа будут упущены, не получится сделать возвратов больше, чем на суточный оборот.
И в этой ситуации, чтобы не отменять вручную возвраты по всем этим 10000 заказов, можно было бы написать или позвонить в нашу поддержку, мы бы эти возвраты завернули в течение пяти минут.
Как в «Додо Пицца» потеряли 8 миллионов за один час из-за технической ошибки, а потом вернули