Такая боль, такая боль, касса как сервис 2:0

    В предыдущей статье мы рассказывали о том, как Антиплагиат выбирал себе «облака». В этой поговорим о важной составляющей жизни любой коммерческой компании — получении денег от клиентов.

    Для получения платежей от частных клиентов мы всегда пользовались услугами агрегаторов. Сначала нам захотелось диверсификации между сервисами приема платежей, затем появились требования выписки электронных чеков… Словом, было много хотелок и требований как с нашей стороны, так и со стороны государства. В этой статье мы поделимся накопленным опытом и расскажем о граблях в высокой траве, на которые нам пришлось наступить и которые удалось избежать. Думаю, что описанный опыт может быть полезен всем тем, кто еще в начале пути интеграции платежей в свою систему.

    Скрудж МакДак купается в золоте

    Изображение с сайта giphy.com

    Жили у бабуси две веселых кассы...


    Наши частные клиенты проверяют документов в 3 раза больше корпоративных. С самого начала нашей деятельности и до сих пор мы бережно храним возможность бесплатного поиска заимствований по интернету. Платные же услуги обладают следующими преимуществами:
    • больший приоритет при проверках,
    • отсутствие ограничения по числу проверяемых документов в единицу времени;
    • доступность широкого выбора модулей поиска для подключения.


    Стоимость платной услуги складывается из отчислений поставщикам контента и издержек на поддержание инфраструктуры проверок (в том числе и бесплатных) для частных клиентов.

    Сейчас одна проверка по Объединенной коллекции (ОК), включающей все возможные модули поиска, стоит 270 рублей. Единичных проверок достаточно для обычных пользователей, и для целей обычных пользователей проверка не очень дорога. Тех же, кто проверяет массово, мы условно для себя делим на два класса: честные и нечестные. Если это организация, занимающаяся образованием или нуждающаяся в сервисе проверки на заимствования для контроля качества научных или других текстовых работ, то мы предлагаем стать нашими корпоративными клиентами, что снижает расходы клиента в пересчете на одну проверку. Для «тюнинговщиков» и писателей на заказ (догадайтесь, к какой категории они принадлежат) путь в корпоративный сегмент закрыт. Таков наш принцип, мы не заключаем договоры с сомнительными, на наш взгляд, компаниями. Также мы контролируем деятельность наших клиентов для предотвращения использования корпоративных учеток в «бизнес»-целях (эвристики, машинное обучение, вот это вот все). В нашей истории было несколько расторжений договоров после того, как мы выяснили, что клиент оказался не тем, за кого себя выдавал. К сожалению, мы не можем заключать договор с каждым частным пользователем, поэтому для них используется оферта. Это удобно для частных пользователей, но в то же время мы не можем контролировать, кто пользуется платным доступом, как магазин не может запретить купить у него товар, выставленный на витрине. Стоимость массовых проверок для частных клиентов будет планомерно повышаться. Тем самым мы делаем написание работ на заказ дорогим удовольствием и придерживаемся нашей миссии по улучшению образования в России и мире.

    Как все начиналось


    Наш сервис перевел часть бесплатных ранее для частных клиентов услуг в разряд платных 4 мая 2010 года. До этого момента весь функционал был доступен в полном объеме, платными были только проверки по внешним коллекциям, за которые мы, в свою очередь, сами платили поставщикам контента. Мы сделали платной услугой формирование полного отчёта. Очевидно, что пользователи были недовольны и легко подсчитывали наши баснословные доходы.


    Скриншоты высказываний апреля-мая 2010 года с нашего форума.

    Увы, недвижимости на Кипре у меня нет до сих пор, несмотря на то, что я писал первую версию биллинга.

    Первый робокась


    Для запуска массовых платежей мы воспользовались уже проверенным решением — интеграцией с Робокассой (РК). До 4 мая 2010 года мы принимали платежи за проверки по диссертациям и нормативно-правовым документам. Сервис РК нас устраивал. Интеграция была простой как валенок, на нашей стороне нужно было делать минимум: всего лишь, перенаправление на сайт кассы и обработчик обратного вызова кассы о статусе платежа. Стандартный сценарий действия пользователя выглядел следующим образом:
    1. Пользователь выбирает продукт на сайте, нажимает кнопку оплатить.
    2. Сайт (при участии сервиса биллинга, но это не столь важно в текущем контексте) перенаправляет в сервис Робокассы, указывая идентификатор магазина, товара и сумму платежа.
    3. Пользователь на сайте оплачивает товар.
    4. Сервис кассы принимает деньги и уведомляет нас о совершении платежа обратным вызовом (колбеком, по-русски).
    5. … Здесь творится магия...
    6. Profit!!! Деньги перечисляются на счет компании за вычетом комиссии.


    Все было настроено и работало годами. А как известно: работает — не трожь! Так не могло длиться вечно, пришлось кое-что поменять.

    Y(et)a(nother) кась


    Мы живём в неспокойное время перемен и возможностей. В конце декабря 2015 года в разгаре был процесс отзыва лицензий у банков, а так как любая платежная система завязана на какой-то банк, то мы решили, что нам нужен запасной вариант. План Б не позволит нам в какой-то момент остаться без возможности принять платеж. Из более-менее крупных агрегаторов платежей выбор пал на Яндекс.Касса (ЯК). Задача была сделана в рекордные сроки, за 3 последних дня декабря, и на каникулы мы ушли с прикрытыми тылами. К слову сказать, риски в отношении РК не реализовались, зато мы получили альтернативную платежную систему. Не выкидывать же! С тех пор они работают вместе. Два весёлых гуся!

    Опыт, который пока не применен


    Как я уже писал, нам хочется разрабатывать Антиплагиат и поменьше отвлекаться на побочные вещи. Платные услуги для частных клиентов — это возможность продолжать предоставлять бесплатные услуги.
    Так получилось, что мы реализовывали интеграции максимально простыми способами, которые предлагали каждый из агрегаторов платежей. Поэтому у нас очень понятная страница оплаты с двумя разными механизмами для двух разных касс.


    Для РК выбор способа оплаты происходит после перехода на страницу агрегатора, для ЯК — на нашей странице, до перехода. Для понимания корреляции профиля платежей с нагрузкой ниже синим выделена доля денег, поступивших к нам через РК, а оранжевым — число платных проверок.


    Так, не особо маясь с реализацией, мы провели тестирование юзабилити двух вариантов интерфейсов оплаты. Похоже, что пользователи отдают предпочтение варианту ЯК. Всплески выше 50% характерны для самого начала использования ЯК и малонагруженных периодов года, когда число платежей меньше. Видимо, в этот момент больше влияет то, что РК расположена выше и выбрана по умолчанию.

    Бабуся Атол ФФДэховна


    Сразу оговоримся: мы не нарушаем законы физики и Российской Федерации. Поэтому вместе со всеми начали искать решение по выписыванию чеков с 1 июля 2017 года согласно Федеральному закону №290. Искали заранее, как раз во время очередной весенней сессии. Сразу стало очевидно, что ставить кассу и выбивать чеки вручную мы не будем.
    К назначенному государством сроку мы, как и многие компании в стране, не уложились. Произошло это по прозаической причине отсутствия онлайн кассы как сервиса. В то время многие предлагали разные другие варианты. Например, в Робокассе был вариант с продажей своих товаров в их магазине. Выглядело как-то не очень. Больше всего нам импонировал подход KaaS — касса как сервис. Одним из первых (если не самый первый) такую услугу предложил Атол.
    Несмотря на ажиотаж, мы достаточно быстро заключили договор, купили и поставили на учёт фискальный накопитель — специальную флешку для хранения всех транзакций, выбитых через кассу.
    Показательным было то, что оба наших гуся практически сразу стали поддерживать интеграцию с Бабусей-Атолом. Как говорится в сказке: начали мы жить-поживать да добра наживать.

    Переход на ФФД 1.05


    Всем известно, что жить по-новому надо начинать именно 1 января (сразу как проснешься, ага). Правда, это явно не самое удачное время для вступления каких-то законодательных изменений. Тем не менее, именно с 1 января 2019 года всем нам предстояло перейти на новую версию формата фискальных документов (ФФД) 1.05. Изменения копеечные, но я до сих пор содрогаюсь от воспоминаний событий этого обновления.

    Исследование вопроса показало, что необходимо добавить всего два параметра в передаваемые значения: предмет расчета (payment_object, payment_subject) и способ расчета (payment_method, payment_mode). Для нашего единственного товара, балла Антиплагиат, указать эту пару параметров ничего не стоило. Вот схема простого плана для достижения цели «Перейти на поддержку ФФД v1.05»:
    1. Доработать сайт, чтобы он передавал пару новых констант в запросах;
    2. Проверить с агрегатороми, что они все это понимают и принимают;
    3. Переключить в Атоле формат ФФД на версию 1.05;
    4. … Здесь творится магия...
    5. Profit!!!


    Параметры не меняются во времени и ни от чего не зависят, задал один раз — и все, халява. Так думали, на деле все оказалось вообще не так и непросто… Что же могло пойти не так?
    1. Отдел разработки доработал сайт Антиплагиата, мы выкатили его в прод. Проверили с нашей техподдержкой и спецами обоих агрегаторов, что все работает и новые данные передаются верно.
    2. В процессе изменения у одного из агрегаторов увидел новую для себя информацию: значение поля «сайт» должно посимвольно совпадать со значением, прописанным в Атоле (WTF1 — зачем требование этого совпадения, ведь есть ИНН и всякие другие вещи?) Как оказалось впоследствии, это очень важное значение.
    3. Хорошо, давайте поменяем. В Атоле на одной странице в личном кабинете находится поле с адресом сайта и галка о переходе на версию ФФД 1.05. Отлично! Меняю сайт на www.antiplagiat.ru (убрал http, который там стоял раньше, добавил www) и ставлю галку о переходе на ФФД версии 1.05. Три рабочих дня на изменение (WTF2 — неужели там инженер лично ходит и прошивку кассы меняет?)! Нууууу ок. Пока выставлю такие же значения сайта на агрегаторах. Поменял. Все, ждём смены на 1.05.
    4. На следующее утро получаю информацию, что чеки не выбиваются. Атол управился быстрее трех рабочих дней и поменял версию ФФД, а вот адрес сайта не поменял: antiplagiat.ru (WTF3 — ну как так-то?! Сайт тоже руками меняют где-то?). РК при смене адреса сайта сама тихо дописала «http://»: www.antiplagiat.ru (WTF4 — хотел я, чтобы в чеке было поменьше и без протокола, но вот из-за одного агрегатора не получится). ЯК вроде молодцы, все сработало как надо www.antiplagiat.ru. Итого — чеки не выписываются ни у одного из агрегаторов, потому что везде разное название сайта. А ведь я специально накануне делал их одинаковыми!
    5. Ругаюсь со всеми по телефону, Атол — красавцы, у них одна такса на любой запрос: 3 рабочих дня. Отключаю РК, потому что у них нельзя сменить сайт на тот, что прописан сейчас в Атоле, потому что сайт должен быть с http или https. Меняю в ЯК сайт на такой, как сейчас в Атоле (благо там быстро меняется и нет требования http). Ура, чеки начинают выписываться! Атол оказался мотивирован моим спичем по телефону и за полчаса меняет сайт на www.antiplagiat.ru (такой формат подходит РК). В этот момент перестает работать выбивание чеков на ЯК, т.к. там старый сайт прописан. Меняю через личный кабинет, не меняется, звоню в ТП, они меняют. Включаю РК.
    6. Фух, вроде заработало везде. Осталось разобраться с не выписанными чеками. Их несколько сотен. РК — по просьбе с телефона прогоняет все свои с новым значением сайта, они проходят. ЯК:
      Кот нашей сотрудницы
      Объяснение: мы отправили чек в Атол, он нам вернул, мол, чек неправильный. Мы у себя эту информацию сохранили и теперь ничего с ним сделать нельзя (WTF5 — это меня до сих пор убивает, как будто у них система не своя). 29 декабря — рабочая суббота (WTF6 — но тут уже просто по привычке, декабрь выдался удачным на боль, вспомните предыдущую статью, действие с облаками разворачивается параллельно), не лучший день для разбирательств. Что делать с не выбитыми чеками, будем думать уже в январе.
    7. Все отлично работает, со спокойной душой идем отмечать Новый год. 29 декабря, в 20 часов, вероломно, без объявления войны, ЯК меняет адрес сайта на другой. Чеки через них перестают выписываться.


    Почему они так сделали, объяснить они не смогли. Рассказывали что-то про письмо из Атола. Видимо, эта пара хотела сделать как лучше. Атол позаботился о тех, кто был не в курсе этого требования, поскольку адрес сайта в агрегаторе платежей и кассе не совпадал. Только данные, видать, были старыми, как минимум от утра 29 декабря.

    На утро 10 января имеем кучу писем в ящике с сообщениями от ЯК об ошибках выбивания чеков. Отличное начало года! Косяк признали и сами (!) переотправили эти чеки в Атол (ну могут же, когда хотят). Кроме этого случая, переотправить чеки ЯК не удавалось больше ни разу. Наоборот, они меня убеждали, что это невозможно! Что надо сделать, чтобы чек все-таки выписать? Правильно, вбить его руками! В Атоле мы попадаем на страницу с десятком полей, которые надо заполнить. Заполнил, ну хорошо, один чек выбил. В следующем чеке надо все заполнить тем же самым (кроме пары полей) заново!
    У нас есть куча писем с ошибками, надо выбить чеки. Написали скрипт, который берет письма от ЯК и по ним выбивает чеки в Атоле. Поставили на автомат. Мелочь, но если чек не выбить, то это нарушение закона. Пришлось разбираться, как все это устроено в Атоле. Почему ЯК не может сделать переотправку чеков на своей стороне — непонятно. Скрипт лежит в нашем недавно созданном публичном репозитории на Github.

    Противоречивая Яндекс.Документация


    Документации в ЯК много, она с красивыми картинками и скриншотами. Казалось бы, используй да радуйся. Давайте посмотрим, что же написано про взаимодействие с кассами:


    Скриншот сделан 30.10.2019.

    На шаге 5 иногда Атол сообщает, что с чеком не все в порядке, и у нас в личном кабинете ЯК появляется платеж со статусом «Принят», но без чека. Это потому что выбран рекомендованный способ отправки чеков «За 3 дня».


    Настройки онлайн-кассы, вариант «С нашей помощью». Скриншот сделан 30.10.2019.

    И снова 5-ый пункт, описание процесса которого работает не совсем так, как описано. Нажатие кнопки в личном кабинете ничего не меняет в статусе чека (консультировались с техподдержкой, она подтвердила). Чек по-прежнему остается не выбитым. Его можно выбить вручную. Может быть выбрать «За 5 минут»? Посмотрим что написано в справке в личном кабинете.


    Скриншот из личного кабинета.

    Оказывается, что для нас способ «За 3 дня» не просто рекомендованный, он обязательный!

    Выводы


    Атол. Автоматизировано далеко не все, многое делается руками. Видно, как медленно, но верно богатеет интерфейс личного кабинета. Стандартная такса на любое изменение — 3 рабочих дня. Иногда предлагают вбивать чеки за нас, но почему-то так и не вбили ни разу. Для того чтобы ускорить решение запроса в ответ на сообщение о создании тикета, надо отправить ИНН организации (даже если оно уже есть в теле обращения), у них автоматизировано повышение приоритета, видимо, таким способом.

    Яндекс.Касса. Не могут переотправить чек в случае проблем на стороне Атола. Другие могут, они нет, но на самом деле могут, но, наверное, не хотят. Пришлось писать скрипт за них. Документации много, и, наверное, поэтому она противоречива.

    Робокасса. Зачем-то улучшают веб-адрес магазина, при этом делают это совершенно незаметно. В остальном — милые ребята.

    ФНС. Оригинальное время внедрения изменений. Не до конца продуманные законы и требования. Сейчас электронные кассы тождественны обычным физическим. Если в офлайн магазине платеж и выбивание чека делает одно устройство и эти две процедуры проходят практически как единая транзакция, то в онлайн мире все не так. Платеж принимает один сервис, а вот чек выбивает другой. По аналогии с офлайн кассами на выбивание чека дается не более 5 минут. Подробнее можно почитать, например, тут.

    Выученные уроки


    Вроде мелочи, но из-за этих мелочей пришлось потратить около 60 часов на вышеописанное и разработку/отладку скрипта. Даже два крупных национальных агрегатора платежей совместно с крупным провайдером KaaS не могут сделать сервис, в котором обычный пользователь будет получать услугу, минимально разбираясь в предметной области. Очень печально, что при любом, даже пустячном изменении, в формате приходится быть начеку и, в итоге, подпирать все собственноручно написанными костылями.

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

    Чем заниматься дальше? На горизонте замаячила окупаемость проекта оптимизации выбора агрегатора в зависимости от выбранного пользователем способа платежа. Возможно, на этом фоне можно будет подключиться еще к нескольким провайдерам (ожидаю новые «OMG! Ну почему это так сделано?!» и поводы для статей про боль). Из-за сильной неравномерности объема платежей в течение года может получиться интересная задача оптимизации сбора нескольких рюкзаков: какого пользователя куда отправить оплачивать, чтобы минимизировать потери на комиссиях и скидках за объемы платежей в месяц. Если у кого-то был такой опыт и стоит ли овчинка выделки, прошу поделиться в комментариях!
    • +14
    • 2,2k
    • 2
    «Антиплагиат»
    57,07
    Компания
    Поделиться публикацией

    Комментарии 2

      0
      Еще один способ. По мне так гораздо дешевле чем любой сервис онлайн-касс.
        0

        Вполне рабочая альтернатива. А как у вас платежи принимаются? Пользуетесь каким-то агрегатором или что-то своё сделали?
        Ваш способ сложно применить, если нет серверной и все в облаках.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое