Как стать автором
Обновить

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

ЗакрепленныеЗакреплённые комментарии

Здравствуйте.

Мы дорабатываем наш сервис, а обратная связь от пользователей нам помогает это делать. Спасибо, что так подробно все описали. Мы уже провели работу и обновили документацию: https://www.tinkoff.ru/kassa/dev/payments/

Как разработчик реализации клиента на Flutter могу сказать пару вещей:

  1. Все ключи не хранятся прямо в нем, хотя такая возможность есть, как и возможность passwordless режима (в этом режиме не все запросы доступны) или подпись запроса со стороны. Реализация писалась так, чтобы её можно было использовать как для мобилок, так и для сервера.

  2. Документация у них и вправду плохая, хотя раньше была pdf версия (сейчас не смог найти) которая была полная по сравнению с тем что есть на сайте.

  3. CollectData нужен, так как 3DSv2 имеет два пути проверки. https://habr.com/ru/articles/445394/

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

По поводу второго пункта:

  1. Почему работает без него?

  2. Почему в самой реализации вашего клиента указан неверный роут конфирмации?

  3. Для чего он вообще нужен?

Такого сценария в вашем репозитории не описано

Да, не описан, но не зря мы его делили на два пакета. И да такой сценарий рабочий, это по сути фасад над api.

CollectData нужен для проверки клиента при проверки 3DSv2 (если карта поддерживается) через мета данные. Если клиент подтверждается, то клиенту нет необходимости в прохождении полного флоу проверки (ввода кода из смс). Если клиент не подтверждён, то он проходит полный флоу проверки, т.е. по 3DSv1.

Почему работает без него?

Надо спросить у Тинькофф, но предположу что это не обязательное условие для проверки.

Почему в самой реализации вашего клиента указан неверный роут конфирмации?

А какой правильный? И вы точно проверяли работу клиента на Flutter?

А какой правильный? И вы точно проверяли работу клиента на Flutter?

WebViewMethods.complete3DSMethodV2 = 'Complete3DSMethodv2'

Хотя должен быть 'Complete3DSMethodV2'. Протестируйте в ручном режиме.

Да, не описан, но не зря мы его делили на два пакета. И да такой сценарий рабочий, это по сути фасад над api.

При всем уважении, использовать Flutter на сервере это очень сомнительная идея. В любом случае спасибо за вашу работу!

как и возможность passwordless режима

На сколько я помню, 3DS V2 не будет так работать.

При всем уважении, использовать Flutter на сервере это очень сомнительная идея.

А никто не говорить про Flutter на сервере ;) Там первая библиотека которая работает с api написана на чистом dart'е, а dart можно спокойно поднять на сервере.

Хотя должен быть 'Complete3DSMethodV2'

Хм, похоже поменяли, спасибо передам чтобы проверили.

На сколько я помню, 3DS V2 не будет так работать.

Будет, passwordless режим на это не влияет.

Не знаю как именно у этого ACS реализовано, но обычно collectData позволяет проверить устройство. Например, реализовать stay signed in. Но если этого нет - ничего страшного. Просто пользователь будет заново аутенфицирован.

Да, конечно, скорее всего так и есть, и оно именно для этого и используется, но как этим пользоваться в случае с Тинькофф, не совсем понятно.

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

  1. Формирование запроса на оплату со своим идентификатором заказа

  2. Отправка запроса на оплату в API для получения ссылки на платежную форму и идентификатор процесса оплаты (и его сохранение)

  3. Перенаправление пользователя на платежную форму

  4. Получение статуса оплаты при возвращении пользователя на success URL и/или проверка оплаты в бекграунде по идентификатори процесса оплаты

  5. PROFIT

Также, как я вижу, вся информация у них представлена по ссылке для обычных платежей и реккурентных платежей https://www.tinkoff.ru/kassa/develop/api/autopayments/

Какие возникли трудности при использовании данной документации?

Tinkoff support reply detected.

Похвальное понимание теории, однако реальность жестоко отличается от воображений о том как что должно работать и как оно работает на самом деле. Могу по пунктам вам разобрать ваш комментарий:

не содержит необходимости передавать данные карты в открытом 

Откуда вы это взяли вообще представления не имею

Отправка запроса на оплату в API для получения ссылки на платежную форму и идентификатор процесса оплаты (и его сохранение)

ну отправьте запрос на карту Мир с самопильного клиента, потом напишите результат.

Получение статуса оплаты при возвращении пользователя на success URL и/или проверка оплаты в бекграунде по идентификатори процесса оплаты

Упустили шаг Submit3DSAuthorization. В документации он не описан корректно

Если у вас все так хорошо и отлично получается то пост просто не для вас, листайте дальше ?‍♂️

Да, я в некоторых пунктах рассказал теорию, не смотря на практику. И зачем Тиньков так усложнил 3DS - фиг знает.

Претензию снимаю. Полез в доку смотреть раздел обычных "Платежей", на которые вы указали и там есть всё про передачу платежных данных карты.

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

А почему у вас есть нужда в двухстадийном формате оплаты, если вы описываете реккурентные платежи? У вас есть сертификация PCI DSS для внедрения собственной платежной формы или как?

По тексту поста видно что вы используете двустадийный способ оплаты с первичной блокировкой средств и последующим подтверждением оплаты и фактического списания средств. Почему вы выбрали конкретно этот вариант?

А почему у вас есть нужда в двухстадийном формате оплаты, если вы описываете реккурентные платежи

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

У вас есть сертификация PCI DSS

Сейчас очень непросто получить сертификацию PCI DSS, но мы работаем в этом направлении, и соблюдаем стандарты качества - храним пользовательские данные карт в обфусцированном виде без CVV, и передаем в зашифрованном от клиента к серверу.

Почему вы выбрали конкретно этот вариант?

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

Спасибо за детальный ответ

Здравствуйте.

Мы дорабатываем наш сервис, а обратная связь от пользователей нам помогает это делать. Спасибо, что так подробно все описали. Мы уже провели работу и обновили документацию: https://www.tinkoff.ru/kassa/dev/payments/

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории