Яндекс касса тестовая карта – Тестирование — Прием оплаты API Яндекс.Кассы

Тестирование — Прием оплаты API Яндекс.Кассы

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

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

У тестового магазина свой идентификатор и секретный ключ с префиксом test_. И то, и другое можно посмотреть и получить в личном кабинете Яндекс.Кассы.

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

Вы можете протестировать все возможности API для следующих способов оплаты:

  • оплата банковской картой:
  • оплата из кошелька в Яндекс.Деньгах.

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

Вы можете проверить оплату банковскими картами разных типов:

НомерТип карты
5555555555554477MasterCard (с 3-D Secure)
5555555555554444MasterCard
6759649826438453Maestro
4111111111111111Visa
4175001000000017Visa Electron
370000000000002American Express
3528000700000000JCB
36700102000000Diners Club
Если вы хотите проверить значение параметра

cancellation_details

при неуспешных платежах, используйте тестовые банковские карты.
Номер картыПричина отмены платежа
5555555555554592 3d_secure_failed
5555555555554535call_issuer
5555555555554543card_expired
5555555555554568fraud_suspected
5555555555554527general_decline
5555555555554600insufficient_funds
5555555555554618invalid_card_number
5555555555554626invalid_csc
5555555555554501issuer_unavailable
5555555555554576payment_method_limit_exceeded
5555555555554550payment_method_restricted
Отмена транзакции Яндекс.Кассой (yandex_checkout)
Номер картыПричина отмены платежа
5555555555554584country_forbidden
5555555555554634fraud_suspected
Оплата из кошелька в Яндекс.Деньгах

Для тестирования оплаты из кошелька в Яндекс.Деньгах

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

Перед оплатой вам необходимо выйти из аккаунта своего кошелька в Яндекс.Деньгах. Быстрый стартОсновы проведения платежейНеуспешные платежи

kassa.yandex.ru

Демо-среда Яндекс.Кассы — Yandex Technologies

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

Адрес для отправки параметров: https://demomoney.yandex.ru/eshop.xml

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

Important. Демо-среда выводится из эксплуатации. Для проверки интеграции используйте тестовый магазин.

Подготовка

Для тестирования оплаты вам понадобятся shopId настоящего магазина и его scid для работы с демо-средой. Их нужно получить у вашего менеджера Яндекс.Кассы. Если у вас несколько магазинов, для тестирования выберите один из них и используйте его параметры.

Проверка оплаты с использованием платежного модуля CMS

Чтобы протестировать оплату, в настройках платежного модуля Яндекс.Кассы:

Инструкции по установке и настройке платежного модуля вы можете найти на сайте Кассы, в разделе Настройка CMS, фреймворка или CRM, или запросить у разработчиков вашей системы.

Проверка оплаты с помощью платежной формы
  1. Создайте пустой файл с расширением *.html.

  2. Скопируйте в него пример кода нужной вам платежной формы.

  3. Поменяйте значения параметров shopId и scid на значения shopId и scid для демо-среды .

  4. Сохраните файл.

Пример формы с выбором способа оплаты на сайте магазина

<html>
<head>
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Тестовая платежная форма</title>
</head>
<body>
<form action="https://demomoney.yandex.ru/eshop.xml" method="post">
<!-- Обязательные поля -->
<input name="shopId" value="151" type="hidden"/>
<input name="scid" value="363" type="hidden"/>
<input name="customerNumber" value="100500"/>
<input name="sum" value="100">
Способ оплаты:<br>
<input name="paymentType" value="PC" type="radio">Оплата из кошелька в Яндекс.Деньгах<br>
<input name="paymentType" value="AC" type="radio">Оплата с произвольной банковской карты<br>
<input name="paymentType" value="GP" type="radio">Оплата наличными через кассы и терминалы<br><br>
<input type="submit" value="Заплатить"/>
</form>
</body>
</html>

Пример формы с выбором способа оплаты на стороне Яндекс.Кассы

<html>
<head>
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="width=device-width, initial-scale=1" name="viewport">
<title>Тестовая платежная форма</title>
</head>
<body>
<form action="https://demomoney.yandex.ru/eshop.xml" method="post">
<!-- Обязательные поля -->
<input name="paymentType" value="" type="hidden">
<input name="shopId" value="151" type="hidden"/>
<input name="scid" value="363" type="hidden"/>
<input name="sum" value="100"/>
<input name="customerNumber" value="100500"/>
<input name="cps_phone" value="79110000000"/>
<input name="cps_email" value="[email protected]"/>
</form>
</body>
</html>

Проведение тестовой оплаты

Шаг 1. Перейдите к оплате.

  • Если вы используете платежный модуль, сделайте заказ так же, как это будут делать ваши клиенты, и перейдите к оплате.

  • Если вы создавали платежную форму вручную, то откройте html-файл в браузере, выберите способ оплаты и нажмите Заплатить. Способ оплаты выбирается на сайте магазина или на стороне Яндекс.Кассы (это зависит от сценария оплаты).

Шаг 2. Оплатите заказ тестовой банковской картой, из тестового кошелька в Яндекс.Деньгах или через тестовый терминал.

Шаг 3. Если ваш магазин получает уведомления по HTTP (подключен по схеме HTTP-протокол или Платежный модуль), проверьте, что в вашей системе заказ помечен как оплаченный. Если ваш магазин получает уведомления на email (подключен по схеме Email-протокол), проверьте, что пришло письмо с информацией о платеже.

Оплата банковской картой

Номер карты: 4444 4444 4444 4448

Действует до: любой год и месяц в будущем

Код CVV: 000

Оплата из кошелька в Яндекс.Деньгах

Вы можете открыть кошелек в демо-среде на странице регистрации: https://demomoney.yandex.ru/reg.

Введенный номер телефона будет использован для платежной авторизации при совершении платежей из кошелька.

Регистрация демо-кошелька

1. Перейдите на demomoney.yandex.ru.

2. Если вы авторизованы, нажмите на ваш логин на Яндексе в правом верхнем углу страницы, затем на Выйти в выпадающем меню.

3. Вы попадете на страницу входа в тестовый кошелек Яндекс.Денег. Нажмите Открыть кошелек.

4. Заполните данные для регистрации тестового кошелька.

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

Авторизация

1. Перейдите на demomoney.yandex.ru. Если вы авторизованы, нажмите на ваш логин на Яндексе в правом верхнем углу страницы, затем на Выйти в выпадающем меню.

2. Вы попадете на страницу входа в кошелек Яндекс.Денег. Нажмите Войти.

3. Во всплывающем окне укажите логин и пароль своего тестового кошелька и нажмите Войти еще раз.

4. Готово — вы авторизованы.

Пополнение тестового счета

1. Авторизуйтесь и перейдите по ссылке https://demomoney.yandex.ru/shop.xml?scid=50215.

2. Откроется форма пополнения. Введите номер тестового кошелька и сумму. Нажмите Заплатить.

Tip. Чтобы узнать номер своего кошелька, раскройте блок баланса в верхнем правом углу страницы.

3. Готово — счет пополнен.

Оплата через терминал

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

Код придет в смс на указанный телефон. Его нужно ввести на странице https://demomoney.yandex.ru/shop.xml?scid=50215 (пользователь будет вводить этот код в терминале).

Проведение настоящих платежей

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

Если вы не используете платежный модуль или другое готовое решение, в платежной форме замените адрес для отправки параметров на https://money.yandex.ru/eshop.xml, а scid — на настоящий.

Смотрите также

Тестовый магазин

Примеры реализации

Платежная форма

tech.yandex.com

Справочник API Яндекс.Кассы

Описание параметров

Параметры

Описание

Идентификатор платежа.

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

Вложенные параметры

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

10.00

. Количество знаков после точки зависит от выбранной валюты.Код валюты в формате ISO-4217. Должен соответствовать валюте субаккаунта (

recipient.gateway_id

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

Описание транзакции (не более 128 символов), которое вы увидите в личном кабинете Яндекс.Кассы, а пользователь — при оплате. Например: «Оплата заказа № 72 для [email protected]».

Получатель платежа.

Вложенные параметры

Идентификатор магазина в Яндекс.Кассе.

Идентификатор субаккаунта. Используется для разделения потоков платежей в рамках одного аккаунта.

Инициатор платежа или возврата. Инициатором может быть магазин, подключенный к Яндекс.Кассе, (

merchant

) или приложение, которому владелец магазина разрешил  совершать операции от своего имени (

third_party_client

).

Вложенные параметры

Инициаторы

Значение —

merchant

. Тип инициатора.

Идентификатор магазина в Яндекс.Кассе.

Вложенные параметры

Способы оплаты

Значение —

alfabank

. Код способа оплаты.

Идентификатор способа оплаты.

Название способа оплаты.

Логин пользователя в Альфа-Клике (привязанный телефон или дополнительный логин).

Время подтверждения платежа. Указывается по UTC и передается в формате ISO 8601.Время создания заказа. Указывается по UTC и передается в формате ISO 8601. Пример:

2017-11-03T11:52:31.827Z

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

waiting_for_capture

будет автоматически отменен. Указывается по UTC и передается в формате ISO 8601. Пример:

2017-11-03T11:52:31.827Z

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

Вложенные параметры

Сценарии подтверждения

Значение —

external

. Код сценария подтверждения.

Признак тестовой операции.

Сумма, которая вернулась пользователю. Присутствует, если у этого платежа есть успешные возвраты.

Вложенные параметры

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

10.00

. Количество знаков после точки зависит от выбранной валюты.Код валюты в формате ISO-4217. Должен соответствовать валюте субаккаунта (

recipient.gateway_id

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

Признак оплаты заказа.

Возможность провести возврат по API.

Любые дополнительные данные, которые нужны вам для работы с платежами (например, номер заказа). Передаются в виде набора пар «ключ-значение» и возвращаются в ответе от Яндекс.Кассы. Ограничения: максимум 16 ключей, имя ключа не больше 32 символов, значение ключа не больше 512 символов.

Вложенные параметры

Участник процесса платежа, который принял решение об отмене транзакции. Может принимать значения

yandex_checkout

,

payment_network

и

merchant

. Подробнее про инициаторов отмены платежа 

kassa.yandex.ru

Настройки модуля — Инструкция по разработке платёжного модуля Яндекс.Кассы

Интерфейс настроек

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

Блок 1

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

shopId — можно вводить только цифры, ограничений по количеству символов нет.

Секретный ключ — можно вводить цифры и латинские буквы, ограничений по количеству символов нет.

Техническая документация: аутентификация

Блок 2

Этот блок определяет, где будет процесс оплаты — на сайте Яндекс.Кассы или на сайте пользователя.

Блок 3

Чтобы наши общие пользователи могли работать с ККТ через Яндекс.Кассу, вам нужно передавать нам название, цену и НДС товара при каждом платеже. Клиент настраивает отправку данных специальным тумблером.

Блок 4

Адрес для уведомлений генерируете вы: пользователь не может его отредактировать (только скопировать). Пользователю он потребуется только для обращений в службу поддержки Яндекс.Кассы.

Техническая документация: уведомления

Блок 5

Это кнопка, которая включает приём платежей. Если все заполнено верно, после нажатия сообщите об успехе: Настройки сохранены.

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

Блок 1

Если пользователь выбрал На стороне Яндекс.Кассы, разворачивается блок с чекбоксом Назвать кнопку оплаты «Заплатить через Яндекс».

Подробнее о кнопке на сайте Кассы

Блок 2

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

Выбрать сразу оба пункта нельзя. Ничего не выбрать тоже нельзя. По умолчанию отметка стоит На стороне Яндекс.Кассы.

Выбор способа оплаты на стороне Яндекс.Кассы

Блок 3

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

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

Ставка по умолчанию

Это разворачивающийся список из шести ставок НДС: Без НДС, 0%, 10%, 18%, Расчётная ставка 10/110, Расчётная ставка 18/118.

Нужно выбрать одну, по умолчанию указано 10%.

Сопоставьте ставки

Здесь пользователю нужно сопоставить ставки, которые он уже задал в магазине, со ставками, которые Касса передаёт в налоговую.

Цифра слева — это ставка НДС, которую задал пользователь в вашей системе.

Выпадающий список справа — это ставки НДС для чека в налоговую.

Количество строчек зависит от того, сколько ставок НДС пользователь задал в вашей системе. Если пользователь раньше не задавал ставки на сайте, этого блока не будет.

Техническая документация: оплата по 54-ФЗ

Если есть ошибки, подскажите, где они и как их исправить.

Важные моменты

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

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

Тексты для интерфейса

Скопируйте тексты из файла и вставьте в свой интерфейс.

Интерфейс возвратов

Если в вашей системе есть возможность делать возвраты платежей, пожалуйста, используйте этот шаблон для страницы возврата.

Если пользователь включил отправку данных для чеков через Яндекс.Кассу, интерфейс выглядит так:

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

Тексты для интерфейса

Скопируйте тексты из файла и вставьте в свой интерфейс.

Названия, логотипы и описание сервиса

Название сервиса

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

  • подключение к Яндекс.Кассе,

  • заплатить через Яндекс.Кассу,

  • настройки Яндекс.Кассы.

Кавычки ставятся, только если перед названием стоит слово «сервис». Получится так: Сервис «Яндекс.Касса».

Способы оплаты

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

  • Банковские карты — Visa, Mastercard и Maestro, «Мир»

  • Яндекс.Деньги

  • WebMoney

  • QIWI Wallet

  • Наличные

  • Альфа-Клик

  • Промсвязьбанк

  • Сбербанк Онлайн

  • Баланс мобильного — Билайн, Мегафон, МТС, Tele2

  • Кредитование — Заплатить по частям

Логотип

Пожалуйста, используйте логотип Яндекс.Кассы в списке платежных систем, на странице настроек платёжного модуля и в инструкции по настройке.

Правила размещения:

  • ширина поля — две буквы «Я» из логотипа

  • цвет:

Описание

Если вам где-то требуется описание Яндекс.Кассы (например, в списке платежных систем), используйте этот текст:

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

Способы приёма платежей: банковские карты, Яндекс.Деньги и QIWI, интернет-банки, наличные, баланс мобильного и другие.

Перейти на сайт Яндекс.Кассы

Инструкция по настройке

С инструкцией ваш пользователь быстрее настроит приём платежей. В ней можно ответить на вопросы, которые задают (или будут задавать) чаще всего. Мы разместим ссылку на вашу инструкцию на сайте Яндекс.Кассы, а вы можете разместить ее на своем сайте, рядом с модулем или прямо в настройках модуля.

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

Скачать шаблон инструкции

kassa.yandex.ru

платежное лего для e-commerce всех мастей / Яндекс.Деньги corporate blog / Habr

Буквально сегодня свет увидел новый API Яндекс.Кассы, разработанный программистами для программистов. Набор протоколов стал единообразным, логичным и простым в освоении. Но статья не об этом – я хочу рассказать, как и почему в один прекрасный момент API решено было переписать с нуля.

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

Исторически в Яндекс.Деньгах протоколы в API появлялись по мере необходимости и разрабатывались разными подразделениями – не стали исключением и сервисы Яндекс.Кассы.


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

Тогда Касса преимущественно состояла из протокола приема платежей через платежную форму. Этот протокол позволял через платежную форму на сайте контрагента перенаправить плательщика на сайт Яндекс.Денег и провести платеж.

Когда контрагентам потребовалось осуществлять возвраты, получать списки возвратов и платежей, для всего этого появился еще один новый протокол. Он работал на базе PKCS#7 криптопакетов и XML, а порог технического вхождения для него оказался достаточно высок. В общем, с реализацией справлялись только те, кто по-настоящему в этом нуждался.

Кроме того, в 2014 году появились протокол выплат и протокол эквайринга банковских карт для крупных контрагентов, которые прошли PCI DSS аудит и могут хранить данные банковских карт на своей стороне.

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

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

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


При проектировании API мы использовали объектно-ориентированный подход на основные ценности REST-like протоколов. При этом старались использовать знакомые контрагентам и разработчикам сущности, которые уже существуют в их системах и процессах: платежи, возвраты, сохраненные способы оплаты (они же – привязки) и другие. Эту концепцию принято называть проблемно-ориентированным проектированием.

Структура объекта платежа неизменна от запроса к запросу и позволяет получать необходимую информацию в любой момент без необходимости хранить все это на своих серверах. Что особенно важно, это позволяет одинаково интерпретировать данные объекта в любое время. Создаете ли вы объект платежа (Payment) через POST, получаете его состояние через GET, подтверждаете или отменяете его – во всех ситуациях вы работаете с одним и тем же объектом Payment.

{
  "id": "2171eeff-000f-50be-b000-02e31251204a",
  "status": "pending",
  "paid": false,
  "amount": {
    "value": "2.00",
    "currency": "RUB"
  },
  "confirmation": {
    "type": "redirect",
    "confirmation_url": "https://money.yandex.ru/payments/kassa/confirmation?orderId=2171eeff-000f-50be-b000-02e31251204a"
  },
  "created_at": "2017-10-12T21:14:39.577Z",
  "payment_method": {
    "type": "bank_card",
    "id": "2171eeff-000f-50be-b000-02e31251204a",
    "saved": false,
    "card": {
        "last4": "7918",
        "expiry_year": "2017",
        "expiry_month": "07",
        "card_type": "MasterCard"
    }
  }
}

Пример объекта платежа (Payment).

Из соображений единообразия все объекты платежа, возврата, а также платежные методы живут по одним законам и обладают похожими признаками и структурой.

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


У платежных систем есть одна особенность, которая серьезно затрудняет реализацию протоколов по REST-like принципу: все сущности в рамках API обладают своим жизненным циклом. Он отличается от метода к методу и влияет на значения и структуру полей.

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


Состояния платежа по новому жизненному циклу: waiting_for_capture присутствует не всегда – есть режим проведения платежа с автоматическим capture.

На стадии pending и waiting_for_capture платеж может быть отменен магазином или нами и тогда перейдет в статус canceled.

{
  "id": "2171f067-000f-50be-b000-01cc0f0843c3",
  "status": "waiting_for_capture",
  "paid": true,
  "amount": {
    "value": "1000.00",
    "currency": "RUB"
  },
  "created_at": "2017-10-12T21:21:08.594Z",
  "payment_method": {
        "type": "bank_card",
    "id": "2171eeff-000f-50be-b000-02e31251204a",
    "saved": false,
    "card": {
        "last4": "7918",
        "expiry_year": "2017",
        "expiry_month": "07",
        "card_type": "MasterCard"
    }  },
  "receipt_registration": "succeeded"
}

Ответ сервера при прохождении стадии waiting_for_capture.

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

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

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


  1. Создание платежа.
  2. Получение подтверждения пользователя.
  3. Регистрация чека в онлайн-кассе.
  4. Подтверждение готовности принять платеж.
  5. Получение денег на расчетный счет уже на следующий рабочий день.

Шаги 2-4 опциональны, но последовательность этих действий всегда неизменна.

Чтобы ознакомиться с реальными примерами, посмотрите в инструкциях раздел по проведению платежа «Быстрый старт».


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

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

Чтобы поддерживать асинхронность и защититься от задвоения платежей, мы предлагаем использовать ключ идемпотентности. Если Касса по какой-то причине не успеет провести платеж за отведенное время, клиент API получит в ответе HTTP-код 202 (Request Accepted) с просьбой повторить запрос с тем же ключом чуть позже. Даже при множественных запросах с одним и тем же ключом и одинаковым телом запроса операция всегда будет совершена только один раз.

curl https://payment.yandex.net/api/v3/payments \
  -X POST \
  -u <Идентификатор магазина>:<Секретный ключ> \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "amount": {
          "value": "2.00",
          "currency": "RUB"
        },
        "payment_method_data": {
          "type": "bank_card"
        },
        "confirmation": {
          "type": "redirect",
          "return_url": "https://www.merchant-website.com/return_url"
        }
      }'

Пример запроса с ключом идемпотентности.

При этом достаточно выбрать генератор случайных чисел с минимально возможной коллизией (рекомендуем использовать v4 UUID). Мы запоминаем каждый из идентификаторов на 24 часа, после чего можно воспользоваться им повторно. При этом вам не нужно хранить ключ идемпотентности вечно – достаточно получить постоянный идентификатор объекта Платежа или Возврата, сгенерированного Кассой. Впоследствии вся работа с объектом осуществляется через этот идентификатор.

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

Поэтому Касса передает контрагенту информацию о факте отправки SMS-сообщения и ожидает подтверждения пользователем. В это время клиент Кассы может периодически повторять запросы о статусе платежа либо подписаться на уведомления от сервера, которые направляются на указанный в личном кабинете Кассы URL при смене статуса платежа. В обоих случаях контрагент получает полный объект Платежа.

Все эти решения позволяют компаниям не подстраивать свои бизнес-процессы под Яндекс.Кассу, а гибко встраивать наш API в любые платежные сценарии.


При создании предыдущих протоколов мы столкнулись с проблемой расхождения документации и реализации, потому что исходники документации существовали отдельно. В новом API с этим тоже нужно было покончить, поэтому для сборки документов решили использовать Swagger. Сейчас на рынке есть множество решений all-in-one, которые позволяют импортировать Swagger-спецификации, но идеальных с точки зрения кастомизации и информационного дизайна не нашлось.

Поэтому документы конвертировали с использованием формата Markdown, а в качестве инструмента для отображения выбрали Slate. Для прототипа каждой новой функции теперь используется спецификация в формате Swagger и сценарии, которые описывают последовательности действий и возможные исходы.

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


Пример изменений, которые вносит заказчик в документацию (API reference), добавляя запрос на создание платежа с объектом, хранящим данные банковской карты.
  PaymentMethodDataBankCard:
    description: Данные для оплаты банковской картой
    allOf:
    - $ref: '#/definitions/PaymentMethodData'
    - type: object
      properties:
        type:
          description: Тип объекта.
          type: string
          enum:
            - bank_card
        card:
          description: Данные банковской карты (необходимы, если вы собираете данные карты пользователей на своей стороне).
          type: object
          properties:
            number:
              description: Номер банковской карты
              type: string
              pattern: "[0-9]{13,19}"
              example: '4444444444444448'
            expiry_year:
              description: Срок действия, год, YY
              type: string
              pattern: "[0-9]{4}"
              example: '2017'
            expiry_month:
              description: Срок действия, месяц, MM
              type: string
              pattern: "[0-9]{2}"
              example: '10'
            csc:
              description: Код CVC2 или CVV2, 3 или 4 символа, печатается на обратной стороне карты
              type: string
              pattern: "[0-9]{3,4}"
              example: '012'
            cardholder:
              description: Имя владельца карты
              type: string
              pattern: "[a-zA-Z]{0,26}"
              example: 'John Smith'
          required:
            - number
            - expiry_year
            - expiry_month
            - csc
    required:
      - type

После того как все договорились о финальной версии спецификации и Pull Request получил все необходимые согласования, начинается реализация. Параллельно от ветки спецификации отводится еще одна, в которой копирайтеры исправляют тексты и объединяют их отдельным Pull Request.

Как только новая функция реализована разработчиком, она тестируется по этой спецификации и далее отправляется на продакшен.


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

Как только мы вычитаем документацию, протестируем новые функции и убедимся в их простоте и понятности – выполняется Merge Pull Request Swagger-спецификации в master-ветку, чтобы она автоматически собралась в публичную документацию и попала на сайт.

После выпуска новой функции в мир наступает бесконечно увлекательный момент поддержки и мониторинга. Как и другие подразделения Яндекс.Денег, мы используем Grafana. Наблюдения проводятся с помощью множества метрик, поэтому приведу тут только основные: запросы к API, отправленные уведомления, успешность прохождения платежей и их подтверждение (capture), частота возникновения определенных ошибок.

Вместе с запуском нового API появился обновленный портал документации и SDK на PHP. Начался и постепенный переход наших CMS-модулей на новый протокол – сейчас регистрация на новый протокол доступна для OpenCart 1.5 и WooComerce. К ноябрю 2017 к ним присоединятся Y.CMS для Opencart 2, Prestashop, Webasyst Shop-Script, Drupal (модуль для Commerce и Ubercart), JoomShopping и SimplaCMS.

Мы также запускаем библиотеку YandexCheckout.js, которая позволяет создавать формы для приема карточных платежей любых форм и размеров. Первыми такую библиотеку 6 лет назад предложил Stripe. С тех пор нечто похожее сделали другие платежные агрегаторы для решения проблемы оплаты картами прямо на сайте интенет-магазина. Мы учли лучшие наработки наших западных коллег и выпустили YandexCheckout.js. Теперь компаниям не придется проходить полный и дорогой аудит PCI DSS, чтобы принимать платеж на своей стороне — достаточно заполнить опросник SAQ D и пройти ASV сканирование (с чем мы тоже можем помочь). Сейчас эта опция доступна в индивидуальном порядке, но открытие ее для всех как раз в планах на будущее.

И на десерт: вместе с новым API мы запускаем полноценную песочницу. Прямо в вашем личном кабинете теперь можно обкатывать основные платежные сценарии с использованием тестовых карт и кошельков.


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

Если же вы сами разрабатываете новую площадку или давно ждали возможностей нового API – при регистрации будет использован уже обновленный API Яндекс.Кассы. В начале 2018 года также планируется публичный запуск возможности перевода старых магазинов на новый протокол.

Напоследок две самые важные ссылки:


Если у вас остались вопросы или опасения относительно нового API – приглашаю в комментарии к статье.

habr.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *