Статья малополезная для стран СНГ, но может вам понравится


image

Я в последнее время много работаю с API различных банков. Причина тому одна — новая директива под названием PSD2(Revised Payment Service Directive). О ней и расскажу.

Вступление


Началось все с компаний вроде PayPal. Вы регистрируйтесь на сайте PayPal, он в свою очередь подхватывает вашу кредитную карту, снимает с неё деньги когда надо, накапливает у себя на счетах денюжки, а потом в назначенный день отгружает всю энную сумму денег на счет онлайн магазина. Таким образом ваша кредитная карточка остается в безопасности, онлайн магазин экономит деньги, а значит и вы экономите деньги. Вроде всем хорошо.

С другой стороны возникает логичный вопрос, не теряет ли магазин клиентов, которые не имеют кредитную карту или не хотят её заводить для единичных покупок в интернете?!

И вот тут на сцену выходят компании поменьше, которые берут на вооружение не вашу кредитную карту, а ваш банковский аккаунт. Даже не так, ваш онлайн банкинг! Теперь вам не нужна никакая кредитная карта, вам не нужен никакой PayPal, вам даже не нужно делать никакие переводы. Вы просто вводите ваши логин и пароль на сайте магазина, а всё остальное за вас сделает посредник.

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

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

В общем, по просьбам трудящихся и трудящихся в этих платежных системах-посредниках, совет Европы пошел навстречу и выпустил директиву, обязывающую банки создать API, которое позволяло бы всё тоже самое, что ранее делали с онлайн-банком, но теперь только с помощью запросов. Банки, конечно, сильно расстроились, у них и без этого регуляторов хватает и правил для следования, но делать нечего — надо создавать.

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

Саботируют мастерски. Некоторые просто не переводят свою документацию. То есть она как бы есть, но её как бы и нет, потому что никакой Гугл не поможет перевести 90 страниц испанского технического непонятно чего. Испанцы вообще живут в своём вакууме и не признают, что есть какой-то международный язык, кроме испанского. Еще многие выкладывают документацию в виде файла YAML, в котором ни одного комментария нет, что куда посылать не понятно, названия полей никаких стандартов не имеют и что там подписывать каким сертификатом или не подписывать ничего — не разберешь.

Верх саботажа — это страница документации, где указаны только endpoint-ы API, но никаких header или body с описанием нет в принципе. Не указано даже POST или GET запрос это. Конечно, за такими ребятами бегает юридический отдел, говоря, что жалобы в контролирующий орган может не повлечет за собой штраф, но в дальнейшем может привести к излишней внимательности к этому банку. В большинстве случаев это помогает, но время то идёт.

Поныл о гадских банках, теперь можно и о самом законе написать.

Что такое PSD2


Это директива выпущенная европейской комиссией для улучшения рынка онлайн платежей, а также увеличения безопасности этих самых платежей.

На самом деле был еще PSD, но он регулировал просто платежи между государствами в ЕС, никак не регламентируя онлайн-платежи. Хотя какие онлайн-платежи в 2007м то.

За основу взяли упомянутый PSD и прикрутили к нему десяток глав с красивым названием «open banking» (открытый банкинг). Этот десяток глав и стал головной болью для банков и радостью для платежных систем(это в теории, на самом деле банки сделали головную боль и платежникам тоже, чтоб самим не страдать.)

PSD2 также регулирует безопасность клиента, говоря как и каким способом запросы должны передаваться, какие сертификаты использовать и что можно запрашивать у банка, а что нет. То есть, для платежа можно запросить имя и фамилию, а также список аккаунтов пользователя, но больше вы ничего не получите, даже если сильно попросите.

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

Но и тут банки вольны добавлять свои слои безопасности. Например, банки разрешают вводить данные клиента только на страницах банка. То есть вам в любом случае придется переправить пользователя на страницу банка, а потом вернуть назад к себе(ладно, тут тоже Селениум может выручить, но теперь банки могут вам послать пламенный привет и запретить доступ к их API, если учуют неладное.).

Ладно, теперь об очевидных, и не очень, плюсах


Как я уже там выше сказал, безопасность выросла в разы. Теперь платежные системы не выдумывают велосипедов и не взаимодействуют с разношерстными API банков, а подключаются к более-менее стандартизированным API, так что с безопасностью все стало хорошо.

Теперь, если вы платежная система, например, в Эстонии, то вы можете использовать API европейских банков, чтобы принимать платежи от европейских клиентов. И для этого вам надо только зарегистрироваться как финансовый институт, прочитать около сотни документаций и внедрить всё это в вашу систему. При этом большинство документаций будут на английском, к тому же у вас будет более-менее внятная поддержка от банка.

А еще, если вы банк вне ЕС, то вы можете присоединиться к этому открытому банкингу и ваши клиенты смогут платить с европейскими платежными системами.

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

Теперь о минусах


Директива есть, а API в рабочей его версии — нет. Ситуация достаточно распространенная даже сейчас, спустя год после того, как банки начали работы над внедрением(а, ну да, должны были начать работу...).

API не полностью унифицированы, как и процесс платежа. То есть нельзя создать что-то универсальное под все банки, приходится подгонять функционал для запросов под каждый банк в отдельности, что сильно замедляет разработку.

Даже один и тот-же банк может иметь разные API в разных странах. Потому что каждая страна имеет свои регулирующие органы, которые добавляют какие-нибудь «регуляции» в процесс. Там надо дополнительные токены, там надо трижды авторизовывать пользователя, там еще что-то…
Ну и теперь ваш бизнес платежной системы зависит по полной от банка, сервера которого могут внезапно лечь, а пока вся бюрократическая машина отработает и запустит их снова, могут пройти и сутки, и двое, что лишит ваш приличного заработка. При этом предъявить что-то банку вы не сможете.

В общем-то всё.

Комментарии (22)


  1. smarthomeblog
    19.09.2019 19:23
    +2

    Стремно как-то отдавать данные для доступа к онлайн банкингу какому-то посреднику. Пусть и сертифицированному. Тем более, что во многих банках для перевода на не свой аккаунт требуется пин + токен, генерируемый устройством. И что в таком случае Селениум будет делать?

    А насчет унификации API. А где эта унификация присутствует в платежных провайдерах? У все свои велосипеды более или менее геморройные. Так что и банками придется писать для каждого свою интеграцию.


    1. aPiks Автор
      19.09.2019 19:36

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

      Сколько платежных провайдеров? Swift, Visa, MasterCard, American Express, Union и допустим еще один национальный. Всё. При этом они уже давно интегрированы. А теперь представьте, что надо интегрировать за год более сотни API банков, при этом где 20% — это неработающие API. То есть вам надо тратить кучу времени на переписки и перезвоны с сотрудниками банков и тд.


      1. smarthomeblog
        19.09.2019 20:34

        Тут ИМХО не так важен факт сотрудничества магазина с кем-то, как полный доступ ко всем счетам. Если пользоваться карточкой, то можно использовать отдельную карту с фиксированной суммой на ней. Даже если украдут, не страшно. А вот даже знать балансы все счетов, все транзакции. Да еще через не сертифицированные костыли — ну на любителя конечно. Но я бы не стал пользоваться категорически.
        А насчет API. Если есть мобильное приложение, то и API имеется. Причесать его, задокументировать и вперед. Зато будет полный доступ к тому, кто и что через API может делать и сколько раз.


        1. aPiks Автор
          20.09.2019 18:51

          Данные никакому магазину не идут. Магазин вообще никак не участвует в платеже. Участвует только пользователь и платежная компания. Причем собираемые данные жестко регламентированы и контролируются соответствующими органами. То есть приходят люди раз в 3 месяца и проверяют всю базу данных, записи и код. Если что-то вскроется — компании конец. Платежная компания никаких данных не хранит и не собирает. Это запрещено и отображено в пользовательском соглашении. Кроулер заходит на сайт, осуществляет платеж и всё. Сессия удаляется, куки удаляются, даже инстанс вместе с браузером удаляется. В ЕС пекутся о безопасности и защите персональных данных очень неплохо.


    1. TheGodfather
      19.09.2019 20:06

      Именно, когда я тут (в Германии) первый раз при онлайн-покупке увидел формочку на сайте магазине аля «Вот здесь укажите ваш банк, вот сюда введите ваш логин от интернет-банка, вот сюда пароль» это был шок — дыра такая, что жутко. Но местные пользуются и радуются, хз почему. Но надо заметить, что это не первая такая дыра, которую тут замечаешь. В РФ все на порядок секьюрнее и это не секрет для тех, кто реально пробовал поработать с разными банками и\или пожить в разных странах.


      1. eumorozov
        19.09.2019 21:19

        В РФ все на порядок секьюрнее и это не секрет для тех, кто реально пробовал поработать с разными банками и\или пожить в разных странах.

        Забавный факт: в Камбодже один из местных банков позволяет в приложении сгенерировать код для определенной суммы, затем можно подойти к любому банкомату данного банка и снять эту сумму введя код.


        Не знаю, для чего это сделано — возможно, чтобы можно было переводить деньги родственникам в провинциях, но мне кажется, что это также должно спасать от скиммеров на банкоматах (а они встречаются в Камбодже нередко, да и в других странах — например, в Непале несколько лет назад орудовала банда румынцев со скиммерами).


        1. websurfer
          20.09.2019 13:48

          Зачем же Камбоджа. В Израиле тоже есть такая опция.


        1. aPiks Автор
          20.09.2019 18:57

          Это сделано, чтобы можно было пойти в клуб, например, и не брать с собой кошелек. Подошел к банкомату, создал в приложении код, снял наличку, код инвалидировался. Код действует 30 минут, и он одноразовый. Плюс у него есть лимит на снятие. Обычно суммы небольшие, до 50 евро. Аналогично, можно ребенку скинуть код, чтобы он с банкомата снял, если вдруг забыли дать карманных денег. Ну или если вы сомневаетесь в надежности банкомата, то можно снять денег, без боязни скиммеров и тп. Сценариев много для этого, считаю очень удобная штука. А проблемы с безопасностью я тут не особенно вижу. Вариант того, что кто-то успеет снять деньги до вас, очень маловероятен. Надо получить доступ к телефону, постоянно мониторить дисплей, успеть добежать до банкомата, пока не сняли деньги кто-то другой… ну так себе. Затраты будут выше, чем профит.


      1. 0mogol0
        20.09.2019 00:13

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

        Ну во первых, всё же скорее всего доступ к вашему инет банку получал не магазин, а система посредник типа Sofort'a, которая никаких ваших данных магазину не передавала, а просто лишь подтверждала, что от вашего имени выполнен перевод. При этом система имела кучу сертификатов от местных бюро типа TUV.
        Во вторых, риск ИМХО не выше чем у пейпала. Насколько я понимаю, данные системы не сохраняют ваш пароль и по умолчанию разлогиниваются их сессии, так что если отбросить вариант злономеренных действий компании, для хакера вариантов поживиться — не больше (и не легче) чем от взлома пейпала. ИМХО, проще банки напрямую ломать или заниматься традиционным фишингом.


      1. aPiks Автор
        20.09.2019 11:50

        Если бы в РФ всё было на порядок секьюрнее, на Хабре не появлялись бы посты о покупке личных данных пользователей со всеми транзакциями, адресами, оформленными кредитами, мобильными телефонами и тд. И о переоформленной недвиге с помощью полученного без присутствия клиента электронного ключа.

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


        1. TheGodfather
          20.09.2019 13:35

          А откуда вы знаете, что на местных хабрах не появляется «постов о утечке личных данных»? Вот то-то и оно. Суслика не видишь, а он есть. Новости о штрафах про GDPR вполне появляются как минимум, глобальные утечки мирового масштаба случаются, а местячковые форумы и базы данных конечно не докатываются до русского хабра и не-местному их не найти.
          Ну вот дело именно в том, что нет этого вот «необходимо авторизовывать это действие для каждого раза». Ну нету — вбили пароль и через пару дней с вас деньги магически списались.
          Равно как и любая SEPA-mandated платежка — никто вас не спрашивал никаких данных, кроме номера счета (который как бы и так открыт и не особо секретный). И номера счета достаточно, чтобы с вас списать деньги. Никаких дополнительных авторизаций, в этом-то и дело.


          1. aPiks Автор
            20.09.2019 14:11

            Я местный и ничего такого на местных хабрах не пишут. Глобальные утечки мирового масштаба — это другое дело.
            Штрафы по GDPR в основном получают компании, которые неверно истолковали требования. При этом банки по этому закону крайне редко, потому что у них и так требований выше крыши, им и без GDPR запрещено делиться любой информацией о вас. Это называется банковской тайной. При этом утечки бывают, но это редкость. Чаще всего — это социальный инжиниринг, а не прямая продажа, как в России.
            Для того, чтобы использовать SEPA вы должны получить письменное разрешение от пользователя на операции. При чем вы должны указать когда, сколько и каким образом будут списываться средства. При этом пользователь может в любой момент отменить «подписку» и оспорить платеж в течении 180 дней. Если выявится, что вы не давали письменного разрешения на эту операцию — банк обязан вернуть деньги на ваш счет. Кроме того, для проведения SEPA операций вам, как организации, необходимо специальное разрешение, без которого ни один банк не будет утверждать подобные операции.
            Не всё так просто как вы думаете.


  1. AEP
    19.09.2019 19:54
    +1

    А в чем преимущество предлагаемого безобразия по сравнению с тем, чтобы обязать все банки бесплатно выпускать виртуальные дебетовые карты?


    1. 0mogol0
      20.09.2019 00:15
      +1

      Эээ, а процентик карточной системе кто платить будет?
      Вы же в курсе, что банковские переводы в Европе бесплатные и выполняются в течении одного рабочего дня. А вот комиссии по банковской карте для продавцов никто не отменял…


    1. aPiks Автор
      20.09.2019 11:55

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


  1. 0mogol0
    20.09.2019 00:08

    Хм… работал на проекте по внедрению этой директивы в банке в Германии. Не очень понял жалобы на отсутствие единого API.
    Да у каждого банка особенно в разных странах могут быть свои особенности, но вроде сам базовый API определен в стандарте берлинской группы, где представлены и сценарии взаимодействия, и параметры обмена. Правда вышло уже несколько версий, где реализации отдельных функций серьезно менялись, но в принципе имея базовый документ — в остальном разобраться не должно быть большой проблемой.


  1. Kanut
    20.09.2019 12:17

    С другой стороны возникает логичный вопрос, не теряет ли магазин клиентов, которые не имеют кредитную карту или не хотят её заводить для единичных покупок в интернете?!

    PayPal отлично работает и без кредиток, с обычными счетами. Как минимум у нас точно.


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

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


    Плюс какая-никакая стандартизация, то есть меньше расходов на адаптацию/подключению.


    P.S. А то, что отдельные банки не хотят всего этого и сделали какие-то странные и не особо удобные/работающие решения, это да, есть такой момент. Но думаю что рынок их всё равно вынудит нормально всё сделать. Вопрос только когда.


    1. aPiks Автор
      20.09.2019 12:26

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


      1. Kanut
        20.09.2019 12:41

        Там речь шла скорее о том, что было раньше. PayPal начал работать со счетами только недавно

        Может это от страны зависит. У меня PayPal уже давно и он сразу был привязан к счёту.


        Я этого не указал в тексте, но мне не известны случаи взломов банковских счетов со стороны платежных провайдеров.

        Может быть я что-то неправильно понял но PSD2 вроде бы прописывает обязательную двухступенчатую аутентификацию и для обычного онлайн-бэнкинга. И кстати просто SMS вроде бы теперь больше не прокатывает.


        П.С. Особо не разбирался и почти вся информация получена из инфо-брошюры банка и новостей на эту тему. Так что если я что-то неправильно понял, то с удовольствием почитаю объяснения :)


        1. aPiks Автор
          20.09.2019 13:30

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


          1. Kanut
            20.09.2019 13:35

            Просто у меня все банки у которых вторым фактором были смски, их в связи с PSD2(как минимум по их заявлениям) поубирали и заменили на другие варианты.


  1. AlexPu
    21.09.2019 14:05

    Все правильно (хотя проблем и бонусов у PSD2 поболее будет), однако… PSD2 никогда (даже на стадии обсуждения) не выдвигала требований к стандартизации API — т.е. «должны предоставить», а вот как именно это уже на усмотрение кредитных организаций.

    Меня лично это возмущает точно так-же как и коллегу, которые написал эту статью. Но с другой стороны, я как оптимист рассматриваю эту директиву как первую в череде подобных