Прием платежей (1.31)

Download OpenAPI specification:Download

Начало работы

Подключение интернет-эквайринга от Т‑Кассы

Интернет-эквайринг помогает принимать онлайн-платежи так, как удобно вам и покупателю: на сайте, в мобильном приложении, соцсетях, мессенджерах, по e-mail или СМС. Вы можете принимать оплату разными способами, возвращать и замораживать выплаты и настраивать рекуррентные платежи.

Чтобы подключить интернет-эквайринг, оставьте заявку на сайте Т‑Банка и заполните анкету компании или ИП. Подробнее о подключении можно прочитать в Т-Помощи или узнать у персонального менеджера.

Способы интеграции интернет-эквайринга от Т‑Кассы

Интернет-эквайринг нужно интегрировать — настроить оплату на сайте или в приложении. Есть четыре способа интеграции:

  • Платежный модуль — для сайтов на CMS.
  • Платежный виджет — для самописного сайта.
  • SDK — для мобильного приложения.
  • API — для разработки своей интеграции.

Интегрироваться можно самостоятельно или с помощью разработчика.

Платежный модуль

Способ интеграции интернет-эквайринга с сайтом, который создан на основе CMS.

Модуль подходит, если ваш сайт собран на CMS — например, 1С-Битрикс, WordPress или Taplink. Т‑Касса поддерживает многие популярные CMS, в некоторые уже встроены модули — их устанавливать не нужно.

Принцип работы:

  1. Вы устанавливаете модуль и настраиваете способы оплаты — банковская карта, T‑Pay, SberPay, Mir Pay, СБП, Долями, в рассрочку.
    Можно оставить все способы или выбрать определённые.
  2. На странице сайта появляется кнопка оплаты.
  3. Покупатель нажимает на кнопку и переходит на платежную форму с разными способами оплаты.

На этой странице представлен список систем управления контентом (CMS), для которых разработаны платежные модули. Если вашего решения нет в этом списке, мы рекомендуем настроить передачу объекта DATA с параметром connection_type. В этом параметре укажите название модуля, через который вы интегрируетесь. Более подробную информацию вы можете в описании метода Init. Если у вас возникнут вопросы или потребуется дополнительная настройка, пожалуйста, обратитесь в техническую поддержку вашего модуля.

Инструкции по интеграции с помощью платежного модуля

Платежный виджет

Способ интеграции интернет-эквайринга с самописным сайтом.

Виджет подходит, если:

  • ваш сайт самописный или на CMS, для которой в Т‑Банке нет платежного модуля;
  • вы не планируете принимать автоплатежи.

Принцип работы:

  1. Вы вставляете готовый код на страницу сайта и настраиваете способы оплаты — банковская карта, T‑Pay, SberPay, Mir Pay, СБП, Долями, в рассрочку.
    Можно оставить все способы или выбрать определённые.
  2. На месте кода появляется кнопка оплаты.
  3. Покупатель нажимает на кнопку и переходит на платежную форму с разными способами оплаты.

Для интеграции виджета потребуется помощь программиста.

Инструкция по интеграции с помощью виджета

Мобильный SDK

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

С помощью SDK вы можете:

  • Разместить платежную форму Т‑Кассы со всеми или некоторыми способами оплаты.
  • Отдельно встраивать способы оплаты в вашу платежную форму — например, T‑Pay или СБП.

Инструкции по подключению SDK в личном кабинете:

API

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

Для интеграции понадобится помощь программиста.

Документация API

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

Платежная форма — это готовый интерфейс с встроенными способами оплаты, который позволяет принимать платежи онлайн.

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

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

Некоторые WebView не умеют обрабатывать DeepLink-ссылки. Из-за этого способы оплаты, которые выполняют переход в мобильное приложение во время платежа, могут работать некорректно — например, СБП, Mir Pay, T‑Pay.

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

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

Примеры решений:

  1. Первое решение (java,kotlin).
  2. Второе решение (java).

Рекомендации по интеграции

Платформа IOS

Чтобы DeepLink работал в Web, есть два варианта решения:

  1. Использовать SFSafariViewController — он умеет открывать диплинки, дополнительная настройка не нужна.
  2. Обработать открытие диплинка Т‑Банка — если используете WKWebView: он не умеет открывать диплинки из коробки.

Пример реализации обработки открытия диплинка Т‑Банка:

navigationDelegate = self
func webView(
    _ webView: WKWebView,
    decidePolicyFor navigationAction: WKNavigationAction,
    decisionHandler: @escaping (WKNavigationActionPolicy) -> Void
) {
    if let url = navigationAction.request.url, let scheme = url.scheme {
        if scheme != "https" && scheme != "http" {
            UIApplication.shared.open(url)
        }
    }
    decisionHandler(.allow)
}

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

Мы не рекомендуем использовать платежную форму в iframe для мобильных версий сайтов — у кнопочных способов оплаты могут возникать проблемы с открытием DeepLink и переходов в мобильное приложение для оплаты: СБП, Mir Pay, T‑Pay. Это связано с тем, что iframe — изолированный контейнер. Из-за этого переходы на сторонние ссылки не могут обрабатываться внутри iframe.

Если вам нужно использовать iframe в мобильной версии сайта, сделайте доработки по инструкции ниже, чтобы использовать кнопочные способы оплаты. Это позволит произвести переход в стороннее приложение. Доработки представляют собой скрипт «снаружи» iframe, который получит сообщение о переходе от iframe и вызовет его на основной странице.

После реализации доработок нужно протестировать корректную работу всех способов оплат. Если у вас возникнут проблемы или вопросы, обратитесь в нашу поддержку — acq_help@tbank.ru.

В десктопной версии iframe кнопочные способы оплаты будут работать без специальных доработок.

Инструкция по доработкам для mobile iframe

Если у вас подключены способы оплаты, которые используют DeepLink — T‑Pay, СБП или Mir Pay — в процессе оплаты может возникать ошибка.

Про скрипт

Скрипт общается с фреймом через window.postMessage().

Добавление скрипта помогает решить проблему передачи ссылки на ресурс платежного сервиса для способов оплаты, которые используют DeepLink. Эта проблема может возникнуть при попытке передачи ссылки в браузер клиента из контейнера платежной формы, который расположен в теге <iframe>.

Установка

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

Простая интеграция — если используется уже созданный iframe на странице

Добавьте ссылку на код скрипта iframe.js в HTML-код страницы сайта, на которой располагается iframe c платежной формой. Рекомендуем разместить его в конце body после объявления тега iframe.

<iframe id="payment-form"></iframe>
 
<script src="https://kassa.cdn-tinkoff.ru/integration/integration.js"></script>
<script>
  const paymentForm = new PaymentForm.Integration({iframe: {element: document.getElementById('payment-form')}});
</script>

Динамическая интеграция — если iframe генерируется динамически

<div id="payment-form-container"></div>
 
<script>
  // // Получите и присвойте переменной uuid значение уникального идентификатора платежа — передаётся в path параметра PaymentURL
  const uuid = ""; 
  // Получите элемент контейнера, в который будет встроен iframe
  const contentContainer = document.getElementById('payment-form-container')
 
  // Загрузите скрипт
  const script = document.createElement("script");
  script.type = "text/javascript";
  script.async = false;
  script.src = "https://kassa.cdn-tinkoff.ru/integration/integration.js";
  script.onload = (): void => {
     // Инициализируйте скрипт
     const paymentForm = new PaymentForm.Integration({iframe: {element: document.getElementById('payment-form')}});
 
     // Создайте iframe
     const element = document.createElement("iframe");
     element.src = "https://securepayments.tinkoff.ru/" + uuid;
     if (contentContainer) {
        contentContainer.appendChild(element);
     }
  };
                
  
  document.getElementsByTagName("body")[0].appendChild(script);
</script>

Настройка

Класс Integration принимает два аргумента:

  1. HTMLIFrameElement — iframe DOM-элемент.
  2. config — необязательный аргумент с конфигурацией PaymentFormIntegrationConfig.

PaymentFormIntegrationConfig:

interface PaymentFormIntegrationConfig {
  iframe: {
    element: HTMLIFrameElement;
    /**
     * Используется, если скрипт встраивается в промежуточный iframe
     */
    proxy?: true;
    /**
     * Вызывается в момент получения deepLink из ПФ
     * Стандартное значение: (url) => {window.location.href = url}
     * @param url
     */
    deepLinkRedirectCallback?: (url: string) => void;
    /**
     * Вызывается в момент получения exit из ПФ
     * Например, при нажатии кнопки Вернуться в магазин
     * Стандартное значение: (url) => {window.location.href = url}
     * @param url
     */
    exitRedirectCallback?: (url: string) => void;
  };
}

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

Пример инициализации скрипта с конфигурацией:

const paymentForm = new PaymentForm.Integration({
  iframe: {
    element: document.getElementById('payment-form'),
    exitRedirectCallback: (url) => {
      // Вызов закрытия модального окна
    }
  }
});

iframe внутри iframe

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

Пример инициализации скрипта для основной страницы:

<iframe id="payment-form"></iframe>
 
<script src="https://kassa.cdn-tinkoff.ru/integration/integration.js"></script>
<script>
  const paymentForm = new PaymentForm.Integration({iframe: {element: document.getElementById('payment-form')}});
</script>

Пример инициализации скрипта для вложенного iframe:

<iframe id="payment-form"></iframe>
 
<script src="https://kassa.cdn-tinkoff.ru/integration/integration.js"></script>
<script>
  const paymentForm = new PaymentForm.Integration({iframe: {element: document.getElementById('payment-form'), proxy: true}});
</script>

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

Коллбеки событий будут срабатывать в промежуточных iframe только если они переопределены в конфигурации.

Как работает скрипт

Общение между формой и родителем происходит через window.postMessage().

  1. После успешной загрузки платежная форма внутри iframe отправляет родителю сообщение loaded.
  2. После получения loaded из платежной формы скрипт отправляет сообщение ready на платежную форму. Таким образом происходит рукопожатие, и платежная форма определяет, что может отобразить кнопочные методы оплаты.
  3. Действия клиента на платежной форме активируют способ оплаты, который возвращает DeepLink на ресурс платежного сервиса.
  4. Платежная форма передает DeepLink в целевое окно клиента с помощью события deepLink.
  5. Целевое окно выполняет редирект клиента с помощью вызова deepLinkRedirectCallback по ссылке, которая получена в DeepLink.
  6. Аналогично передаются и другие сообщения.

Кастомизация платежной формы

Платежную форму можно кастомизировать — настроить под себя и своих клиентов. Для установки кастомизации обратитесь к вашему персональному менеджеру и передайте пожелания по настройкам.

Список доступных настроек кастомизации

Возможности кастомизации Дополнительное описание
Брендирование UI платежной формы
  • Добавлять логотим своей компании в платежную форму — логотип отобразится рядом с суммой заказа 
  • Управлять цветами кнопок — кнопка Оплатить и другие кнопки со страниц статусов и модальных окон
  • Управление блоком детализации (информация о заказе и магазине)
  • Делать блок свернутым и развернутым по умолчанию
  •  Скрывать  блок с детализацией на платежной форме
  • Менять порядок строк в детализации
  • Управление светлой и темной темой
  • Показывать темную или светлую тему по умолчанию
  • Отключать темную или светлую тему
  • Безопасность при интеграции

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

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

    Дополнительные обязательные меры, которые нужно соблюдать при интеграции с MAPI:

    • Наиболее безопасный способ передачи данных от мерчанта в MAPI — прямая интеграция бэкенда мерчанта с бэкендом Т‑Кассы. В этом случае злоумышленник сможет перехватить запрос только если окажется в локальной сети мерчанта.

    • Сверяйте параметры созданных заказов при любых способах интеграции с MAPI, в том числе с помощью нашего платежного виджета. Если выявляются расхождения между суммой операции, инициированной клиентом, и суммой совершенной операции, не доставляйте товар клиенту и уведомите об этом Т‑Банк. Для сверки параметров есть несколько способов:

      • Получение нотификаций:

        • По электронной почте — на указанную почту придет письмо при переходе платежа в статус CONFIRMED.

        • По HTTP — MAPI будет отправлять POST-запрос при каждом изменении статуса платежа на URL, который указан в настройках терминала.

      • Вызов метода GetState, который возвращает основные параметры и текущий статус платежа. Рекомендуем сверять или валидировать дополнительные данные заказа — PaymentId и Amount.

    • Обновляйте модули для CMS. Современные модули для популярных CMS сверяют суммы заказов автоматически.

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

    Обработка карточных данных

    Платежные системы разработали требования к безопасности карточных данных клиентов — Payment Card Industry Data Security Standard (PCI DSS). Компания должна пройти сертификацию, чтобы подтвердить надежность управления карточной информацией.

    Если:

    • У вас нет сертификации PCI DSS, вы можете использовать платежную форму Т‑Кассы. В этом случае все операции, которые связаны с обработкой критичных данных, проводятся на стороне Т‑Кассы. Мерчанту достаточно настроить интеграцию с MerchantAPI и инициализировать платеж. Клиент будет перенаправлен на платежную форму, в которую он сможет ввести данные карты. Когда платеж завершится, клиент снова увидит сайт мерчанта.

    • Ваш ресурс соответствует требованиям PCI DSS, вы можете собирать и хранить карточные данные клиентов. В этом случае MerchantAPI получает зашифрованные карточные данные от мерчанта.

    Подробнее о подключении эквайринга с и без PCI DSS

    Передача признака инициатора операции

    Платежные системы хотят понимать, кем была инициирована карточная операция. Это особенно важно при проведении операций без 3DS и по сохраненным данным.

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

    Подробное описание сценариев проведения операций, значений OperationInitiatorType, взаимосвязь с другими атрибутами и типами терминалов:

    Тип операции и инициатор Описание Сценарий карточной операции OperationInitiatorType RebillId в /Charge Recurrent в Init AFT терминал ECOM терминал
    Сustomer Initiated Credential-Not-Captured (CIT CNC) Инициированная покупателем оплата без сохранения реквизитов карты для последующего использования. Стандартный платеж 0 null N Разрешено Разрешено
    Сustomer Initiated Credential-Captured (CIT CC) Инициированная покупателем оплата c сохранением реквизитов карты для последующего использования. Стандартный платеж с созданием родительского рекуррентного платежа 1 null Y Разрешено Разрешено
    Сustomer Initiated Credential-on-File (CIT COF) Инициированная покупателем оплата по сохраненным реквизитам карты — ранее была проведена операция с сохранением реквизитов CIT CC. Рекуррентный платеж, инициированный покупателем 2 not null N Запрещено Разрешено
    Merchant Initiated Credential-on-File, Recurring (CIT COF R) Инициированные торговым предприятием повторяющиеся платежи без графика — ранее была проведена операция с сохранением реквизитов CIT CC. Применяется для оплаты коммунальных услуг, платежей за услуги связи, кабельное/спутниковое телевидение и прочее. Сумма может быть определена заранее или становится известна непосредственно перед оплатой. Рекуррентный платеж, инициированный торговым предприятием R not null N Запрещено Разрешено
    Merchant Credential-on-File, Installment (CIT COF I) Инициированные торговым предприятием повторяющиеся платежи по графику — ранее была проведена операция с сохранением реквизитов CIT CC. Применяется для платежей в рассрочку по товарному кредиту, для оплаты страховки в рассрочку, для погашения кредита в соответствии с графиком платежей. График платежей может быть изменен по соглашению сторон — суммы и даты платежей должны быть известны плательщику (держателю карты) до момента проведения операции. Рекуррентный платеж, инициированный торговым предприятием I not null N Разрешено Запрещено

    Термины

    Термин Определение
    Клиент Физлицо, производящее перевод с использованием банковской карты на сайте мерчанта.
    Мерчант Бизнес, принимающий и осуществляющий переводы по банковским картам на своем сайте.
    Т‑Касса Сервис, помогающий проводить выплату клиенту-физлицу.
    Эмитент Банк, выпустивший карту клиента-физлица.
    PCI DSS Международный стандарт безопасности, созданный для защиты данных банковских карт.
    3-D Secure Протокол, который используется как дополнительный уровень безопасности для онлайн-кредитных и дебетовых карт. 3-D Secure добавляет ещё один шаг аутентификации для онлайн-платежей.
    Терминал Точка приема платежей мерчанта. В общем случае привязывается к сайту, на котором осуществляется прием платежей. Далее в этой документации описан протокол для терминала мерчанта.
    Для проведения тестов используются данные тестового терминала TinkoffBankTest — пароль аналогичен.
    ККМ Контрольно-кассовая машина.
    Личный кабинет мерчанта Веб-приложение, в котором мерчант управляет интернет-эквайрингом — настраивает параметры терминалов, подтверждает или отменяет платежи, анализирует статистику.

    Параметры терминала

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

    Основные параметры приёма платежей для терминала:

    Название параметра Формат Описание
    TerminalKey 20 символов, чувствительно к регистру Уникальный символьный ключ терминала. Устанавливается Т‑Кассой.
    Success URL 250 символов, чувствительно к регистру URL на веб-сайте мерчанта, куда будет переведен клиент в случае успешной оплаты
    • true — платеж завершился успешно;
    • false — платеж не завершился. *
    Fail URL 250 символов, чувствительно к регистру URL на веб-сайте мерчанта, куда будет переведен клиент в случае неуспешной оплаты. *
    Success Add Card URL 250 символов, чувствительно к регистру URL на веб-сайте мерчанта, куда будет переведен клиент после успешной привязки карты. *
    Fail Add Card URL 250 символов, чувствительно к регистру URL на веб-сайте мерчанта, куда будет переведен клиент после неуспешной привязки карты. *
    Notification URL 250 символов, чувствительно к регистру URL на веб-сайте мерчанта, куда будет отправлен POST запрос о статусе выполнения вызываемых методов. Только для методов Authorize, FinishAuthorize, Confirm, Cancel.
    Валюта терминала 3 символа Валюта, в которой будут происходить списания по данному терминалу, если иное не передано в запросе.
    Активность терминала Рабочий/Неактивный/Тестовый Определяет режим работы данного терминала.
    Password 20 символов, чувствительно к регистру Используется для подписи запросов/ответов. Является секретной информацией, известной только мерчанту и Т‑Кассе. Пароль находится в личном кабинете мерчанта.
    Отправлять нотификацию на FinishAuthorize Да/Нет Определяет, будет ли отправлена нотификация на выполнение метода FinishAuthorize. По умолчанию — да.
    Отправлять нотификацию на Completed Да/Нет Определяет, будет ли отправлена нотификация на выполнение метода AttachCard. По умолчанию — да.
    Отправлять нотификацию на Reversed Да/Нет Определяет, будет ли отправлена нотификация на выполнение метода Cancel. По умолчанию — да.

    * В URL можно указать нужные параметры в виде ${<параметр>}, которые будут переданы на URL через метод GET.

    Токен

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

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

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

    Пример процесса шифрования тела запроса для метода Init:

    {
      "TerminalKey": "MerchantTerminalKey",
      "Amount": 19200,
      "OrderId": "21090",
      "Description": "Подарочная карта на 1000 рублей",
      "Token": "68711168852240a2f34b6a8b19d2cfbd296c7d2a6dff8b23eda6278985959346",
      "DATA": {
        "Phone": "+71234567890",
        "Email": "a@test.com"
      },
      "Receipt": {
        "Email": "a@test.ru",
        "Phone": "+79031234567",
        "Taxation": "osn",
        "Items": [
          {
            "Name": "Наименование товара 1",
            "Price": 10000,
            "Quantity": 1,
            "Amount": 10000,
            "Tax": "vat10",
            "Ean13": "303130323930303030630333435"
          },
          {
            "Name": "Наименование товара 2",
            "Price": 3500,
            "Quantity": 2,
            "Amount": 7000,
            "Tax": "vat20"
          },
          {
            "Name": "Наименование товара 3",
            "Price": 550,
            "Quantity": 4,
            "Amount": 4200,
            "Tax": "vat10"
          }
        ]
      }
    }
    

    Чтобы зашифровать данные запроса, мерчанту нужно:

    1. Собрать массив передаваемых данных в виде пар ключ-значения. В массив нужно добавить только параметры корневого объекта. Вложенные объекты и массивы не участвуют в расчете токена. В примере в массив включены параметры TerminalKey, Amount, OrderId, Description и исключен объект Receipt и DATA.
    [{"TerminalKey": "MerchantTerminalKey"},{"Amount": "19200"},{"OrderId": "21090"},{"Description": "Подарочная карта на 1000 рублей"}]
    
    1. Добавить в массив пару {Password, Значение пароля}. Пароль можно найти в личном кабинете мерчанта.
    [{"TerminalKey": "MerchantTerminalKey"},{"Amount": "19200"},{"OrderId": "21090"},{"Description": "Подарочная карта на 1000 рублей"},{"Password": "usaf8fw8fsw21g"}]
    
    1. Отсортировать массив по алфавиту по ключу.
    [{"Amount": "19200"},{"Description": "Подарочная карта на 1000 рублей"},{"OrderId": "21090"},{"Password": "usaf8fw8fsw21g"},{"TerminalKey": "MerchantTerminalKey"}]
    
    1. Конкатенировать только значения пар в одну строку.
    "19200Подарочная карта на 1000 рублей21090usaf8fw8fsw21gMerchantTerminalKey"
    
    1. Применить к строке хеш-функцию SHA-256 (с поддержкой UTF-8).
    "0024a00af7c350a3a67ca168ce06502aa72772456662e38696d48b56ee9c97d9"
    
    1. Добавить получившийся результат в значение параметра Token в тело запроса и отправить запрос.
    {
      "TerminalKey": "MerchantTerminalKey",
      "Amount": 19200,
      "OrderId": "21090",
      "Description": "Подарочная карта на 1000 рублей",
      "DATA": {
        "Phone": "+71234567890",
        "Email": "a@test.com"
      },
      "Receipt": {
        "Email": "a@test.ru",
        "Phone": "+79031234567",
        "Taxation": "osn",
        "Items": [
          {
            "Name": "Наименование товара 1",
            "Price": 10000,
            "Quantity": 1,
            "Amount": 10000,
            "Tax": "vat10",
            "Ean13": "303130323930303030630333435"
          },
          {
            "Name": "Наименование товара 2",
            "Price": 20000,
            "Quantity": 2,
            "Amount": 40000,
            "Tax": "vat20"
          },
          {
            "Name": "Наименование товара 3",
            "Price": 30000,
            "Quantity": 3,
            "Amount": 90000,
            "Tax": "vat10"
          }
        ]
      },
      "Token": "0024a00af7c350a3a67ca168ce06502aa72772456662e38696d48b56ee9c97d9"
    }
    

    Проверить корректность формирования токена можно через сервис https://tokentcs.web.app.

    Информацию о корректности токена также можно проверить в личном кабинете интернет-эквайринга в разделе Операции. Выберите нужный заказ → Дополнительная информация о заказе → поле inittokenisvalid. Если значение в этом поле true — токен валидный, false — некорректный.

    Сценарии оплаты по карте

    Правила работы

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

    Для нашего интернет-эквайринга оплата проходит только в рублях.

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

    Для POST-запроса в заголовке должен быть Content Type: application/json.

    URL: https://securepay.tinkoff.ru/v2/

    Сценарии платежа

    Основная сущность в интернет-эквайринге Т‑Кассы — платеж. В зависимости от настроек терминала, платеж может идти по двум сценариям:

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

    Настроить способ приема на терминале можно в личном кабинете мерчанта или передать нужный тип в параметре PayType при вызове метода Init.

    Стандартный платеж для мерчантов с PCI DSS

    Инициировать платеж

    Чтобы создать платеж, мерчант должен инициировать его через метод Init — передать сумму платежа и номер заказа.

    При вызове метода Init в объекте DATA в атрибуте OperationInitiatorType нужно передавать признак инициатора операции. В ответ MAPI создаст новый платеж в статусе NEW и вернёт его идентификатор в параметре PaymentId.

    После этого мерчант вызывает метод Check3DSVersion, в котором передает зашифрованные карточные данные клиента и PaymentId. Это нужно для проверки версии протокола 3D-Secure по карте. Она может быть версии 1.0 или 2.0.

    Если в ответе метода Check3DSVersion есть параметр ThreeDSMethodURL, браузер клиента должен вызывать ресурс, адрес которого пришел в параметре ThreeDSMethodURL. В запросе нужно передать строковый параметр threeDSMethodData. Эта строка — закодированный в формате base64 JSON-объект с параметрами:

    Название параметра Тип данных Описание
    threeDSMethodNotificationURL string Обратный адрес, на который будет отправлен запрос после прохождения 3DS Method.
    threeDSServerTransID string Идентификатор транзакции из ответа метода Check3DSVersion.

    Браузер должен вызвать 3DS Method в скрытом iframe и передать данные в формате x-www-form-urlencoded.

    Пример запроса на ThreeDSMethodURL:

    <body onload="document.form.submit()">
    <form name="form" action="{ThreeDSMethodURL}" method="post" >
    <input type="hidden" name="threeDSMethodData" value="eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjU2ZTcxMmE1LTE5MGEtNDU4OC05MWJjLWUwODYyNmU3N2M0NCIsInRocmVlRFNNZXRob2ROb3RpZmljYXRpb25VUkwiOiJodHRwczovL3Jlc3QtYXBpLXRlc3QudGlua29mZi5ydS92Mi9Db21wbGV0ZTNEU01ldGhvZHYyIn0">
    </form>
    </body>
    

    Пример декодированного значения threeDSMethodData:

    {
    
    "threeDSServerTransID":"56e712a5-190a-4588-91bc-e08626e77c44",
    "threeDSMethodNotificationURL":"https://rest-api-test.tinkoff.ru/v2/>Complete3DSMethodv2"
    
    }
    

    Стандартный платеж

    За проведение платежа отвечает метод FinishAuthorize. Через него мерчант передает в MAPI карточные данные клиента, продолжая обработку платежа.

    Если платеж:

    • Одностадийный — после вызова метода деньги будут списаны с карты клиента.
    • Двухстадийный — после вызова метода деньги будут заблокированы на карте клиента. Мерчант должен дополнительно подтвердить списание, вызвав метод Confirm.

    В ответ MAPI вернет один из статусов:

    Статус Описание Доступные действия
    AUTH_FAIL Неуспешная авторизация Провести платеж заново
    REJECTED Платеж отклонен Провести платеж заново
    CONFIRMED Успешный одностадийный платеж -
    AUTHORIZED Успешный двухстадийный платеж Подтвердить платеж
    3DS_CHECKING Требуется подтверждение платежа по 3D-Secure
    • Отменить платеж — действие доступно для клиента
    • Пройти подтверждение — действие доступно для клиента

    Без 3DS-подтверждения

    Если по платежу не нужно проходить подтверждение 3DS, в ответе FinishAuthorize MAPI вернет один из трех конечных статусов платежа:

    • CONFIRMED — при одностадийном платеже;
    • AUTHORIZED — при двухстадийном платеже;
    • REJECTED — при отказе в проведении платежа.

    С 3DS-подтверждением

    Если в ответе метода FinishAuthorize вернулся статус 3DS_CHECKING — значит, нужно пройти проверку 3D-Secure. Для этого мерчант должен сформировать запрос в сервис аутентификации банка, выпустившего карту. Адрес сервиса возвращается в ответе FinishAuthorize в параметре ACSUrl. Вместе с этим нужно перенаправить клиента для прохождения 3DS на эту же страницу — ACSUrl.

    В заголовке запроса нужно передать параметр Content-Type со значением application/x-www-form-urlencoded. Набор параметров в теле запросе зависит от версии протокола 3DS по карте.

    Проводить тестовые платежи можно только на тестовом окружении.

    3DS 1.0

    Если версия 3DS — 1.0, в запросе передаются параметры:

    Название параметра Описание
    MD Информация для идентификации платежной сессии на стороне торговой точки. Возвращается в ответе метода FinishAuthorize.
    PaReq Запрос на аутентификацию плательщика, который содержит разные детали транзакции. Возвращается в ответе метода FinishAuthorize.
    TermURL Адрес перенаправления после аутентификации 3DS. Должен содержать ссылку на обработчик на стороне мерчанта, принимающий результаты прохождения 3-D Secure.
    3DS 2.0

    Если версия 3DS — 2.0, в запросе передаются параметры в зависимости от типа устройства клиента. Тип устройства передается в запросе FinishAuthorize в параметре deviceChannel. Возможны два варианта — браузер (BRW, код 02) и приложение (APP, код 01).

    Параметры для браузера:

    Название параметра Тип данных Описание
    creq string JSON с параметрами threeDSServerTransID, acsTransID,challengeWindowSize, messageType, messageVersion, закодированный в base64.

    Строка creq для браузера формируется из следующих параметров:

    Название параметра Тип данных Описание
    threeDSServerTransID string Идентификатор транзакции из ответа метода FinishAuthorize.
    acsTransID string Идентификатор транзакции, присвоенный ACS, полученный из ответа метода FinishAuthorize.
    challengeWindowSize string Размер экрана, на котором открыта страница ACS. Допустимые значения:
  • 01 = 250 x 400;
  • 02 = 390 x 400;
  • 03 = 500 x 600;
  • 04 = 600 x 400;
  • 05 = Full screen.
  • messageType string Передается фиксированное значение CReq.
    messageVersion string Версия 3DS, полученная из ответа метода Check3DSVersion.

    Параметры для приложения:

    Название параметра Тип данных Описание
    creq string JWE object с параметрами threeDSServerTransID, acsTransID, messageType, messageVersion, sdkTransID, sdkCounterStoA, закодированный в PS256.

    Строка creq для приложения формируется из следующих параметров:

    Название параметра Тип данных Описание
    threeDSServerTransID string Идентификатор транзакции из ответа метода FinishAuthorize.
    acsTransID string Идентификатор транзакции, присвоенный ACS, полученный из ответа метода FinishAuthorize.
    messageType string Передается фиксированное значение CReq.
    messageVersion string Версия 3DS, полученная из ответа метода Check3DSVersion.
    sdkTransID string Уникальный идентификатор транзакции, назначенный 3DS SDK для идентификации одной транзакции, полученный из ответа метода FinishAuthorize.
    sdkCounterStoA string Внутренний счетчик 3DS SDK внутри ACS. Поддерживаемые значения:
    000–255.

    Подтверждение прохождения 3DS

    Когда сервис аутентификации банка, который выпустил карту, прислал результат прохождения 3D-Secure, мерчант должен передать эту информацию в MAPI. В зависимости от версии протокола 3DS нужно вызвать один из методов:

    Стандартный платеж для мерчантов без PCI DSS

    Инициировать платеж

    Чтобы создать платеж, мерчант должен инициировать его через метод Init — передать сумму платежа и номер заказа. При успешном прохождении запроса в ответе метода Init вернется параметр PaymentURL, на который нужно переадресовать клиента. При переходе на PaymentURL клиенту откроется платежная форма Т‑Кассы, где нужно ввести реквизиты карты, а после этого — этап прохождения 3DS.

    Методы Authorize и FinishAuthorize вызываются системами Т‑Кассы при переадресации клиента на PaymentURL — параметр возвращается в ответе метода Init. Актуально для мерчантов, которые используют платежную форму Т-Банка.

    При вызове метода Init в объекте DATA в атрибуте OperationInitiatorType нужно передавать признак

    Метод Authorize

    Вызывается автоматически при переадресации клиента на страницу PaymentURL, которая возвращается в ответе метода Init. Статус платежа выставляется в FORM_SHOWED.

    Метод FinishAuthorize

    Подтверждает инициированный платеж передачей карточных данных и списывает деньги с карты клиента.

    Исполнение платежа на платежной форме Т‑Кассы

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

    Статус перевода:

    • CONFIRMED — при успешном сценарии;
    • REJECTED — при неуспешном.

    Клиент переадресовывается на:

    • Success URL — при успешном переводе;
    • Fail URL — при неуспешном переводе.

    Завершение платежа

    Если платёж завершился успешно, клиент будет перенаправлен на страницу Success URL из настроек терминала.

    Двухстадийный платеж

    Двухстадийный платеж включает два этапа:

    1. Банк проверяет наличие средств у клиента и блокирует их — холдирует.
    2. Мерчант подтверждает списание средств или отменяет блокировку.

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

    • Отказался от заказа — он автоматически получает деньги обратно, а компания избегает комиссии за эквайринг.
    • Не стал отказываться от товара и вы подтвердили продажу в течение семи дней, деньги на его счете размораживаются и поступают на счет компании. В этом случае Т‑Касса списывает комиссию.

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

    Сроки холдирования

    Холдирование денег на карте покупателя зависит от его банка-эмитента и не всегда равно семи дням. Например, покупатель оплатил товар, и его банк заморозил средства на карте на 3 дня. 3 дня прошли, деньги разморозились и стали доступны на счете. Спустя день вы подтверждаете платеж, списывая сумму покупки. Фактически оплата прошла один раз.

    Техническая реализация двухстадийных платежей

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

    Когда мерчант захочет списать деньги, он должен вызвать метод Confirm и передать PaymentId в запросе. После успешного списания платеж перейдет в статус CONFIRMED. Если мерчант хочет отменить заказ — например, если товар закончился — нужно вызвать метод Cancel.

    Рекуррентные платежи

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

    После успешной оплаты MAPI отправит мерчанту уведомление об изменении статуса платежа на AUTHORIZED или CONFIRMED и вернет параметр RebillId. Следующие платежи этого клиента будут рекуррентными, если мерчант вызовет метод Init, а затем без переадресации на PaymentURL вызовет метод Charge и передаст параметр RebillId.

    Метод Charge работает как по одностадийной, так и по двухстадийной схеме оплаты. Чтобы перейти на двухстадийную схему, нужно переключить терминал в личном кабинете и написать на acq_help@tbank.ru с просьбой переключить схему рекуррентов, либо в последующих платежах передавать в методе Init параметр Paytype со значением T.
    ВАЖНО: Параметры, которые передаются в методе Init приоритетнее установленных настроек на треминале.

    Возврат и отмена платежа

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

    Успешный платеж — это платеж, который находится в статусе AUTHORIZED или CONFIRMED. Если мерчант отменяет платеж в статусе:

    • AUTHORIZED — заблокированная сумма размораживается на карте клиента.
    • CONFIRMED — деньги списываются со счета мерчанта и возвращаются на карту клиента.

    Возврат может быть частичный или полный. Частичный возврат — отмена не на всю сумму платежа, полный — отмена на всю сумму платежа.

    Чтобы отменить платеж, мерчант должен вызвать метод Cancel и в запросе передать идентификатор платежа — PaymentId. По умолчанию MAPI сделает полный возврат. Если нужна частичная отмена, в запросе в параметре Amount мерчант передает сумму, которая вернется клиенту.

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

    2. Если у клиента подключена онлайн-касса, в методе Cancel передаются:

      • Amount — сумма к частичному возврату или анхолду. Формула расчета: Price * Quantity = Amount.
      • Receipt — параметры чека.

    Например, товар стоит 500.00 рублей, и нужно вернуть 50.00 рублей. В Cancel нужно передать Amount = 5000:

    {
        "Name": "Item12",
        "Price": 50000,
        "Quantity": 0.1,
        "Amount": 5000,
        "Tax": "none",
        "PaymentObject": "service"
    }
    

    Если в чеке несколько товаров, нужно сделать то же самое для каждого из них.

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

    Получение данных о платеже

    Мерчант может получить информацию об основных параметрах платежа в любой момент.

    Если нужно получить данные по конкретному платежу, мерчанту нужно вызвать метод GetState и передать PaymentId в запросе.

    Если по одному заказу было несколько платежей, получить историю платежей и их текущий статус можно через метод CheckOrder — в запросе нужно передать OrderId.

    OrderId не является уникальным параметром. Рекомендуем сверять дополнительные данные заказа — PaymentId и Amount.

    Статусная модель платежа

    В процессе обработки платеж меняет свое состояние. Основные статусы и условия перехода в них:

    Статус Правило перехода
    NEW MAPI получил запрос Init. После этого он создает новый платеж со статусом NEW и возвращает его идентификатор в параметре PaymentId, а также ссылку на платежную форму в параметре PaymentURL.
    FORM_SHOWED Мерчант перенаправил клиента на страницу платежной формы PaymentURL и страница загрузилась у клиента в браузере.
    AUTHORIZING Платеж обрабатывается MAPI и платежной системой.
    3DS_CHECKING Платеж проходит проверку 3D-Secure.
    3DS_CHECKED Платеж успешно прошел проверку 3D-Secure.
    AUTHORIZED Платеж авторизован, деньги заблокированы на карте клиента.
    CONFIRMING Подтверждение платежа обрабатывается MAPI и платежной системой.
    CONFIRMED Платеж подтвержден, деньги списаны с карты клиента.
    REVERSING Мерчант запросил отмену авторизованного, но еще неподтвержденного платежа. Возврат обрабатывается MAPI и платежной системой.
    PARTIAL_REVERSED Частичный возврат по авторизованному платежу завершился успешно.
    REVERSED Полный возврат по авторизованному платежу завершился успешно.
    REFUNDING Мерчант запросил отмену подтвержденного платежа. Возврат обрабатывается MAPI и платежной системой.
    PARTIAL_REFUNDED Частичный возврат по подтвержденному платежу завершился успешно.
    REFUNDED Полный возврат по подтвержденному платежу завершился успешно.
    CANCELED Мерчант отменил платеж.
    DEADLINE_EXPIRED 1. Клиент не завершил платеж в срок жизни ссылки на платежную форму PaymentURL. Этот срок мерчант настраивает в личном кабинете или передает в методе Init в параметре RedirectDueDate.
    2. Платеж не прошел проверку 3D-Secure в срок.
    REJECTED Банк отклонил платеж.
    AUTH_FAIL Платеж завершился ошибкой или не прошел проверку 3D-Secure.
    Полный жизненный цикл платежа — схема

    scheme

    Стандартный платеж

    Инициировать платеж

    Метод инициирует платежную сессию.

    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала.
    Выдается мерчанту Т‑Кассой при заведении терминала.

    Amount
    required
    number <= 10 characters
    • Сумма в копейках. Например, 3 руб. 12коп. — это число 312.
    • Параметр должен быть равен сумме всех параметров Amount, переданных в объекте Items.
    • Минимальная сумма операции с помощью СБП составляет 10 руб.
    OrderId
    required
    string <= 36 characters

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

    Token
    required
    string

    Подпись запроса.

    Description
    string <= 140 characters

    Описание заказа. Значение параметра будет отображено на платежной форме.

    Для привязки и одновременной оплаты по СБП поле обязательное. При оплате через СБП эта информация отобразится в мобильном банке клиента.

    CustomerKey
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    • Обязателен, если передан атрибут Recurrent.
    • Если был передан в запросе, в нотификации будет указан CustomerKey и его CardId. Подробнее — в методе GetCardList.
    • Нужен для сохранения карт на платежной форме — платежи в один клик.
    • Необязателен при рекуррентных платежах через СБП.
    Recurrent
    string <= 1 characters

    Признак родительского рекуррентного платежа. Обязателен для регистрации автоплатежа.

    Если передается и установлен в Y, регистрирует платеж как рекуррентный. В этом случае после оплаты в нотификации на AUTHORIZED будет передан параметр RebillId для использования в методе Charge. Для привязки и одновременной оплаты по CБП передавайте Y.

    Значение зависит от атрибутов:

    • OperationInitiatorType — в методе /init,
    • Recurrent — в методе /Init.

    Подробнее — в описании методов Рекуррентный платёж и Инициализация платежа.

    PayType
    string
    Enum: "O" "T"

    Определяет тип проведения платежа — двухстадийная или одностадийная оплата:

    • O — одностадийная оплата,
    • T — двухстадийная оплата.

    Если параметр передан — используется его значение, если нет — значение из настроек терминала.

    Language
    string <= 2 characters

    Язык платежной формы:

    • ru — русский,
    • en — английский.

    Если не передан, форма откроется на русском языке.

    NotificationURL
    string <uri>

    URL на веб-сайте мерчанта, куда будет отправлен POST-запрос о статусе выполнения вызываемых методов — настраивается в личном кабинете. Если параметр:

    • передан — используется его значение,
    • не передан — значение из настроек терминала.
    SuccessURL
    string <uri>

    URL на веб-сайте мерчанта, куда будет переведен клиент в случае успешной оплаты — настраивается в личном кабинете. Если параметр:

    • передан — используется его значение,
    • не передан — значение из настроек терминала.
    FailURL
    string <uri>

    URL на веб-сайте мерчанта, куда будет переведен клиент в случае неуспешной оплаты — настраивается в личном кабинете. Если параметр:

    • передан — используется его значение,
    • не передан — значение из настроек терминала.
    RedirectDueDate
    any <date-time>

    Cрок жизни ссылки или динамического QR-кода СБП, если выбран этот способ оплаты.

    Если текущая дата превышает дату, которая передана в этом параметре, ссылка для оплаты или возможность платежа по QR-коду становятся недоступными и платёж выполнить нельзя.

    • Максимальное значение — 90 дней от текущей даты.
    • Минимальное значение — 1 минута от текущей даты.
    • Формат даты — YYYY-MM-DDTHH24:MI:SS+GMT.

    Пример даты: 2016-08-31T12:28:00+03:00.

    Если не передан, принимает значение 24 часа для платежа и 30 дней для счета.

    Выставление счета через личный кабинет

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

    • больше нуля — оно будет установлено в качестве срока жизни ссылки или динамического QR-кода;
    • меньше нуля — устанавливается значение по умолчанию: 1440 мин. (1 сутки).
    Common (object) or T-Pay (object) or LongPay (object)

    JSON-объект, который позволяет передавать дополнительные параметры по операции и задавать определенные настройки в формате ключ:значение.

    Максимальная длина для каждого передаваемого параметра:

    • ключ — 20 знаков;
    • значение — 100 знаков.

    Максимальное количество пар ключ:значение — 20.

    1. Если у терминала включена опция привязки клиента после успешной оплаты и передается параметр CustomerKey, в передаваемых параметрах DATA могут быть параметры метода AddCustomer. Если они есть, они автоматически привязываются к клиенту.

    Например, если указать "DATA":{"Phone":"+71234567890", "Email":"a@test.com"}, к клиенту автоматически будут привязаны данные электронной почты и телефон, и они будут возвращаться при вызове метода GetCustomer.

    Для МСС 4814 обязательно передать значение в параметре Phone. Требования по заполнению:

    • минимум — 7 символов,
    • максимум — 20 символов,
    • разрешены только цифры, исключение — первый символ может быть +.

    Для МСС 6051 и 6050 обязательно передавать параметр account — номер электронного кошелька, не должен превышать 30 символов.

    Пример: "DATA": {"account":"123456789"}.

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

      Возможные варианты:

      • Оставить платежную форму пустой. Пример:

        "DATA":{"DefaultCard":"none"}
        
      • Заполнить параметр данными передаваемой карты. В этом случае передается CardId. Пример:

         "DATA":{"DefaultCard":"894952"}
        
      • Заполнить параметр данными последней сохраненной карты. Применяется, если параметр DefaultCard не передан, передан с некорректным значением или в значении null. По умолчанию возможность сохранение карт на платежной форме может быть отключена. Для активации обратитесь в техническую поддержку.

    2. Если вы подключаете оплату через T‑Pay Web, обязательно передавайте параметры устройства, с которого будет осуществлен переход в объекте Data. Пример:

    "DATA": {
      "TinkoffPayWeb": "true",
      "Device": "Desktop",
      "DeviceOs": "iOS",
      "DeviceWebView": "true",
      "DeviceBrowser": "Safari"
     }
    

    Рекомендации для заполнения поля Device:

    • SDK — при способе интеграции «Мобильный SDK»;
    • Mobile — при оплате c мобильного устройства;
    • Desktop — при оплате c десктопного устройства.

    Рекомендации для заполнения поля DeviceOs:

    • iOS,
    • Android,
    • macOS,
    • Windows,
    • Linux.

    Рекомендации для заполнения поля DeviceBrowser:

    • Chrome,
    • Firefox,
    • JivoMobile,
    • Microsoft Edge,
    • Miui,
    • Opera,
    • Safari,
    • Samsung,
    • WebKit,
    • WeChat,
    • Yandex.
    1. Параметр notificationEnableSource позволяет отправлять нотификации, только если Source платежа входит в перечень указанных в параметре — он также есть в параметрах сессии. Возможные значения — T‑Pay, sbpqr. Пример:
    notificationEnableSource=TinkoffPay
    
    1. Для привязки и одновременной оплаты по CБП передавайте параметр QR = true.

    2. При передаче в объекте DATA атрибута OperationInitiatorType учитывайте взаимосвязь его значений:

      • Со значением атрибута Reccurent в методе /Init.
      • Со значением атрибута RebillId в методе /Charge.
      • С типом терминала, который используется для проведения операций — ECOM/AFT.

    Подробная таблица — передача признака инициатора операции

    Если передавать значения атрибутов, которые не соответствуют таблице, MAPI вернет ошибку 1126 — несопоставимые значения rebillId или Recurrent с переданным значением OperationInitiatorType.

    Receipt_FFD_105 (object) or Receipt_FFD_12 (object)

    JSON-объект с данными чека. Обязателен, если подключена онлайн-касса.

    Array of objects (Shops)

    JSON-объект с данными маркетплейса. Обязателен для маркетплейсов.

    Descriptor
    string

    Динамический дескриптор точки.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 140000,
    • "OrderId": "21090",
    • "Description": "Подарочная карта на 1000 рублей",
    • "Token": "68711168852240a2f34b6a8b19d2cfbd296c7d2a6dff8b23eda6278985959346",
    • "DATA": {
      },
    • "Receipt": {
      }
    }

    Response samples

    Content type
    application/json
    {}

    Проверить версию 3DS

    Для мерчантов с PCI DSS

    Проверяет поддерживаемую версию 3DS-протокола по карточным данным из входящих параметров.

    При использовании второй версии можно получить данные для дополнительного метода 3DS Method, который позволяет эмитенту собрать данные браузера клиента. Это может быть полезно при принятии решения в пользу Frictionless Flow — аутентификации клиента без редиректа на страницу ACS.

    Request Body schema: application/json
    required
    PaymentId
    required
    string <= 20 characters

    Идентификатор платежа в системе Т‑Кассы.

    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CardData
    required
    string

    Зашифрованные данные карты в формате:

    PAN=4300000000000777;ExpDate=0519;CardHolder=IVAN PETROV;CVV=111
    
    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "PaymentId": 13660,
    • "TerminalKey": "testRegressBank",
    • "CardData": "U5jDbwqOVx+2vDApxe/rfACMt+rfWXzPdJ8ZXxNFVIiZaLZrOW72bGe9cKZdIDnekW0nqm88YxRD↵jyfa5Ru0kY5cQV alU+juS1u1zpamSDtaGFeb8sRZfhj72yGw+io+qHGSBeorcfgoKStyKGuBPWfG↵d0PLHuyBE6QgZyIAM1XfdmNlV0UAxOnkTGDsskL pIt3AWhw2e8KOar0vwbgCTDjznDB1/DLgOW01↵Aj/bXyLJoG1BkOrPBm9JURs+f+uyFae0hkRicNKNgXoN5pJTSQxOEauOi6ylsVJ B3WK5MNYXtj6x↵GlxcmTk/LD9kvHcjTeojcAlDzRZ87GdWeY8wgg==",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e"
    }

    Response samples

    Content type
    application/json
    {
    • "Version": "2.1.0",
    • "TdsServerTransID": "17d3791b-5cfa-4318-bc23-3d949e8c4b7e",
    • "PaymentSystem": "mir",
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "None",
    • "Details": "None"
    }

    Подтвердить платеж

    Для мерчантов с PCI DSS

    Метод подтверждает платеж передачей реквизитов. При одностадийной оплате — списывает средства с карты клиента, при двухстадийной — блокирует указанную сумму. Используется, если у площадки есть сертификация PCI DSS и собственная платежная форма.

    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string

    Идентификатор терминала.
    Выдается мерчанту Т‑Кассой при заведении терминала.

    PaymentId
    required
    string <= 20 characters

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса.

    IP
    string

    IP-адрес клиента.

    Обязательный параметр для 3DS второй версии. DS платежной системы требует передавать данный адрес в полном формате, без каких-либо сокращений — 8 групп по 4 символа.

    Этот формат регламентируется на уровне спецификации EMVCo.

    Пример правильного адреса — 2011:0db8:85a3:0101:0101:8a2e:0370:7334.

    Пример неправильного адреса — 2a00:1fa1:c7da:9285:0:51:838b:1001.

    SendEmail
    boolean
    • true — отправлять клиенту информацию об оплате на почту;
    • false — не отправлять.
    Source
    string
    Enum: "cards" "beeline" "mts" "tele2" "megafon" "einvoicing" "webmoney"

    Источник платежа. Значение параметра зависит от параметра Route:

    • ACQcards. Также поддерживается написание Cards.
    • MCbeeline, mts, tele2, megafon.
    • EINVeinvoicing.
    • WMwebmoney.
    3DSv2 (object) or object

    JSON-объект, который содержит дополнительные параметры в виде ключ:значение. Эти параметры будут переданы на страницу оплаты, если она кастомизирована.

    Максимальная длина для каждого передаваемого параметра:

    • ключ — 20 знаков,
    • значение — 100 знаков.

    Максимальное количество пар ключ:значение — не больше 20.

    InfoEmail
    string <email>

    Электронная почта для отправки информации об оплате. Обязателен при передаче SendEmail.

    EncryptedPaymentData
    string

    Данные карты. Используется и является обязательным только для ApplePay или GooglePay.

    CardData
    required
    string

    Объект CardData собирается в виде списка ключ=значение c разделителем ;. Объект зашифровывается открытым ключом (X509 RSA 2048), и получившееся бинарное значение кодируется в Base64. Открытый ключ генерируется Т‑Кассой и выдается при регистрации терминала. Доступен в личном кабинете Интернет-эквайринга в разделе Магазины при изменении типа подключения на «Мобильное».

    Наименование Тип данных Обязательность Описание
    PAN Number Да Номер карты.
    ExpDate Number Да Месяц и год срока действия карты в формате MMYY.
    CardHolder String Нет Имя и фамилия держателя карты — как на карте.
    CVV String Нет Код защиты с обратной стороны карты. Для платежей по Apple Pay с расшифровкой токена на своей стороне необязательный.
    ECI String Нет Electronic Commerce Indicator. Индикатор, который показывает степень защиты, применяемую при предоставлении клиентом своих данных ТСП.
    CAVV String Нет Cardholder Authentication Verification Value или Accountholder Authentication Value.

    Пример значения элемента формы CardData:

    PAN=4300000000000777;ExpDate=0519;CardHolder=IVAN PETROV;CVV=111
    

    Для MirPay, если интеграция с НСПК для получения платежного токена:

    1. Передавайте Route=ACQ и Source= MirPay.

    2. ПВ DATA.transId передавайте значение transId.

    3. В DATA.tavv передавайте значение cav.

    4. Передавайте параметр CardData:

      • Pan заполняйте tan,
      • ExpDate заполняйте tem + tey.

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

    При получении CAVV в CardData оплата будет проводиться как оплата токеном — иначе прохождение 3DS будет регулироваться стандартными настройками треминала или платежа.

    Не используется и не является обязательным, если передается EncryptedPaymentData.

    Amount
    number <= 10 characters

    Сумма в копейках.

    deviceChannel
    string

    Канал устройства. Поддерживаются следующие каналы:

    • 01 = Application (APP),
    • 02 = Browser (BRW) — используется по умолчанию, передавать параметр не требуется.
    Route
    string
    Enum: "ACQ" "MC" "EINV" "WM"

    Способ платежа. Обязательный для ApplePay или GooglePay.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "700001702044",
    • "Token": "f5a3be479324a6d3a4d9efa0d02880b77d04a91758deddcbd9e752a6df97cab5",
    • "IP": "2011:0db8:85a3:0101:0101:8a2e:0370:7334",
    • "SendEmail": true,
    • "Source": "cards",
    • "DATA": {
      },
    • "InfoEmail": "qwerty@test.com",
    • "EncryptedPaymentData": "string",
    • "CardData": "eyJzaWduYXR1cmUiOiJNRVVDSVFEdjNJS1A5WG9nWml4RytUUm9zZWFDK0RGd3RKd2FtMHVEcm91RUVGZVB6Z0lnYXBFbHhxQ3AwQWtZcVVmTFVMaVNhUjBKWkVQNmg 4THFqYks5YkJKQnM5d1x1MDAzZCIsInByb3RvY29sVmVyc2lvbiI6IkVDdjEiLCJzaWduZWRNZXNzYWdlIjoie1wiZW5jcnlwdGVkTWVzc2FnZVwiOlwiQW11dm5OYUIralBsa3VKTitrMUZLSDZFcm1VK2lTY052 L05rR3FFaXIxOHZmSWxkVFJ5L2U4cW5zMXkyanFtcm1acU1JSWNYMUhyTHBxRURpaXkvS3B6SUhNZFllcXRkSVVNOU1tRjNpejU2d2NTZUVVaXU2ODI3QThGcitaYm8xRWtWRjY1TUxRYVY3NlBOUFRndH UvQ1BodW5HUk0rN25KdVhDczVtbkVvOHFma0RNVk8xWktGWDQ4TnVEL2FKcDJQdVVIY2puSnBTZ0pTSDB4U21YSnAzU1MreXFDNm54N254WUEwN2h4YjYvSnp2R2s3ZExDU2hWWGU1Z2haUjNDaFQyV W8rRnpXTWJRRGZtSjBLQW9kc2VlR0xaaitqMzVqOUlKMkhJRFhIUUZZMWNuTW9YVUVoTjgvdEkvRkpqRnJiYVdFRkIzRDZwOFUzT2tkUmVaNHAyYi8yYURNZXVxR1ozSUtjc3R0R2lKMFhQQVhhZXYyQU8 o1M3RRQXVqQXRYdFlaekNTVjVBVXdXZS85T1VcXHUwMDNkXCJ9In0=",
    • "Amount": 10000,
    • "deviceChannel": "02",
    • "Route": "ACQ"
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 100000,
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "NEW",
    • "PaymentId": "13660",
    • "ErrorCode": "0",
    • "Message": "Неверные параметры",
    • "Details": "0",
    • "RebillId": "21813157",
    • "CardId": "string"
    }

    Получить статуса платежа

    Метод возвращает статус платежа.

    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала.
    Выдается мерчанту Т‑Кассой при заведении терминала.

    PaymentId
    required
    string <= 20 characters

    Идентификатор платежа в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса.

    IP
    string

    IP-адрес клиента.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "13660",
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96",
    • "IP": "192.168.0.52"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 100000,
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "NEW",
    • "PaymentId": "13660",
    • "ErrorCode": "0",
    • "Message": "OK",
    • "Details": "0",
    • "Params": [
      ]
    }

    Получить статус заказа

    Метод возвращает статус заказа.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    OrderId
    required
    string

    Номер заказа в системе мерчанта.

    Не является уникальным идентификатором.

    Token
    required
    string

    Подпись запроса

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "OrderId": "21057",
    • "Token": "4c4c36adf9936b011879fa26f60759e7b47e57f7968283129b0ae9ac457486ab"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "OrderId": "21057",
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "OK",
    • "Details": "None",
    • "Payments": [
      ]
    }

    Получить справку по операции

    Справку по конкретной операции можно получить на:

    • URL-сервиса, который развернут на вашей стороне;
    • электронную почту.
    Чтобы сформировать токен, нужно использовать только PASSWORD и TERMINAL_KEY.

    Request Body schema: application/json
    One of
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CallbackUrl
    required
    string

    URL сервиса получения справок.

    PaymentIdList
    required
    Array of numbers

    JSON-массив, содержащий в себе перечень paymentID (уникальных идентификаторов в системе Т‑Кассы) c типом Number.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CallbackUrl": "https://www.tinkoff.ru",
    • "PaymentIdList": [
      ],
    • "Token": "f2fdd7fec8225872590e1558b7ea258c75df8f300d808006c41ab540dd7514d9"
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "Success": true,
    • "ErrorCode": 0,
    • "Message": "OK",
    • "PaymentIdList": [
      ]
    }

    Двухстадийный платеж

    Подтвердить платеж

    Метод для списания заблокированных денежных средств. Используется при двухстадийном проведении платежа. Применим только к платежам в статусе AUTHORIZED. Статус транзакции перед разблокировкой — CONFIRMING. Сумма списания может быть меньше или равна сумме авторизации.

    Подробнее про двухстадийный платеж

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    PaymentId
    required
    string <= 20 characters

    Идентификатор платежа в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса — хэш SHA-256.

    IP
    string

    IP-адрес клиента.

    Amount
    number

    Сумма в копейках. Если не передан, используется Amount, переданный в методе Init.

    Receipt_FFD_12 (object) or Receipt_FFD_105 (object)

    JSON-объект с данными чека. Обязателен, если подключена онлайн-касса.

    Array of objects (Shops)

    Обязательный для маркетплейсов. JSON-объект с данными маркетплейса.

    Route
    string
    Enum: "TCB" "BNPL"

    Способ платежа.

    Source
    string
    Enum: "installment" "BNPL"

    Источник платежа.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "2304882",
    • "Token": "c0ad1dfc4e94ed44715c5ed0e84f8ec439695b9ac219a7a19555a075a3c3ed24",
    • "IP": "192.168.255.255",
    • "Amount": 19200,
    • "Receipt": {
      },
    • "Shops": [
      ],
    • "Route": "BNPL",
    • "Source": "BNPL"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "OrderId": "21057",
    • "Success": true,
    • "Status": "CONFIRMED",
    • "PaymentId": "2304882",
    • "ErrorCode": "0",
    • "Message": "OK",
    • "Details": "None",
    • "Params": [
      ]
    }

    Прохождение 3DS

    ВАЖНО! Тестовый терминал (DEMO) не поддерживает проверку 3DS. Для тестирования 3DS нужно использовать боевой терминал в связке с тестовой средой (https://rest-api-test.tinkoff.ru/v2)

    Подтвердить прохождение 3DS v1.0

    Для мерчантов с PCI DSS

    Проверяет результаты прохождения 3-D Secure и при успешном прохождении подтверждает инициированный платеж. При использовании:

    • одностадийной оплаты — списывает денежные средства с карты клиента;
    • двухстадийной оплаты — блокирует указанную сумму на карте клиента.

    Формат запроса — x-www-form-urlencoded.

    После того, как мерчант получит ответ ACS с результатами прохождения 3-D Secure на TermUrl, нужно отправить запрос через метод Submit3DSAuthorization.

    Request Body schema: application/x-www-form-urlencoded
    required
    MD
    required
    string

    Уникальный идентификатор транзакции в системе. Возвращается в ответе от ACS.

    PaRes
    required
    string

    Шифрованная строка, содержащая результаты 3-D Secure аутентификации. Возвращается в ответе от ACS.

    PaymentId
    string

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    TerminalKey
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    Token
    string

    Подпись запроса.

    Responses

    Request samples

    <body onload="document.form.submit()">
    <form name="form" action="https://rest-api-test.tinkoff.ru/v2/Submit3DSAuthorization" method="post">
      <input type="hidden" name="MD" value="2561504">
      <input type="hidden" name="PaRes" value="eJxVUttygjAU/BWG1w4mXKXOMY5WOrVTrOOtl7cAqeJI1AAO+vVNFKrlaffkZM9mD9Crsq12ZCJPd7yrmy2sa4zHuyTlq66+mD8bvt4jMF8LxoYzFpeCEQhZntMV09JE3vC8Hx9j27A8LzEcN7aNCPu24VIrihKXetiPdAKT/pQdCNSDiJzTsgA1VCqKeE15QYDGh8FoTBy73fZtQDWFjInRkFi4+Uz82JbH1zJwmjEyHcwAXRDEu5IX4kQ8R/Y0BEqxJeui2HcQOlGesKolSkCqCuhmYFIqlEuVKk3IDL8uPwI3jDaBGZ4XeLxZVeFw5I7nX11AqgMSWjDpzPSxb/ma6XRct4Pl4y51oJkar5zLx1wx7NWI/t3BfQFkxkKuoHHfMGDVfseZugLoDwO6+X16UfHFhUyk/32OMH3vZ5+nYBu/2d4xcMTDsn04j19VqJcmpZjKYKT3q6QigJQMqveF6lVL9O8X+AWMIbbt">
      <input type="hidden" name="PaymentId" value="10063">
      <input type="hidden" name="TerminalKey" value="TinkoffBankTest">
      <input type="hidden" name="Token" value="871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6" >
    </form>
    

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "CONFIRMED",
    • "PaymentId": "10063",
    • "ErrorCode": "0",
    • "Message": "string",
    • "Details": "string"
    }

    Подтвердить прохождение 3DS v2.1

    Для мерчантов с PCI DSS

    Проверяет результаты прохождения 3-D Secure и при успешном прохождении подтверждает инициированный платеж. При использовании:

    • одностадийной оплаты — списывает денежные средства с карты клиента;
    • двухстадийной оплаты — блокирует указанную сумму на карте клиента.

    Формат запроса — x-www-form-urlencoded.

    После того, как мерчант получит ответ ACS с результатами прохождения 3-D Secure на cresCallbackUrl, нужно отправить запрос через метод Submit3DSAuthorizationV2.

    Request Body schema: application/x-www-form-urlencoded
    required
    PaymentId
    required
    string

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    <body onload="document.form.submit()">
    <form name="form" action="https://rest-api-test.tinkoff.ru/v2/Submit3DSAuthorizationV2" method="post">
      <input type="hidden" name="PaymentId" value="10063">
      <input type="hidden" name="TerminalKey" value="TinkoffBankTest">
      <input type="hidden" name="Token" value="871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6" >
    </form>
    

    Response samples

    Content type
    application/json
    {
    • "OrderId": "21050",
    • "TerminalKey": "TinkoffBankTest",
    • "Status": "CONFIRMED",
    • "PaymentId": "10063",
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "string",
    • "Details": "string"
    }

    Рекуррентный платеж

    Автоплатеж

    Схема проведения рекуррентного платежа

    Метод проводит рекуррентный (повторный) платеж — безакцептное списание денежных средств со счета банковской карты клиента. Чтобы его использовать, клиент должен совершить хотя бы один платеж в пользу мерчанта, который должен быть указан как рекуррентный (параметр Recurrent методе Init), но фактически являющийся первичным.

    После завершения оплаты в уведомлении на AUTHORIZED или CONFIRMED будет передан параметр RebillId.

    В дальнейшем для проведения рекуррентного платежа мерчант должен вызвать метод Init, указать нужную сумму для списания в параметре Amount, а затем без переадресации на PaymentURL вызвать метод Charge для оплаты по тем же реквизитам и передать параметр RebillId, полученный при совершении первичного платежа.

    Метод Charge работает по одностадийной и двухстадийной схеме оплаты. Чтобы перейти на двухстадийную схему, нужно переключить терминал в личном кабинете и написать на acq_help@tbank.ru с просьбой переключить схему рекуррентов.

    По умолчанию метод Charge отключен. Чтобы его включить:

    • на DEMO-терминале — напишите на acq_help@tbank.ru;
    • на боевом терминале — обратитесь к своему персональному менеджеру.

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

    • Со значениями атрибутов OperationInitiatorType и Reccurent метода Init;
    • С типом терминала, который используется для проведения операций — ECOM или AFT.

    Допустимые сценарии взаимосвязи:

    CIT/MIT Тип операции OperationInitiator в Init RebillId в Charge Recurrent в Init AFT-терминал ECOM-терминал
    CIT Credential-Not-Captured 0 null N Разрешено Разрешено
    CIT Credential-Captured 1 null Y Разрешено Разрешено
    CIT Credential-on-File 2 not null N Запрещено Разрешено
    MIT Credential-on-File, Recurring R not null N Запрещено Разрешено
    MIT Credential-on-File, Installment I not null N Разрешено Запрещено

    Если передавать значения атрибутов, которые не соответствуют значениям в таблице, MAPI вернет ошибку 1126 — несопоставимые значения RebillId или Recurrent с переданным значением OperationInitiatorType.

    Одностадийная оплата

    1. Проведите родительский платеж через метод Init с указанием дополнительных параметров Recurrent=Y и CustomerKey.
    2. Только для мерчантов без PCI DSS — переадресуйте клиента на PaymentUrl.
    3. После того как клиент оплатит заказ, в уведомлении о статусе AUTHORIZED или CONFIRMED будет передан параметр RebillId. Сохраните его.
    4. Через некоторое время для выполнения рекуррентного платежа вызовите метод Init со стандартными параметрами — параметры Recurrent и CustomerKey в этом случае не нужны. Вернется параметр PaymentId — сохраните его.
    5. Вызовите метод Charge с параметром RebillId из пункта 3 и PaymentId из пункта 4. При успешном сценарии операция перейдет в статус CONFIRMED.

    Двухстадийная оплата

    1. Проведите родительский платеж через метод Init с указанием дополнительных параметров Recurrent=Y и CustomerKey.
    2. Только для мерчантов без PCI DSS — переадресуйте клиента на PaymentUrl.
    3. После того как клиент оплатит заказ, в уведомлении о статусе AUTHORIZED или CONFIRMED будет передан параметр RebillId. Сохраните его.
    4. Через некоторое время для выполнения рекуррентного платежа вызовите метод Init со стандартными параметрами — параметры Recurrent и CustomerKey в этом случае не нужны. Вернется параметр PaymentId — сохраните его.
    5. Вызовите метод Charge с параметром RebillId из пункта 3 и PaymentId из пункта 4.
    6. Вызовите метод Confirm для подтверждения платежа.
    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала.
    Выдается мерчанту Т‑Кассой при заведении терминала.

    PaymentId
    required
    string <= 20 characters

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    RebillId
    required
    string

    Идентификатор рекуррентного платежа. Значение зависит от атрибутов:

    • OperationInitiatorType в методе init,
    • Recurrent в методе Init.

    Подробнее — в описаниях Рекуррентный платёж и Инициализация платежа

    Token
    required
    string

    Подпись запроса.

    IP
    string

    IP-адрес клиента.

    SendEmail
    boolean

    true — если клиент хочет получать уведомления на почту.

    InfoEmail
    string <email>

    Адрес почты клиента. Обязателен при передаче SendEmail.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "700001702044",
    • "RebillId": "145919",
    • "Token": "f5a3be479324a6d3a4d9efa0d02880b77d04a91758deddcbd9e752a6df97cab5",
    • "IP": "2011:0db8:85a3:0101:0101:8a2e:0370:7334",
    • "SendEmail": true,
    • "InfoEmail": "customer@test.com"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 100000,
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "NEW",
    • "PaymentId": "13660",
    • "ErrorCode": "0",
    • "Message": "string",
    • "Details": "string"
    }

    Отмена платежа

    Отменить платеж

    Отменяет платежную сессию. В зависимости от статуса платежа, переводит его в следующие состояния:

    • NEWCANCELED;
    • AUTHORIZEDPARTIAL_REVERSED, если отмена не на полную сумму;
    • AUTHORIZEDREVERSED, если отмена на полную сумму;
    • CONFIRMEDPARTIAL_REFUNDED, если отмена не на полную сумму;
    • CONFIRMEDREFUNDED, если отмена на полную сумму.

    При оплате в рассрочку платеж можно отменить только в статусе AUTHORIZED. При оплате «Долями» делается частичный или полный возврат, если операция в статусе CONFIRMED или PARTIAL_REFUNDED.

    Если платеж находился в статусе AUTHORIZED, холдирование средств на карте клиента отменяется. При переходе из статуса CONFIRMED денежные средства возвращаются на карту клиента.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    PaymentId
    required
    string

    Идентификатор платежа в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса — хэш SHA-256.

    IP
    string

    IP-адрес клиента.

    Amount
    number

    Сумма в копейках. Если не передан, используется Amount, переданный в методе Init.

    При отмене статуса NEW поле Amount игнорируется, даже если оно заполнено. Отмена производится на полную сумму.

    Receipt_FFD_12 (object) or Receipt_FFD_105 (object)

    JSON-объект с данными чека. Обязателен, если подключена онлайн-касса.

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

    Array of objects (ShopsCancel)

    Обязательный для маркетплейсов. JSON-объект с данными маркетплейса.

    QrMemberId
    string

    Код банка в классификации СБП, в который нужно выполнить возврат. Смотрите параметр MemberId методе QrMembersList.

    Route
    string
    Enum: "TCB" "BNPL"

    Способ платежа.

    Source
    string
    Enum: "installment" "BNPL"

    Источник платежа.

    ExternalRequestId
    string <= 256 characters

    Идентификатор операции на стороне мерчанта. Параметр не работает для операций по СБП. Обязателен для операций «Долями» и в рассрочку.

    • Если поле не передано или пустое (""), запрос будет обработан без проверки ранее созданных возвратов.
    • Если поле заполнено, перед проведением возврата проверяется запрос на отмену с таким ExternalRequestId.
    • Если такой запрос уже есть, в ответе вернется текущее состояние платежной операции, если нет — платеж отменится.
    • Для операций «Долями» при заполнении параметра нужно генерировать значение в формате UUID v4.
    • Для операций в рассрочку при заполнении параметра нужно генерировать значение с типом string — ограничение 100 символов.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "2304882",
    • "Token": "c0ad1dfc4e94ed44715c5ed0e84f8ec439695b9ac219a7a19555a075a3c3ed24",
    • "IP": "192.168.255.255",
    • "Amount": 19200,
    • "Receipt": {
      },
    • "Shops": [
      ],
    • "QrMemberId": "77892",
    • "Route": "BNPL",
    • "Source": "BNPL",
    • "ExternalRequestId": "string"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "OrderId": "21057",
    • "Success": true,
    • "Status": "REVERSED",
    • "OriginalAmount": 13000,
    • "NewAmount": 5000,
    • "PaymentId": "2304882",
    • "ErrorCode": "0",
    • "Message": "OK",
    • "Details": "None",
    • "ExternalRequestId": "756478567845678436"
    }

    СБП

    Про оплаты по QR

    • Покупатель выбирает банк на своём устройстве — через API это настроить нельзя.
    • Если оплата СБП отклоняется на стороне эмитента, эквайер на своей стороне не может повлиять на это.
    • На платежной форме банка при выборе способа оплаты СБП отображается QR-код с текстом «Отсканируйте в приложении Т-Банка». Мы указываем только информацию о Т-Банке, потому что не можем гарантировать, что другие банки позволяют сканировать QR-коды в своих приложениях.
    • По СБП нет двухстадийной оплаты, поэтому средства нельзя захолдировать даже при рекуррентном платеже.
    • СБП не работает для маркетплейсов.
    • Протестировть оплату через СБП можно только на PROD-окружении и DEMO-терминале.

    URL: https://securepay.tinkoff.ru/v2/

    Статусная модель платежа

    В процессе обработки платеж меняет свое состояние. Основные статусы и условия перехода в них:

    Статус Правило перехода
    NEW MAPI получил запрос Init. После этого он создает новый платеж со статусом NEW и возвращает его идентификатор в параметре PaymentId, а также ссылку на платежную форму в параметре PaymentURL.
    FORM_SHOWED Мерчант перенаправил клиента на страницу платежной формы PaymentURL и страница загрузилась у клиента в браузере.
    AUTHORIZING Платеж обрабатывается MAPI и платежной системой.
    AUTHORIZED Платеж авторизован, деньги заблокированы на карте клиента.
    CONFIRMING Подтверждение платежа обрабатывается MAPI и платежной системой.
    CONFIRMED Платеж подтвержден, деньги списаны с карты клиента.
    REFUNDING Мерчант запросил отмену подтвержденного платежа. Возврат обрабатывается MAPI и платежной системой.
    ASYNC_REFUNDING Обработка возврата денежных средств по QR.
    PARTIAL_REFUNDED Частичный возврат по подтвержденному платежу завершился успешно.
    REFUNDED Полный возврат по подтвержденному платежу завершился успешно.
    CANCELED Мерчант отменил платеж.
    DEADLINE_EXPIRED 1. Клиент не завершил платеж в срок жизни ссылки на платежную форму PaymentURL. Этот срок мерчант настраивает в личном кабинете или передает в методе Init в параметре RedirectDueDate.
    2. Платеж не прошел проверку 3D-Secure в срок.
    ATTEMPTS_EXPIRED Клиент превысил количество попыток открытия формы.
    REJECTED Банк отклонил платеж.
    AUTH_FAIL Платеж завершился ошибкой или не прошел проверку 3D-Secure.
    Полный жизненный цикл платежа — схема

    scheme

    Привязка счёта

    Таблица статусов привязки счёта

    Статус Правило перехода
    NEW MAPI получил запрос AddAccountQr или GetQr для сессии с рекуррентным платежом.
    PROCESSING QR сформирован и отправлен мерчанту.
    ACTIVE Привяза счета прошла успешно.
    INACTIVE Банк отклонил привязку счета.
    Схема привязки счёта
    Схема с переходами статуса привязки счета при оплате с одновременной привязкой

    Изменения статуса платежа в этой операции показаны на схеме полного цикла платежа.

    Рекуррентный платеж

    Таблица статусов рекуррентного платежа

    Статус Правило перехода
    NEW MAPI получил запрос Init. После этого он создает новый платеж в статусе NEW и возвращает его идентификатор в параметре PaymentId.
    FORM_SHOWED MAPI принял запрос на обработку платежа. Ожидается подтверждение от НСПК о проведении оплаты по привязке.
    AUTHORIZING MAPI принял запрос от НСПК на авторизацию платежа.
    AUTHORIZED Платеж авторизован, деньги заблокированы на карте клиента.
    CONFIRMING Подтверждение платежа обрабатывается MAPI и платежной системой.
    CONFIRMED Платеж подтвержден, деньги списаны с карты клиента.
    REFUNDING Мерчант запросил отмену подтвержденного платежа. Возврат обрабатывается MAPI и платежной системой.
    ASYNC_REFUNDING Обработка возврата денежных средств по QR.
    PARTIAL_REFUNDED Частичный возврат по подтвержденному платежу завершился успешно.
    REFUNDED Полный возврат по подтвержденному платежу завершился успешно.
    CANCELED Мерчант отменил платеж.
    REJECTED Банк отклонил платеж.
    Схема проведения рекуррентого платежа
    Логика привязки при наличии нескольких терминалов

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

    Процесс выглядит так:

    1. Мерчанту принадлежат терминалы А и Б, покупатель ранее проводил оплату только по терминалу А.
    2. Покупатель пробует провести рекуррентный платеж по терминалу Б.
    3. Система проверяет наличие привязки по терминалу Б.
    4. Так как привязка по этому терминалу не проводилась, система с помощью идентификатора магазина проверяет наличие привязки на других терминалах мерчанта.
    5. Система успешно находит привязку по терминалу А и разрешает проведение рекуррентного платежа.

    Подключение СБП

    1. Откройте расчетный счёт в Т‑Банке — для этого заполните заявку.

      Для подключения СБП клиент должен быть резидентом. Если клиент нерезидент, СБП работать не будет.

    2. Подключите интернет-эквайринг — подайте заявку на подключение интернет-эквайринга и заполните данные об организации и магазине.

    3. Выберите доступные типы интеграций.

      СБП доступен для следующих типов интеграций:

      • Платежный виджет.
      • Платежный API.
      • Мобильный SDK.
      • Через Агента ТСП.
      • Стикер с QR-кодом для размещения на кассе.
    4. Настройте интеграцию на сайте, в мобильном приложении или любом другом интерфейсе.

    Включение

    Расчётный счёт в Т‑Банке должен быть установлен в магазине как счёт для выплат.

    СПБ включается в личном кабинете:

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

    2. На плашке Система быстрых платежей нажмите Настроить.

    3. Выберите способ интеграции, который планируете использовать:

    Платежная форма Т‑Банка

    Выберите вкладку Платежная форма Т‑Банка и нажмите Включить.

    После подключения на экране появится сообщение «Система быстрых платежей включена».

    Собственная платежная форма

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

    После подключения на экране появится сообщение «Система быстрых платежей включена».

    Приложение

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

    После подключения на экране появится сообщение «Система быстрых платежей включена».

    Статический QR

    Вне зависимости от того, какой способ интеграции вы используете, вы всегда можете скачать статический QR-код в разделе Статический QR-код.

    Настройка интеграций при включении способа оплаты СБП

    Платежная форма Т‑Банка

    После подключения СБП в личном кабинете, QR код автоматически отобразится на платежной форме — дополнительно ничего интегрировать не нужно.

    Как интегрировать платежную форму на сайт

    Платёжные формы Т‑Банка:

    Мобильная
    Десктопная

    Способ Оплата картой обязательный — отключить его нельзя. Все остальные способы опциональные — их можно отключить в личном кабинете.

    API

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

    SDK

    Если ваша интеграция предусматривает использование мобильного приложения, в SDK нужно передать специальные параметры для отображения QR кода — IOS, Android.

    Интерфейс SDK Т‑Банка

    Агентская интеграция

    Если ваша интеграция настроена с Агентом ТСП:

    1. Создайте магазин типа Выставление счета.
    2. Включите СБП в способах оплаты.
    3. Сообщите Агенту ТСП об успешном включении.

    Прием платежей с помощью стикеров с QR-кодом

    Стикер со статичным QR кодом — платежный QR-код, который размещается в кассовой зоне магазина. Его можно скачать в личном кабинете после создания магазина.

    Получить стикер

    Чтобы получить стикер с QR-кодом:

    1. Создайте магазин с выставлением счета. Если у вас уже есть магазин, переходите к пункту 2.
    2. В разделе Способы оплаты перейдите в настройки СБП.
    3. В разделе Статический QR нажмите Скачать.
    4. Распечатайте и разместите QR-код в кассовой зоне вашего магазина.
    QR-стикер Т‑Банка

    Покупателю будет нужно отсканировать стикер с QR-кодом, ввести сумму и подтвердить оплату.

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

    Уведомления об оплате

    После оплаты вам придет уведомление на электронную почту или по HTTP на ваш сервер — в зависимости от настроек.

    Магазин — Выставление счетов

    Уведомления настраиваются по почте — acq_help@tbank.ru.

    Магазин — Интернет-магазин

    Если у вас уже есть интернет-магазин, уведомления можно настроить самостоятельно в разделе Терминал.

    Настроить выбор банка при интеграции по API

    Если вы интегрировались по API, можно настроить выбор банка при оплате по СБП. Для этого нужно создать прямую ссылку, которая перенаправит клиента в конкретное приложение банка при нажатии на нее.

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

    Пример

    Функциональная ссылка — https://qr.nspk.ru/AS10004UVOQ9J4I489A8SG8NIA6P3F8B. Меняем HTTPS на соответствующую schema Т‑Банка — bank100000000004://qr.nspk.ru/AS10004UVOQ9J4I489A8SG8NIA6P3F8B. Для каждого из банков нужно сделать такую прямую ссылку и отобразить список банков на вашей платёжной форме.

    Виджет СБП

    СБП можно интегрировать с помощью виджета.

    Подключение платежного виджета

    Установка платежного виджета на сайт

    Вставьте код на ваш сайт туда, где должна располагаться кнопка Оплатить через СБП:

    <html lang="ru">
    <head> 
    <script defer src="https://securepay.tinkoff.ru/html/payForm/js/tinkoff_v2.js"></script> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    </head> 
    <body> 
    <style>.tinkoffPayRow{display:block;margin:1%;width:160px;}</style> 
    <!--    tinkoffWidgetContainer – уникальный id, задается произвольно-->
    <div id="tinkoffWidgetContainer1"></div> 
    <form name="TinkoffPayForm"> 
    <input class="tinkoffPayRow" type="hidden" name="terminalkey" value=""/> 
    <input class="tinkoffPayRow" type="hidden" name="language" value="ru" /> 
    <input class="tinkoffPayRow" type="text" placeholder="Сумма заказа" name="amount" value="111" required min="10.00"/> <input class="tinkoffPayRow" type="text" placeholder="Номер заказа" name="order"/> 
    <input class="tinkoffPayRow" type="text" placeholder="Описание заказа" name="description"/> 
    <input class="tinkoffPayRow" type="text" placeholder="ФИО плательщика" name="name"/> 
    <input class="tinkoffPayRow" type="text" placeholder="E-mail" name="email"/> 
    <input class="tinkoffPayRow" type="text" placeholder="Контактный телефон" name="phone"/> 
    </form> 
    </body>
    

    Сумма заказа amount указывается в рублях, копейки — через точку.

    Формирование чека

    Добавьте в код поле ввода receipt:

    <input class="tinkoffPayRow" type="hidden" name="receipt" value="">
    

    В значении атрибута value поля receipt указываются параметры чека. Пример добавленного код:

     const form = document.forms.TinkoffPayForm;
    
          // Данные для чека
          Object.defineProperty(form.receipt, 'value', {
            get: function () {
              return JSON.stringify({
                Email: form.email.value,
                Phone: form.phone.value,
                EmailCompany: 'mail@mail.com',
                Taxation: 'patent',
                Items: [
                  {
                    Name: form.description.value || 'Оплата',
                    Price: form.amount.value + '00',
                    Quantity: 1.0,
                    Amount: form.amount.value + '00',
                    PaymentMethod: 'full_prepayment',
                    PaymentObject: 'service',
                    Tax: 'none',
                  },
                ],
              });
            },
          });
    

    Настройка оплаты товаров

    Для подключения оплаты по СБП для одного и более товаров в методе InitPayments нужно передавать массив paymentItems — это настройки, которые определяют размещение платёжных кнопок и информацию о платеже.

    Пример кода:

      const terminalkey = document.forms.TinkoffPayForm.terminalkey;
    
      const widgetParameters = {
        terminalKey: terminalkey.value,
        paymentItems: [
          {
            container: document.getElementById("tinkoffWidgetContainer1"),
            paymentInfo: function () {
              return {
                paymentData: document.forms.TinkoffPayForm,
              };
            },
          },
        ],
        paymentSystems: { TinkoffFps: {} },
      };
    
      window.addEventListener("load", function () {
        initPayments(widgetParameters);
      });
    

    Структура объекта массива paymentItems:

    Наименование Обязательный Тип данных Описание
    container Да HTMLFormElement Элемент, в который вставляют кнопки
    paymentInfo Да Function/Object Информация о платеже

    Настройка платежного виджета

    Вставьте идентификатор магазина в код платежного виджета в значение параметра terminalkey. Идентификатор магазина выдаётся банком — его можно получить в личном кабинете: раздел Магазины → вкладка Терминалы:

    Если вам нужно изменить состав полей платежного виджета, у полей, которые хотите скрыть, укажите type = hidden:

    <input class="tinkoffPayRow" type="hidden" placeholder="ФИО клиента" name="name"> 
    

    Если вам нужно сделать поле обязательным для заполнения, добавьте к нему параметр required:

    <input class="tinkoffPayRow" type="text" placeholder="E-mail" name="email" required>
    

    Платежный виджет стилизует магазин. Ограничений на стилизацию со стороны Т‑Банка нет:

    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <input class="tinkoffPayRow" type="hidden" placeholder="ФИО плательщика" name="name"> 
    <input class="tinkoffPayRow" type="text" placeholder="E-mail" name="email" required> 
    <input class="tinkoffPayRow" type="hidden" name="terminalkey" value="Идентификатор вашего магазина"> 
    

    Проверить статус платежа можно:

    • В личном кабинете интернет-эквайринга, просмотрев операции по СБП.
    • По API — через метод GetState или с помощью уведомлений по HTTP или на электронную почту. Подробнее.

    Тестирование QR

    Протестировать оплату через СБП можно только на PROD-окружении и DEMO-терминале

    Сценарий «Платеж — успех»

    1. Инициируйте начало платежной сессии — вызовите метод Init.
    2. Запросите формирование динамического QR-кода через метод GetQr.
    3. Отобразите динамический QR-код на странице клиенту.
    4. Вызовите метод SbpPayTest, передавав в нем внутренний идентификатор платежной сессии Т‑Кассы — PaymentId.
    5. Запросите текущий статус платежа через метод GetState.
    6. Вернется ответ со статусом CONFIRMED.

    Сценарий «Платеж — отказ по таймауту»

    1. Инициируйте начало платежной сессии — вызовите метод Init.
    2. Запросите формирование динамического QR-кода через метод GetQr.
    3. Отобразите динамический QR-код на странице клиенту.
    4. Вызовите метод SbpPayTest, передавав в нем внутренний идентификатор платежной сессии Т‑Кассы (PaymentId) и параметр IsDeadlineExpired = true.
    5. Запросите текущий статус платежа через метод GetState.
    6. Вернется ответ со статусом DEADLINE_EXPIRED.

    Сценарий «Платеж — отказ, отклонен Т‑Кассой»

    1. Инициируйте начало платежной сессии — вызовите метод Init.
    2. Запросите формирование динамического QR-кода через метод GetQr.
    3. Отобразите динамический QR-код на странице клиенту.
    4. Вызовите метод SbpPayTest, передавав в нем внутренний идентификатор платежной сессии Т‑Кассы (PaymentId) и параметр IsRejected = true.
    5. Запросите текущий статус платежа через метод GetState.
    6. Вернется ответ со статусом REJECTED.

    Сценарий «Возврат — успех»

    1. Инициируйте возврат (не отмену) тестового платежа по QR-коду СБП, который успешно выполнен в тесте «Платеж-успех», через метод Cancel.
    2. Запросите текущий статус платежа через метод GetState.
    3. Вернется ответ со статусом REFUNDED.

    Инициировать платеж в виджете

    Request Body schema: application/json
    required
    container
    string

    ID элемента или элемент, в который вставляются кнопки.

    TerminalKey
    required
    string

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

    object (PaymentInfos)

    Информация о платеже.

    Array of items

    Список объектов с информацией о размещаемых кнопках.

    T-Payweb (object) or TbankFps (object)

    Объект с информацией о платежных системах.

    Responses

    Request samples

    Content type
    application/json
    {
    • "container": "string",
    • "TerminalKey": "string",
    • "paymentInfo": {
      },
    • "paymentItems": [
      ],
    • "paymentSystems": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "Success": "true"
    }

    Сформировать QR

    Метод регистрирует QR и возвращает информацию о нем. Вызывается после метода Init.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    PaymentId
    required
    number

    Уникальный идентификатор транзакции в системе Т‑Кассы. Запрос будет работать, даже если указать значение в формате string.

    DataType
    string
    Default: "PAYLOAD"
    Enum: "PAYLOAD" "IMAGE"

    Тип возвращаемых данных:

    • PAYLOAD — в ответе возвращается только Payload — по умолчанию;
    • IMAGE — в ответе возвращается SVG изображение QR.
    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": 10063,
    • "DataType": "PAYLOAD",
    • "Token": "871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6"
    }

    Response samples

    Content type
    application/json
    Example
    {}

    Получить список банков-пользователей QR

    Метод возвращает список участников куда может быть осуществлен возврат платежа, совершенного по QR.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    PaymentId
    required
    string

    Уникальный идентификатор транзакции в системе. Т‑Кассы

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "10063",
    • "Token": "871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6"
    }

    Response samples

    Content type
    application/json
    {
    • "Members": [
      ],
    • "OrderId": "21050",
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "OK"
    }

    Привязать счёт к магазину

    Метод инициирует привязку счета клиента к магазину и возвращает информацию о нем

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    Description
    required
    string

    Подробное описание деталей заказа.

    DataType
    string
    Default: "PAYLOAD"
    Enum: "PAYLOAD" "IMAGE"

    Тип возвращаемых данных:

    • PAYLOAD — в ответе возвращается только Payload. Значение по умолчанию.
    • IMAGE — в ответе возвращается SVG-изображение QR.
    object

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

    • ключ — 20 знаков,
    • значение — 100 знаков.

    Максимальное количество пар ключ:значение — не больше 20.

    RedirectDueDate
    string <datatime>

    Cрок жизни ссылки или динамического QR-кода СБП, если выбран этот способ оплаты. Если параметр RedirectDueDate не был передан, проверяется настроечный параметр платежного терминала REDIRECT_TIMEOUT, который может содержать значение срока жизни ссылки в часах. Если его значение больше нуля, оно будет установлено в качестве срока жизни ссылки или динамического QR-кода, если нет — устанавливается значение по умолчанию: 1440 мин (1 сутки).

    Если текущая дата превышает дату, переданную в этом параметре, ссылка для оплаты или возможность платежа по QR-коду становятся недоступными и платёж выполнить нельзя.

    • Максимальное значение — 90 дней от текущей даты.
    • Минимальное значение — 1 минута от текущей даты.
    • Формат даты — YYYY-MM-DDTHH24:MI:SS+GMT.
    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Description": "string",
    • "DataType": "PAYLOAD",
    • "Data": {
      },
    • "RedirectDueDate": "2016-08-31T12:28:00+03:00",
    • "Token": "871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6"
    }

    Response samples

    Content type
    application/json
    {}

    Получить статус привязки счета к магазину

    Метод возвращает статус привязки счета клиента по магазину

    Request Body schema: application/json
    RequestKey
    required
    string <uuid>

    Идентификатор запроса на привязку счета.

    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала. Выдается мерчанту Т‑Кассой при заведении терминала.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "RequestKey": "13021e10-a3ed-4f14-bcd1-823b5ac37390",
    • "TerminalKey": "TinkoffBankTest",
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "testRegress",
    • "RequestKey": "211258",
    • "BankMemberId": "100000000004",
    • "BankMemberName": "T-Банк",
    • "AccountToken": "a022254a5c3c46a7327c8a12cb5c8389",
    • "Success": true,
    • "Status": "ACTIVE",
    • "ErrorCode": "0",
    • "Message": "OK"
    }

    Получить список счетов, привязанных к магазину

    Метод возвращает список привязанных счетов клиента по магазину

    Request Body schema: application/json
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала. Выдается мерчанту Т‑Кассой при заведении терминала.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "testRegress",
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "OK",
    • "AccountTokens": {
      }
    }

    Автоплатеж по QR

    Проведение платежа по привязанному счету по QR через СБП. Для возможности его использования клиент должен совершить успешную привязку счета с  помощью метода AddAccountQr. После вызова метода будет отправлена нотификация на Notification URL о привязке счета , в которой будет указан AccountToken. Для совершения платежа по привязанному счету Мерчант должен вызвать метод Init, в котором поля  Recurrent= Y и DATA= {“QR”:“true”}, а затем вызвать метод ChargeQr для оплаты по тем же самым  реквизитам и передать параметр AccountToken, полученный после привязки счета по QR в  нотификации.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала.
    Выдается мерчанту Т‑Кассой при заведении терминала.

    PaymentId
    required
    string

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    AccountToken
    required
    string

    Идентификатор привязки счета, назначаемый банком-эмитентом.

    Token
    required
    string

    Подпись запроса.

    IP
    string

    IP-адрес клиента.

    SendEmail
    boolean

    true, если клиент хочет получать уведомления на почту.

    InfoEmail
    string <email>

    Адрес почты клиента. Обязательно, если передан параметр SendEmail = true.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "700001702044",
    • "AccountToken": "70LSS7DN18SJQRS10006DNPKLJL24B05",
    • "Token": "f5a3be479324a6d3a4d9efa0d02880b77d04a91758deddcbd9e752a6df97cab5",
    • "IP": "2011:0db8:85a3:0101:0101:8a2e:0370:7334",
    • "SendEmail": true,
    • "InfoEmail": "customer@test.com"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 100000,
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "CONFIRMED",
    • "PaymentId": "13660",
    • "ErrorCode": "0",
    • "Message": "Неверные параметры",
    • "Details": "string",
    • "Currency": 643
    }

    Создать тестовую платежную сессию

    Тестовая платежная сессия с предопределенным статусом по СБП.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    PaymentId
    required
    string <= 20 characters

    Идентификатор платежа в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса.

    IsDeadlineExpired
    boolean

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

    • false — эмуляция не требуется,
    • true — требуется эмуляция. Не может быть использован вместе с IsRejected = true.
    IsRejected
    boolean

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

    • false — эмуляция не требуется,
    • true — требуется эмуляция. Не может быть использован вместе с IsDeadlineExpired = true.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "13660",
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96",
    • "IsDeadlineExpired": true,
    • "IsRejected": false
    }

    Response samples

    Content type
    application/json
    {
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "OK",
    • "Details": "0"
    }

    Получить статус возврата

    Возвращает статус возврата платежа по СБП

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой

    PaymentId
    required
    string

    Уникальный идентификатор транзакции в системе Т‑Кассы, полученный в ответе на вызов метода Init

    Token
    required
    string

    Подпись запроса

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "700031849",
    • "Token": "l43kb4hyi6lknb23bv4gdfskjn238fsllsdf8"
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "Success": true,
    • "ErrorCode": "0",
    • "Status": "CONFIRMED",
    • "QrCancelCode": "I05043",
    • "QrCancelMessage": "У клиента нет расчетного счета в этом банке. Попробуйте вернуть деньги на счет этого клиента в другом банке",
    • "OrderId": "7830122",
    • "Amount": 10000,
    • "Message": "OK"
    }

    T‑Pay

    Общая информация

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

    • /TinkoffPay/terminals/{terminalKey}/status,
    • /Init,
    • /TinkoffPay/transactions/{paymentId}/versions/{version}/link или /TinkoffPay/{paymentId}/QR.

    Другие способы интеграции

    T‑Pay SDK

    T‑Pay SDK — интеграция способа оплаты в приложение. Документация по SDK активно поддерживается на GitHub:

    T‑Pay web

    T‑Pay web — способ интеграции через установку виджета на сайт.

    Подключение платежного виджета

    Установка платежного виджета на сайт

    Вставьте код на ваш сайт туда, где должна располагаться кнопка Оплатить:

    <style>.tinkoffPayRow{display:block;margin:1%;width:160px;}</style>
    
    <link rel="stylesheet" href="./html/payForm/static/css/t-widget.css" type="text/css >
    
    <script src="https://securepay.tinkoff.ru/html/payForm/js/tinkoff.js ></script>
    
    <form name="TinkoffPayForm" onsubmit="pay(this); return false; >
    
        <input class="tinkoffPayRow" type="hidden" name="terminalkey" value="EatFit3DS >
    
        <input class="tinkoffPayRow" type="hidden" name="frame" value="true">
    
        <input class="tinkoffPayRow" type="hidden" name="language" value="ru">
    
        <input class="tinkoffPayRow" type="text" placeholder="Сумма заказа" name="amount
         required>
    
        <input class="tinkoffPayRow" type="text" placeholder="Номер заказа" name="order">
    
        <input class="tinkoffPayRow" type="text" placeholder="Описание заказа
         name="description">
    
        <input class="tinkoffPayRow" type="text" placeholder="ФИО клиента" name="name">
    
        <input class="tinkoffPayRow" type="text" placeholder="E-mail" name="email">
    
        <input class="tinkoffPayRow" type="text" placeholder="Контактный телефон
         name="phone">
    
        <input class="tinkoffPayRow" type="submit" value="Оплатить">
    
    </form>
    

    Настройка платежного виджета

    Вставьте идентификатор мерчанта в код платежного виджета в значение параметра terminalkey. Идентификатор мерчанта выдается Т‑Кассой — его можно получить в личном кабинете в разделе Магазины.

    Если вам нужно изменить состав полей платежного виджета, у полей, которые хотите скрыть, укажите type = hidden:

    <input class="tinkoffPayRow" type="hidden" placeholder="ФИО
    клиента" name="name"> 
    

    Если вам нужно сделать поле обязательным для заполнения, добавьте к нему параметр required:

    <input class="tinkoffPayRow" type="text" placeholder="E-mail"
    name="email" required> 
    

    Если вам нужно открывать платежную форму в текущем окне, укажите у этого атрибута значение true:

    <input class="tinkoffPayRow" type="hidden" name="frame"
    value="true"> 
    

    Платежный виджет стилизует мерчант. Ограничений на стилизацию со стороны Т‑Кассы нет:

    <input class="tinkoffPayRow" type="hidden" name="terminalkey"
    value="Идентификатор вашего магазина"> 
    

    Подключение T‑Pay

    Подключение T‑Pay в личном кабинете

    1. Перейдите в личный кабинет и откройте страницу интернет-магазина, для которого вы хотите подключить оплату через T‑Pay на сайте. Выберите вкладку Способы оплаты.
    2. На плашке T‑Pay нажмите Настроить, перейдите в подраздел Своя платежная форма и нажмите Включить.

    При успешном подключении T‑Pay для интернет-магазина отобразится страница активного статуса подключения T‑Pay на сайте.

    Подключение T‑Pay на страницах интернет-магазина

    Вставьте код на страницу вашего сайта сразу после кода платежного виджета:

    <script type="text/javascript">
    
        const terminalkey = document.forms.TinkoffPayForm.terminalkey
    
        const widgetParameters = {
    
         container: 'tinkoffWidgetContainer',
    
          terminalKey: terminalkey.value,
    
         paymentSystems: {
    
         TinkoffPay: {
    
         paymentInfo: function () {
    
         return {
    
         infoEmail: "E-mail для отправки информации о платеже",
    
         paymentData: document.forms.TinkoffPayForm
    
         }
    
         }
    
         },
    
         },
    
        };
    
        window.addEventListener('load', function () {
    
         initPayments(widgetParameters);
    
        });
    </script>
    

    Метод InitPayments запускает инициализацию платежных кнопок T‑Pay. Входной параметр метода — объект с данными о настройках проведения платежей.

    Структура объекта T‑Pay:

    Наименование Обязательность Тип данных Описание
    paymentInfo Да Function/Object Платежная информация

    Настройка оплаты множества товаров

    Для подключения оплаты по СБП для одного и более товаров в методе InitPayments нужно передавать массив paymentItems — это настройки, которые определяют размещение платёжных кнопок и информацию о платеже.

    Пример кода:

    <div id="tinkoffWidgetContainer1"></div>
    
    <div id="tinkoffWidgetContainer2"></div>
    
    <script type="text/javascript">
    
        const terminalkey = document.forms.TinkoffPayForm.terminalkey
    
        const widgetParameters = {
    
         terminalKey: terminalkey.value,
    
         paymentItems: [{
    
         container: document.getElementById('tinkoffWidgetContainer1'),
    
         paymentInfo: function () {
    
         return {
    
         infoEmail: "E-mail для отправки информации о платеже",
    
         paymentData: document.forms.TinkoffPayForm
    
         }
    
         }},
    
         {
    
         container: document.getElementById('tinkoffWidgetContainer2'),
    
         paymentInfo: function () {
    
         return {
    
         infoEmail: "E-mail для отправки информации о платеже",
    
     paymentData: document.forms.TinkoffPayForm
    
         }
    
         }}],
    
         paymentSystems: {
    
         TinkoffPay: {
    
         },
    
         },
    
        };
    
        window.addEventListener('load', function () {
    
         initPayments(widgetParameters);
    
        });
    
    </script>
    

    Структура объекта массива paymentItems:

    Наименование Обязательность Тип данных Описание
    container Да HTMLFormElement Элемент, в который вставляют кнопки
    paymentInfo Да Function/Object Платежная информация

    T‑Pay + T‑ID

    Для интеграции T‑Pay + T‑ID нужно настроить интеграцию с T‑ID. Подробнее про T-ID.

    Подключение платежного виджета

    Установка платежного виджета на сайт

    Вставьте код на ваш сайт туда, где должна располагаться кнопка Оплатить:

    <link rel="stylesheet" href="https://securepay.tinkoff.ru/tpaytid/styles.css" media="print"
    onload="this.media='all'">
    
    <tinkoff-pay-id-button
    
    terminalkey=%yourterminalkey%”
    
    redirectsuccess=false
    
    rederectfail=false
    
    ></tinkoff-pay-id-button>
    
    <script src="https://securepay.tinkoff.ru/tpaytid/tinkoff-pay-button.js" type="module"></
    script>
    

    Настройка платежного виджета

    Вставьте идентификатор магазина в код платежного виджета в значение параметра terminalkey. Идентификатор магазина выдается Т‑Кассой — его можно получить в личном кабинете в разделе Магазины.

    Если вам нужен переход по ссылке в случае удачной оплаты, выставите redirectsuccess = true или задайте атрибут у себя в коде:

    const tpayIdButton = document.querySelector('tinkoff-pay-id-button');
    tpayIdButton.setAttribute('redirectsuccess', true);
    

    Если вам нужен переход по ссылке в случае удачной оплаты, выставите redirectfail = true или задайте атрибут у себя в коде:

    const tpayIdButton = document.querySelector('tinkoff-pay-id-button');
    tpayIdButton.setAttribute('redirectfail', true);
    

    Чтобы получать данные об оплате, подпишитесь на событие onSessionChange:

    const tpayIdButton = document.querySelector('tinkoff-pay-id-button');
    tinkoffPayIdButton.addEventListener('onSessionChange', e => {
    
    // Ваш код здесь
    
    })
    

    Структура объекта события о платеже — onSessionChange:

    Наименование Обязательность Тип данных Описание
    eventType Да String Тип события
    sessionId Да String Идентификатор сессии
    paymentId Нет Number Идентификатор платежи
    accountId Нет String Идентификатор карты
    data Нет Object Набор параметров ключ-значение
    eventSessionId Нет String Идентификатор события открытия карт

    Интеграция сценария T‑Pay + T‑ID

    Схема интеграции

    Чтобы реализовать сценарий T‑Pay + T‑ID, нужно установить SDK-виджет на сайте. Также нужно подписаться на события, которые генерирует виджет, и дублировать их на backend в зашифрованном виде через метод /v2/TinkoffPayEvent, передавая в нем данные о клиенте. В данном случае это авторизационный токен AccessToken, выпущенный T‑ID.

    Есть три типа событий — для каждого передается набор параметров для последующей валидации:

    • Инициализация кнопки — процесс отображения кнопки.

    • Отображение счета — процесс отображения счетов, доступных клиенту для оплаты. Когда поступает событие с таким типом, нужно создать платежную сессию эквайринга, если она еще не была создана — то есть если в параметрах события нет PaymentId. Это делается через метод /v2/Init с учетом особенностей T-Pay. Дальше есть несколько сценариев развития событий:

      • Клиент определен и имеет счета для оплаты — отобразится список счетов.
      • Клиент не определен или требуется дополнительная аутентификация — произойдет редирект в мобильное приложение Т‑Банка.
      • Клиент определен и не имеет подходящих счетов — отобразится ошибка.
    • Оплата — проведение оплаты по выбранному счету.

    Рекомендуем принимать результат авторизации асинхронно через нотификации.

    Инициировать платеж в виджете

    Request Body schema: application/json
    required
    container
    string

    ID элемента или элемент, в который вставляются кнопки.

    TerminalKey
    required
    string

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

    object (PaymentInfos)

    Информация о платеже.

    Array of items

    Список объектов с информацией о размещаемых кнопках.

    T-Payweb (object) or TbankFps (object)

    Объект с информацией о платежных системах.

    Responses

    Request samples

    Content type
    application/json
    {
    • "container": "string",
    • "TerminalKey": "string",
    • "paymentInfo": {
      },
    • "paymentItems": [
      ],
    • "paymentSystems": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "Success": "true"
    }

    Определить возможность проведения платежа

    Метод для определения возможности проведения платежа T‑Pay на терминале и устройстве.

    path Parameters
    TerminalKey
    required
    string <= 20 characters
    Example: testRegress

    Платежный ключ, выдается мерчанту при заведении терминала.

    Responses

    Response samples

    Content type
    application/json
    {
    • "Params": {
      },
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "string",
    • "Details": "string"
    }

    Получить QR

    Метод получения QR для десктопов.

    path Parameters
    paymentId
    required
    number
    Example: 700001702044

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    Responses

    Передать уведомление о событии

    Передача уведомления о событии платежного виджета T‑Pay + T‑ID.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала. Выдается мерчанту Т‑Кассой при заведении терминала.

    required
    object (EventData)
    PaymentId
    string

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

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "string",
    • "EventData": {
      },
    • "PaymentId": "string",
    • "Token": "string"
    }

    Response samples

    Content type
    application/json
    {
    • "Success": "true",
    • "ErrorCode": 0,
    • "Message": "string",
    • "Details": "string"
    }

    SberPay

    Подключение

    1. Перейдите в личный кабинет и откройте страницу интернет-магазина, для которого вы хотите подключить оплату через SberPay на сайте. Перейдите на вкладку Способы оплаты.
    2. Нажмите Настроить на плашке SberPay, перейдите в подраздел Своя платежная форма и нажмите Включить. Если плашки нет — магазин находится на регистрации или перерегистрации в эквайринге Сбербанка.

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

    Оплата через SberPay

    Требования к фронтовому решению

    Требования к функционалу и дизайну кнопки определяются Сбербанком:

    Общая информация

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

    • /Init,
    • /SberPay/transactions/{PaymentId}/link или /SberPay/{PaymentId}/QR,
    • /Confirm,
    • /Cancel.

    Особенности в /Init

    При реализации подключения оплаты через SberPay Web, нужно обязательно передавать следующие параметры в объекте Data:

    "DATA": {
     "SberPayWeb": "true",
     "Device": "Desktop"
    }
    
    Схема прохождения операций

    Особенности /Confirm

    Из-за особенностей работы эквайринга Сбербанка подтвердить платежную сессию можно сделать только один раз — либо частично, либо полностью. Также из-за асинхронной обработки запросов на подтверждение платеж может вернуться в статусе CONFIRMING, если у сервисов партнера возникнут проблемы с производительностью.

    Схема прохождения операций

    Особенности /Cancel

    Из-за особенностей работы эквайринга Сбербанка отменить платежную сессию можно только один раз и только на полную сумму платежа. Возврат можно делать несколько раз — как частично, так и полностью — до тех пор, пока не будет исчерпана сумма платежа. Также из-за асинхронной обработки запросов на подтверждение платеж может вернуться в статусе REVERSING или REFUNDING, если у сервисов партнера возникнут проблемы с производительностью.

    Схема прохождения операций

    Получить QR

    Метод получения QR для десктопов.

    path Parameters
    paymentId
    required
    string
    Example: 700001702044

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    Responses

    Сценарии привязки карты

    Общая информация

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

    Мерчант может выбрать способ привязки клиента — с проверкой 3D-Secure или без. Если выбран вариант:

    • С проверкой 3D-Secure — клиент должен будет подтвердить операцию на этом этапе. Все дальнейшие платежи будут проходить по схеме рекуррентного платежа, то есть подтверждать каждое списание не нужно.

    • Без проверки 3D-Secure — клиент и его карты будут сохранены без подтверждения, но оно понадобится при первом платеже по привязанной карте.

    За способ привязки отвечает параметр CheckType в запросе метода AddCard. Если мерчант не передаст этот параметр, MAPI по умолчанию будет считать, что привязка прошла без подтверждения клиента.

    Для корректной работы методов Т‑Касса должна разрешить мерчанту привязывать карты и клиентов к терминалу. В результате привязки карты к параметру CustomerKey будет привязан CardId.

    Сценарии работы с картами и клиентами

    Добавление, получение и удаление клиента

    Мерчант вызывает метод и передает нужный параметр. Чтобы:

    • Сохранить идентификатор клиента CustomerKey — через метод AddCustomer, передав в запросе параметр CustomerKey.
    • Удалить клиента из списка привязанных к терминалу — через метод RemoveCustomer, передав в запросе параметр CustomerKey.
    • Получить сохраненные данные клиента — через метод GetCustomer, передав в запросе параметр CustomerKey.

    Добавление, получение и удаление карты

    Для мерчантов с PCI DSS

    Инициализация привязки

    Когда клиент сохранится в списке привязанных к терминалу, мерчант может добавить карту. Для этого мерчант вызывает метод AddCard и в запросе передает параметр CustomerKey. MAPI вернет идентификатор сессии привязки карты — PaymentId.

    Проверка версии 3DS

    На следующем этапе мерчант вызвает метод Check3DSVersion, в котором передает зашифрованные карточные данные клиента и PaymentId. Это нужно для проверки версии протокола 3D-Secure по карте. Она может быть версии 1.0 или 2.0.

    Если в ответе метода Check3DSVersion есть параметр ThreeDSMethodURL, браузер клиента должен вызывать ресурс, адрес которого пришел в параметре ThreeDSMethodURL. В запросе нужно передать строковый параметр threeDSMethodData. Эта строка — закодированный в формате base64 JSON-объект с параметрами:

    Название параметра Тип данных Описание
    threeDSMethodNotificationURL string Обратный адрес, на который будет отправлен запрос после прохождения 3DS Method.
    threeDSServerTransID string Идентификатор транзакции из ответа метода Check3DSVersion.

    Браузер должен вызвать 3DS Method в скрытом iframe и передать данные в формате x-www-form-urlencoded.

    Пример запроса на ThreeDSMethodURL:

    <body onload="document.form.submit()">
    <form name="form" action="{ThreeDSMethodURL}" method="post" >
    <input type="hidden" name=" threeDSMethodData"
    value="eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjU2ZTcxMmE1LTE5MGEtNDU4OC05MWJjLWUwODYyNmU3N2M0NCIsInRocm
    VlRFNNZXRob2ROb3RpZmljYXRpb25VUkwiOiJodHRwczovL3Jlc3QtYXBpLXRlc3QudGlua29mZi5ydS92Mi9Db21wbGV0ZTNEU0
    1ldGhvZHYyIn0">
    </form>
    </body>
    

    Пример декодированного значения threeDSMethodData:

    {
    "threeDSServerTransID":"56e712a5-190a-4588-91bc-e08626e77c44",
    "threeDSMethodNotificationURL":"https://rest-api-test.tinkoff.ru/v2/>Complete3DSMethodv2"
    }
    

    Завершение привязки

    Для завершения привязки карты мерчант вызывает метод AttachCard и передает зашифрованные карточные данные, а также набор параметров для прохождения проверки 3D-Secure.

    В ответ MAPI вернет один из возможных статусов платежа:

    Статус Описание Доступные действия
    REJECTED Привязка отклонена Провести привязку заново
    COMPLETED Успешная привязка карты -
    3DS_CHECKING Требуется подтверждение привязки по 3D-Secure
    • Отменить привязку
    • Пройти подтверждение

    Если в ответе метода AttachCard вернулся статус 3DS_CHECKING — это значит, что нужно пройти проверку 3D-Secure. Для этого мерчант должен сформировать запрос в сервис аутентификации банка, выпустившего карту. Адрес сервиса возвращается в ответе AttachCard в параметре ACSUrl. Вместе с этим нужно перенаправить клиента на эту же страницу ACSUrl для прохождения 3DS.

    В заголовке запроса передается параметр Content-Type со значением application/x-www-form-urlencoded. Набор параметров в теле запросе зависит от версии протокола 3DS по карте.

    3DS 1.0

    Если версия 3DS — 1.0, в запросе передаются параметры:

    Название параметра Описание
    MD Информация для идентификации платежной сессии на стороне торговой точки. Возвращается в ответе метода FinishAuthorize.
    PaReq Запрос на аутентификацию плательщика, который содержит разные детали транзакции. Возвращается в ответе метода FinishAuthorize.
    TermURL Адрес перенаправления после аутентификации 3DS. Должен содержать ссылку на обработчик на стороне мерчанта, принимающий результаты прохождения 3-D Secure.
    3DS 2.0

    Если версия 3DS — 2.0, в запросе передаются параметры в зависимости от типа устройства клиента.

    Параметры для браузера:

    Название параметра Тип данных Описание
    creq string JSON с параметрами threeDSServerTransID, acsTransID,challengeWindowSize, messageType, messageVersion, закодированный в base64.

    Строка creq для браузера формируется из следующих параметров:

    Название параметра Тип данных Описание
    threeDSServerTransID string Идентификатор транзакции из ответа метода FinishAuthorize.
    acsTransID string Идентификатор транзакции, присвоенный ACS, полученный из ответа метода FinishAuthorize.
    challengeWindowSize string Размер экрана, на котором открыта страница ACS. Допустимые значения:
  • 01 = 250 x 400;
  • 02 = 390 x 400;
  • 03 = 500 x 600;
  • 04 = 600 x 400;
  • 05 = Full screen.
  • messageType string Передается фиксированное значение CReq.
    messageVersion string Версия 3DS, полученная из ответа метода Check3DSVersion.

    Параметры для приложения:

    Название параметра Тип данных Описание
    creq string JWE object с параметрами threeDSServerTransID, acsTransID, messageType, messageVersion, sdkTransID, sdkCounterStoA, закодированный в PS256.

    Строка creq для приложения формируется из следующих параметров:

    Название параметра Тип данных Описание
    threeDSServerTransID string Идентификатор транзакции из ответа метода FinishAuthorize.
    acsTransID string Идентификатор транзакции, присвоенный ACS, полученный из ответа метода FinishAuthorize.
    messageType string Передается фиксированное значение CReq.
    messageVersion string Версия 3DS, полученная из ответа метода Check3DSVersion.
    sdkTransID string Уникальный идентификатор транзакции, назначенный 3DS SDK для идентификации одной транзакции, полученный из ответа метода FinishAuthorize.
    sdkCounterStoA string Внутренний счетчик 3DS SDK внутри ACS. Поддерживаемые значения:
    000–255.

    Подтверждение прохождения 3DS

    Когда сервис аутентификации банка, который выпустил карту, прислал результат прохождения 3D-Secure, мерчант должен передать эту информацию в MAPI. В зависимости от версии протокола 3DS нужно вызвать один из методов:

    Завершение привязки

    Если привязка завершилась успешно, клиент будет перенаправлен на страницу Success Add Card URL из настроек терминала.

    Статусная модель привязки карты

    В процессе обработки операция привязки меняет свое состояние. Основные статусы и условия перехода в них:

    Статус Описание
    NEW Новая сессия.
    FORM_SHOWED Показ формы привязки карты.
    3DS_CHECKING Отправка клиента на проверку 3DS.
    3DS_CHECKED Клиент успешно прошел проверку 3DS.
    AUTHORIZING Отправка платежа на 0 руб.
    AUTHORIZED Платеж на 0 руб прошел успешно.
    COMPLETED Привязка успешно завершена.
    REJECTED Привязка отклонена.
    Полный жизненный цикл привязки карты — схема

    Методы работы с клиентами

    Зарегистрировать клиента

    Регистрирует клиента в связке с терминалом.

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

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    Token
    required
    string

    Подпись запроса.

    IP
    string <= 40 characters

    IP-адрес запроса.

    Email
    string <email> <= 64 characters

    Электронная почта клиента.

    Phone
    string <= 64 characters

    Телефон клиента в формате +{Ц}.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "4387c647-a693-449d-bc35-91faecfc50de",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "IP": "10.100.10.10",
    • "Email": "username@test.ru",
    • "Phone": "+79031234567"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "05d65baa-9718-445e-8212-76fa0dd4c1d2",
    • "ErrorCode": "0",
    • "Success": true,
    • "Message": "Неверные параметры",
    • "Details": "Терминал не найден"
    }

    Получить данные клиента

    Возвращает данные клиента, сохраненные в связке с терминалом

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    Token
    required
    string

    Подпись запроса.

    IP
    string <= 40 characters

    IP-адрес запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "string",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "IP": "string"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "4264aa7b-08ab-4429-ab5a-2a171d841ced",
    • "ErrorCode": "0",
    • "Success": true,
    • "Message": "Неверный статус клиента",
    • "Details": "Клиент не найден.",
    • "Email": "a@test.ru",
    • "Phone": "+79031234567"
    }

    Удалить данные клиента

    Метод для удаления сохраненных данных клиента.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    Token
    required
    string

    Подпись запроса.

    IP
    string <= 40 characters

    IP-адрес запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "string",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "IP": "string"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "string",
    • "ErrorCode": "0",
    • "Success": true,
    • "Message": "Неверные параметры",
    • "Details": "string"
    }

    Методы работы с картами

    Инициировать привязку карты к клиенту

    Для мерчантов с PCI DSS

    Метод инициирует привязку карты к клиенту. При успешной привязке переадресует клиента на Success Add Card URL, при неуспешной — на Fail Add Card URL. Можно использовать форму Т‑Кассы или заменить её на кастомную.

    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    Token
    required
    string

    Подпись запроса.

    CheckType
    string
    Enum: "NO" "HOLD" "3DS" "3DSHOLD"

    Если CheckType не передается, автоматически проставляется значение NO. Возможные значения:

    • NO — сохранить карту без проверок. RebillID для рекуррентных платежей не возвращается.
    • HOLD — при сохранении сделать списание на 0 руб. RebillID возвращается для терминалов без поддержки 3DS.
    • 3DS — при сохранении карты выполнить проверку 3DS и выполнить списание на 0 р. В этом случае RebillID будет только для 3DS карт. Карты, не поддерживающие 3DS, привязаны не будут.
    • 3DSHOLD – при привязке карты выполнить проверку, поддерживает карта 3DS или нет. Если карта не поддерживает 3DS, выполняется списание на 0 руб.
    IP
    string <= 40 characters

    IP-адрес запроса.

    ResidentState
    boolean

    Признак резидентности добавляемой карты: Возможные значения:

    • true — карта РФ,
    • false — карта не РФ,
    • null — не специфицируется, универсальная карта.

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "1111133333",
    • "CustomerKey": "testCustomer1234",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "CheckType": "NO",
    • "IP": "10.100.10.10",
    • "ResidentState": true
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "PaymentId": "6155312072",
    • "TerminalKey": "TinkoffBankTest",
    • "CustomerKey": "906540",
    • "RequestKey": "ed989549-d3be-4758-95c7-22647e03f9ec",
    • "ErrorCode": "0",
    • "Success": true,
    • "Message": "Неверные параметры",
    • "Details": "Терминал не найден",
    • "PaymentURL": "82a31a62-6067-4ad8-b379-04bf13e37642d"
    }

    Привязать карту

    Для Мерчантов с PCI DSS
    Завершает привязку карты к клиенту.
    В случае успешной привязки переадресует клиента на Success Add Card URL в противном случае на Fail Add Card URL.
    Для прохождения 3DS второй версии перед вызовом метода должен быть вызван /v2/check3dsVersion и выполнен 3DS Method, который является обязательным при прохождении 3DS по протоколу версии 2.0.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала. Выдается мерчанту Т‑Кассой при заведении терминала.

    RequestKey
    required
    string <uuid>

    Идентификатор запроса на привязку карты.

    CardData
    required
    string

    Зашифрованные данные карты в формате:

    PAN=4300000000000777;ExpDate=0519;CardHolder=IVAN PETROV;CVV=111
    
    object or 3DSv2 (object)

    В объекте передаются дополнительные параметры в формате ключ:значение с разделителем |. Например, меняем на JSON-объект, который содержит дополнительные параметры в виде ключ:значение.

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

    • ключ — 20 знаков,
    • значение — 100 знаков.

    Максимальное количество пар ключ:значение — не больше 20.

    Важно Для 3DS второй версии в DATA передаются параметры, описанные в объекте 3DSv2. В HttpHeaders запроса обязательны заголовки User-Agent и Accept.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "RequestKey": "13021e10-a3ed-4f14-bcd1-823b5ac37390",
    • "CardData": "U5jDbwqOVx+2vDApxe/rfACMt+rfWXzPdJ8ZXxNFVIiZaLZrOW72bGe9cKZdIDnekW0nqm88YxRD↵jyfa5Ru0kY5cQV alU+juS1u1zpamSDtaGFeb8sRZfhj72yGw+io+qHGSBeorcfgoKStyKGuBPWfG↵d0PLHuyBE6QgZyIAM1XfdmNlV0UAxOnkTGDsskL pIt3AWhw2e8KOar0vwbgCTDjznDB1/DLgOW01↵Aj/bXyLJoG1BkOrPBm9JURs+f+uyFae0hkRicNKNgXoN5pJTSQxOEauOi6ylsVJ B3WK5MNYXtj6x↵GlxcmTk/LD9kvHcjTeojcAlDzRZ87GdWeY8wgg==",
    • "DATA": {
      },
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "testRegress",
    • "CustomerKey": "testCustomerKey",
    • "RequestKey": "8de92934-26c9-474c-a4ce-424f2021d24d",
    • "CardId": "5555",
    • "Success": true,
    • "ErrorCode": "0",
    • "Status": "NEW",
    • "RebillId": "130799909",
    • "Message": "Неверные параметры",
    • "Details": "string",
    • "MD": "ACQT-563587431",
    • "PaReq": "eJxVUl1TwjAQ/CtM30s+KLTDHGHQwsiogFh09C2kp1RpC2nLh7/eBAtqnnYvN3ubvUD/kK4bO9RFkmc9hzWp08BM5XGSvfecRT RyA6cvIFppxPARVaVRwD0WhXzHRhL3HMUU73itwKVtyl1Pcs8Nli3pymUQK+z2Sww6joDZYI5bAfUgYeY0OZAzNYparWRWCpBqe zWeiDZnLe3BqSmkqMeh4PRy2p02BfJThkymKCIsSiAnCCqvslIfhXEG5Eyg0muxKstN0SVkv983yyT7zN/emroiQOwlkF8js8qiwogdk lg8rEfT5WK0jj6G7D4cepNo8TWNBmwSDXtAbAfEskTjkPk0oF6DeV3a6jLj8VQHmVoXglFTqTFs7IjBn4u/BTBZa7OK8yPODPCwyT M0HSbACwby6/f6xsaoSpNMMN89+uHdV/iUPz2nyat/uxrPXz5nuX/c2nBPTVYxMflwzthJ0hIgVobUeyP1yg469xW+AedOuuM="
    }

    Получить статус привязки карты

    Для мерчантов с PCI DSS
    Метод возвращает статус привязки карты

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    RequestKey
    required
    string

    Идентификатор запроса на привязку карты.

    Token
    required
    string

    Подпись запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "testRegressBank",
    • "RequestKey": "13021e10-a3ed-4f14-bcd1-823b5ac37390",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "RequestKey": "13021e10-a3ed-4f14-bcd1-823b5ac37390",
    • "Status": "NEW",
    • "Success": true,
    • "CardId": "156516516",
    • "RebillId": "134249124",
    • "ErrorCode": "0",
    • "Message": "Неверные параметры",
    • "Details": "Данный RequestKey не найден.",
    • "CustomerKey": "testCustomer1234"
    }

    Получить список карт клиента

    Возвращает список всех привязанных карт клиента, включая удаленные

    Request Body schema: application/json
    required
    One of
    TerminalKey
    required
    string

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string

    Идентификатор клиента в системе мерчанта.

    SavedCard
    boolean

    Признак сохранения карты для оплаты в 1 клик.

    Token
    required
    string

    Подпись запроса

    IP
    string

    IP-адрес запроса

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "testRegressBank",
    • "CustomerKey": "testCustomer1234",
    • "SavedCard": "true",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "IP": "2011:0db8:85a3:0101:0101:8a2e:0370:7334"
    }

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Удалить привязанную карту клиента

    Метод для удаления привязанной карты клиента.

    Request Body schema: application/json
    required
    TerminalKey
    required
    string <= 20 characters

    Идентификатор терминала, выдается мерчанту Т‑Кассой.

    CustomerKey
    required
    string <= 36 characters

    Идентификатор клиента в системе мерчанта.

    CardId
    required
    string <= 40 characters

    Идентификатор карты в системе Т‑Кассы.

    Token
    required
    string

    Подпись запроса.

    IP
    string <= 40 characters

    IP-адрес запроса.

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "testRegressBank",
    • "CustomerKey": "testCustomer1234",
    • "CardId": "156516516",
    • "Token": "30797e66108934dfa3d841b856fdad227c6b9c46d6a39296e02dc800d86d181e",
    • "IP": "2011:0db8:85a3:0101:0101:8a2e:0370:7334"
    }

    Response samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Status": "D",
    • "CustomerKey": "testCustomer1234",
    • "CardId": "156516516",
    • "CardType": 0,
    • "Success": true,
    • "ErrorCode": "0",
    • "Message": "Неверные параметры",
    • "Details": "Не удалось удалить карту клиента, для данного клиента такая карта не существует"
    }

    Уведомления об операциях

    Уведомления об операциях — это уведомления магазину о статусе выполнения платежа. На основании этих уведомлений магазин должен предоставлять клиенту услугу или товар.

    Чтобы самостоятельно настроить уведомления:

    1. Перейдите в личный кабинет интернет-эквайринга.
    2. Выберите МагазиныНастройки.
    3. Выберите нужный вариант получения уведомлений — почта, HTTP(s) или оба варианта.

    По электронной почте

    Т‑Касса может присылать письма с уведомлениями об успешных платежах — статус CONFIRMED. Настроить уведомления на электронную почту можно в личном кабинете. Уведомления на почту можно комбинировать с уведомлениями по HTTP(s).

    По HTTP(s)

    При совершении операций через методы Authorize, FinishAuthorize, Confirm, Cancel на адрес Notification URL высылается уведомление POST-запросом с информацией об операции. При использовании одностадийного проведения платежа при обращении к методу FinishAuthorize уведомление отправляется на сайт мерчанта на адрес Notification URL синхронно и ожидает ответа в течение 10 секунд.

    После получения или неполучения ответа за заданное время сервис переадресует клиента на Success URL или Fail URL в зависимости от результата платежа.

    Если уведомление обработано успешно, мерчант должен ответить с HTTP-кодом 200 и телом сообщения OK — без тегов, заглавными буквами. Если тело сообщения отлично от OK, уведомление считается неуспешным. В этом случае сервис будет повторно отправлять уведомление в течение 24 часов каждый час, а затем раз в сутки в течение месяца.

    То же самое касается метода Charge — за исключением того, что этот метод не перенаправляет клиента.

    Т‑Банк Бизнес может сообщать магазину об успешных или ошибочных привязках счета. Для этого в настройках терминала нужно указать URL, куда будут отправляться POST-запросы со статусами.

    Если в NotificationURL используются порты, можно использовать порт 443 (HTTPS).

    Актуальный список внешних сетей, которые использует Т‑Банк для отправки уведомлений:

    • 91.194.226.0/23
    • 91.218.132.0/24
    • 91.218.133.0/24
    • 91.218.134.0/24
    • 91.218.135.0/24
    • 212.233.80.0/24
    • 212.233.81.0/24
    • 212.233.82.0/24
    • 212.233.83.0/24
    • 91.194.226.181 — тестовая среда

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

    Если в уведомлениях вам нужно получать дополнительные параметры, передайте параметр DATA с возможными ключами — параметр включается через менеджера или техническую поддержку:

    Ключ Расшифровка
    description Описание.
    name ФИО.
    number Отображение номера договора в реестрах по AFT и ИЭ по МФО.
    order_number Номер заказа.
    paymentId Номер транзакции.
    fphone Телефон.
    s_firstname Отображение ФИО в реестрах по AFT и ИЭ по МФО.
    s_lastname Отображение ФИО в реестрах по AFT и ИЭ по МФО.
    s_middlename Отображение ФИО в реестрах по AFT и ИЭ по МФО.
    terminalKey Номер терминала.

    В ответе возвращается параметр Data — не полностью в верхнем регистре.

    Укажите в настройках терминала URL, чтобы получать на него POST-запросы со статусами:

    Статус Описание
    AUTHORIZED Деньги захолдированы на карте клиента. Ожидается подтверждение операции. *
    CONFIRMED Операция подтверждена.
    PARTIAL_REVERSED Частичная отмена.
    REVERSED Операция отменена.
    PARTIAL_REFUNDED Произведён частичный возврат.
    REFUNDED Произведён возврат.
    REJECTED Списание денежных средств закончилась ошибкой.
    DEADLINE_EXPIRED ** Автоматическое закрытие сессии, которая превысила срок пребывания в статусе 3DS_CHECKING — больше 36 часов.

    * Операция может быть подтверждена:

    • Через личный кабинет.

    • Через метод Confirm.

    • Автоматически — если у магазина настроена одностадийная схема оплаты для магазина в личном кабинете.

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

    ** Напишите на acq_help@tbank.ru c просьбой включить отправку уведомлений об автозакрытии сессий в статусе 3DS_CHECKING.

    Ответ на HTTP(s)-уведомление

    В случае успешной обработки уведомления мерчанту нужно вернуть ответ HTTP CODE = 200 с телом сообщения OK — без тегов, заглавными английскими буквами.

    PHP. Пример ответа на HTTP(s)-уведомление

    <?php
    echo «OK»;
    ?>
    

    Java. Пример ответа на HTTP(s)-уведомление

    @POST
    @Path("/ok")
    public Response NotifyResponse() {
    return Response.status(200).entity("OK").build();
    }
    

    Если ответ OK не получен, уведомление считается неуспешным, и сервис будет повторно отправлять это уведомление раз в час в течение 24 часов. Если за это время уведомление не доставлено, оно будет перемещено в архив.

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

    Проверка токенов

    Чтобы сформировать подпись запроса для уведомления:

    1. Соберите массив всех обязательных передаваемых параметров для конкретного метода в виде пар Ключ-Значение — кроме параметра Token. Например:
    [["TerminalKey": "1321054611234DEMO"],["OrderId": "201709"],["Success": "true"],["Status": "AUTHORIZED"],["PaymentId": "8742591"],["ErrorCode": "0"],["Amount": "9855"],["CardId": "322264"],["Pan": "430000******0777"],["ExpDate": "1122"],["RebillId": "101709"]]
    
    1. Добавьте в массив пару Password. Password — пароль для терминала, указан в личном кабинете мерчанта:
    [["TerminalKey": "1321054611234DEMO"],["OrderId": "201709"],["Success": "true"],["Status": "AUTHORIZED"],["PaymentId": "8742591"],["ErrorCode": "0"],["Amount": "9855"],["CardId": "322264"],["Pan": "430000******0777"],["ExpDate": "1122"],["RebillId": "101709"],["Password": "Dfsfh56dgKl"]]
    
    1. Отсортируйте массив по ключам по алфавиту:
    [["Amount": "9855"],["CardId": "322264"],["ErrorCode": "0"],["ExpDate": "1122"],["OrderId": "201709"],["Pan": "430000******0777"],["Password": "Dfsfh56dgKl"],["PaymentId": "8742591"],["RebillId": "101709"],["Status": "AUTHORIZED"],["Success": "true"],["TerminalKey": "1321054611234DEMO"]]
    
    1. Конкатенируйте значения всех пар:
    985532226401122201709430000******0777Dfsfh56dgKl8742591101709AUTHORIZEDtrue1321054611234DEMO
    
    1. Вычислите SHA-256 от полученного значения из пункта 4:
    b906d28e76c6428e37b25fcf86c0adc52c63d503013fdd632e300593d165766b
    

    Пример генерации токена:

    private static final String PASSWORD_KEY = "Password"; private static final String PASSWORD_VALUE = "12345678";
    private String generateToken(final Map<String, String> parameters) throws UnsupportedEncodingException,
    NoSuchAlgorithmException { final Map<String, String> sortedParameters = new TreeMap<String, String>(parameters);
    if (sortedParameters.containsKey(TOKEN)) {
    sortedParameters.remove(TOKEN);
    }
    sortedParameters.put(PASSWORD_KEY, PASSWORD_VALUE); final String paramString =
    Joiner.on("").skipNulls().join(sortedParameters.values()); return
    calculateSha256(paramString);
    }
    

    Пример сравнения токенов:

    private boolean checkToken(final Map<String,String> params, final String expectedToken) {
    final String actualToken = params.get(TOKEN);
    return !(expectedToken == null || !expectedToken.equals(actualToken));
    }
    

    Уведомления

    Метод для получения уведомлений об изменении статуса платежа. Реализуется на стороне мерчанта.

    Уведомление о привязке (NotificationAddCard)

    Для мерчантов с PCI DSS

    Уведомления магазину о статусе выполнения метода привязки карты — AttachCard. После успешного выполнения метода AttachCard Т‑Касса отправляет POST-запрос с информацией о привязке карты. Уведомление отправляется на ресурс мерчанта на адрес Notification URL синхронно и ожидает ответа в течение 10 секунд. После получения ответа или не получения его за заданное время сервис переадресует клиента на Success AddCard URL или Fail AddCard URL — в зависимости от результата привязки карты. В случае успешной обработки нотификации мерчант должен вернуть ответ с телом сообщения OK — без тегов, заглавными английскими буквами.

    Если тело сообщения отлично от OK, любая нотификация считается неуспешной, и сервис будет повторно отправлять нотификацию раз в час в течение 24 часов. Если за это время нотификация так и не доставлена, она складывается в дамп.

    Нотификация о фискализации (NotificationFiscalization)

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

    Нотификация о статусе привязки счета по QR (NotificationQr)

    После привязки счета по QR магазину отправляется статус привязки и токен. Нотификация будет приходить по статусам ACTIVE и INACTIVE.

    Request Body schema: application/json
    One of
    TerminalKey
    string <= 20 characters

    Идентификатор терминала. Выдается мерчанту Т‑Кассой при заведении терминала.

    Amount
    number <= 10 characters

    Сумма в копейках.

    OrderId
    string <= 36 characters

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

    Success
    boolean

    Успешность прохождения запроса — true/false.

    Status
    string <= 20 characters

    Статус платежа.

    PaymentId
    number <= 20 characters

    Уникальный идентификатор транзакции в системе Т‑Кассы.

    ErrorCode
    string <= 20 characters

    Код ошибки. 0 в случае успеха.

    Message
    string

    Краткое описание ошибки.

    Details
    string

    Подробное описание ошибки.

    RebillId
    number <= 20 characters

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

    CardId
    number

    Идентификатор карты в системе Т‑Кассы.

    Pan
    string

    Замаскированный номер карты или телефона.

    ExpDate
    string

    Срок действия карты в формате MMYY, где YY — две последние цифры года.

    Token
    string

    Подпись запроса. Формируется по такому же принципу, как и в случае запросов в Т‑Кассу.

    object (DataNotification)

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

    Responses

    Request samples

    Content type
    application/json
    Example
    {
    • "TerminalKey": "TinkoffBankTest",
    • "Amount": 100000,
    • "OrderId": "21050",
    • "Success": true,
    • "Status": "string",
    • "PaymentId": 13660,
    • "ErrorCode": "0",
    • "Message": "string",
    • "Details": "string",
    • "RebillId": 3207469334,
    • "CardId": 10452089,
    • "Pan": "string",
    • "ExpDate": "0229",
    • "Token": "7241ac8307f349afb7bb9dda760717721bbb45950b97c67289f23d8c69cc7b96",
    • "DATA": {
      }
    }

    Общая информация

    Если на терминале включена фискализация чеков и к нему привязана онлайн-касса, вместе с платежом можно отправлять чеки.

    Передаваемый чек может быть в формате ФФД 1.05 и ФФД 1.2 — это зависит от привязанной к терминалу онлайн-кассы. Чтобы передать чек в формате ФФД 1.2, нужно, чтобы к терминалу была подключена касса с поддержкой этого формата, а в чеке передавался параметр FfdVersion со значением 1.2.

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

    Чек возврата передается через метод Cancel. В чеке должна быть указаны позиции возврата, а сумма чека возврата должна совпадать с возвращаемой суммой.

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

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

    Подключение онлайн-кассы

    Подробная инструкция по подключению онлайн-кассы

    Чтобы пройти тест-кейсы 7 и 8:

    1. Настройте передачу чека в платеже.
    2. Создайте платёж через DEMO-терминал.
    3. Оплатите его картой, указанной в тест-кейсе.

    За формирование чека отвечает клиент. При подключении через:

    • API — объект Receipt нужно передавать в запросе Init.
    • Виджет — объект Receipt нужно сформировать в виджете.
    • Модуль — нужно настроить передачу чека по инструкции для соответствующего модуля, если модуль поддерживает интеграцию с онлайн-кассой. Это можно проверить на странице Интеграция платежного модуля с CMS. Если модуль разработан не нами, нужно обратиться в поддержку соответствующего сервиса и уточнить, поддерживает ли он формирование чека.

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

    Список доступных онлайн-касс

    • CloudKassir
    • АТОЛ Онлайн
    • Бизнес.Ру Онлайн‑Чеки
    • КОМТЕТ Касса
    • aQsi Online
    • Ecomkassa
    • OFD Ferma
    • Orange Data
    • Чеки от Т‑Кассы

    Методы работы с чеками

    Отправить закрывающий чек в кассу

    Метод позволяет отправить закрывающий чек в кассу. Условия работы метода:

    • Закрывающий чек может быть отправлен, если платежная сессия по первому чеку находится в статусе CONFIRMED.
    • В платежной сессии был передан объект Receipt.
    • В объекте Receipt был передан хотя бы один объект — Receipt.Items.PaymentMethod = full_prepayment, prepayment или advance.
    Request Body schema: application/json
    required
    TerminalKey
    required
    string

    Идентификатор терминала выдается мерчанту Т‑Кассой.

    PaymentId
    required
    string

    Идентификатор платежа в системе Т‑Кассы.

    required
    Receipt_FFD_12 (object) or Receipt_FFD_105 (object)

    Объект с данными чека.

    Token
    required
    string

    Подпись запроса

    Responses

    Request samples

    Content type
    application/json
    {
    • "TerminalKey": "TinkoffBankTest",
    • "PaymentId": "2304882",
    • "Receipt": {
      },
    • "Token": "string"
    }

    Response samples

    Content type
    application/json
    {
    • "Success": true,
    • "ErrorCode": "2304882",
    • "Message": "Неверные параметры"
    }

    Квитанции

    Чтобы квитанция отправилась, на платежной форме нужно отображать электронную почту с выбором чек-бокса Нужна квитанция.

    Настройка обязательности заполнения электронной почты

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

    При включении этой настройки покупателям будет доступна только оплата картой — T-Pay, Sber Pay и другие способы будут недоступны. Для включения настройки обратитесь в чат поддержки.

    Описание дополнительных объектов

    Структура объекта Receipt для ФФД 1.05

    JSON-объект с данными чека. Обязателен, если подключена онлайн-касса.

    Параметр Тип Обязательность Описание Тег ФФД
    Items Array of objects Да Массив, содержащий в себе информацию о товарах.
    Параметры объекта описаны в таблице Структура объекта Items.
    FfdVersion String Нет
    Версия ФФД. Возможные значения:
    • FfdVersion: 1.2
    • FfdVersion: 1.05

    Версия ФФД по умолчанию — 1.05.
    Email String Нет* Электронная почта для отправки чека. 1008
    Phone String Нет* Телефон для отправки чека. 1008
    Taxation Enum Да Система налогообложения. Возможные значения:
    osn — общая СН;
    usn_income — упрощенная СН;
    usn_income_outcome — упрощенная СН (доходы минус расходы);
    envd — единый налог на вмененный доход;
    esn — единый сельскохозяйственный налог;
    patent — патентная СН.

    Примечание:
    ‣ Самозанятые работают по системе налогообложения НПД — налог на профессиональную деятельность. Интегрировать онлайн-кассу и передавать такую СНО не нужно. Формировать чеки нужно в приложении или веб-версии «Мой налог».
    ‣ Автоматизированная упрощённая система налогообложения. Передавать такую систему налогообложения нужно как УСН. Это работает только для обычной схемы, для Т-Чеков не работает.
    1055
    Payments Object Нет** Объект c информацией о видах суммы платежа.
    Параметры объекта описаны в таблице Структура объекта Payments.

    * Должен быть заполнен один из параметров — Phone или E-mail.

    ** Если объект не передан, автоматически указывается итоговая сумма чека с видом оплаты «Безналичный».
    Если передан объект receipt.Payments, значение в Electronic должно быть равно итоговому значению Amount в методе Init. При этом сумма введенных значений по всем видам оплат, включая Electronic, должна быть равна сумме всех товаров (Amount), переданных в объекте receipt.Items.

    Структура объекта Shops

    Параметр Тип Обязательность Описание
    ShopCode String Да Присвоенный идентификатор точки на стороне банка.
    Amount String Да Сумма в копейках, которая относится к указанному ShopCode.
    Name String Нет Наименование позиции. Максимум — 128 символов.
    Fee String Нет Сумма комиссии в копейках, удерживаемая из возмещения партнера в пользу маркетплейса.
    Если не передано, используется комиссия, указанная при регистрации.

    Структура объекта Items

    Параметр Тип Обязательность Описание Тег ФФД
    Name String Да Наименование товара. 1030
    Price Number Да Цена в копейках. 1078
    Quantity Number Да Количество/вес:
    • целая часть не больше 5 знаков;
    • дробная часть не больше 3 знаков для Атол и 2 знаков для CloudPayments.
    1023
    Amount Number Да Сумма в копейках. Целочисленное значение не больше 10 знаков. 1043
    PaymentMethod Enum Да Признак способа расчёта. Если значение не передано, по умолчанию в онлайн-кассу передается full_payment.

    Возможные значения:
    full_prepayment — предоплата 100%;
    prepayment — предоплата;
    advance — аванс;
    full_payment — полный расчет;
    partial_payment — частичный расчет;
    credit — передача в кредит;
    credit_payment — оплата кредита.
    1214
    PaymentObject Enum Да Признак предмета расчёта.Если значение не передано, по умолчанию в онлайн-кассу отправляется commodity.

    Возможные значения:
    commodity — товар;
    excise — подакцизный товар;
    job — работа;
    service — услуга;
    gambling_bet — ставка азартной игры;
    gambling_prize — выигрыш азартной игры;
    lottery — лотерейный билет
    lottery_prize — выигрыш лотереи;
    intellectual_activity — предоставление результатов интеллектуальной деятельности;
    payment — платеж;
    agent_commission — агентское вознаграждение;
    composite — составной предмет расчета;
    another — иной предмет расчета.
    1212
    Tax Enum Да Ставка налога. Возможные значения:
    none — без НДС;
    vat0 — НДС по ставке 0%;
    vat10 — НДС чека по ставке 10%;
    vat20 — НДС чека по ставке 20%;
    vat110 — НДС чека по расчетной ставке 10/110;
    vat120 — НДС чека по расчетной ставке 20/120.
    1199
    Ean13 String Нет Штрихкод в требуемом формате. В зависимости от типа кассы, требования могут отличаться:

    АТОЛ Онлайн — шестнадцатеричное представление с пробелами. Максимальная длина — 32 байта (^[a-fA-F0-9]{2}$)(^([afA-F0-9]{2}\s){1,31}[a-fA-F0-9]{2}$).
    Пример:
    00 00 00 01 00 21 FA 41 00 23 05 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 00 AB 00.

    CloudKassir — длина строки: четная, от 8 до 150 байт — то есть от 16 до 300 ASCII символов ['0' - '9' , 'A' - 'F' ] шестнадцатеричного представления кода маркировки товара.
    Пример:
    303130323930303030630333435.

    OrangeData — строка, содержащая base64 кодированный массив от 8 до 32 байт.
    Пример:
    igQVAAADMTIzNDU2Nzg5MDEyMwAAAAAAAQ==.
    Если в запросе передать не прошедший валидацию параметр Ean13, возвращается неуспешный ответ с текстом ошибки в параметре message — «Неверный параметр Ean13».
    1162
    ShopCode String Нет Код магазина. Для параметра ShopСode нужно использовать значение параметра Submerchant_ID, полученного в ответ при регистрации магазинов через XML. Если XML не используется, передавать поле не нужно.
    AgentData Object Да, если используется агентская схема Данные агента. Параметры объекта описаны в таблице Структура объекта AgentData.
    SupplierInfo Object Да, если передается значение AgentSign в объекте AgentData Данные поставщика платежного агента. Параметры объекта описаны в таблице Структура объекта AgentData.

    Как передать скидку в платеже

    На всех кассах, кроме Cloud Kassir, скидка уже должна быть заложена на стороне клиента — к нам в запросе должны приходить итоговые значения Price, Quantity, Amount. Произведение цены и количества/веса (Price * Quantity) должно быть равно общей сумме (Amount).

    Для Cloud Kassir скидка может быть учтена только в AmountPrice можно прописывать без скидки.

    Промокоды и бонусы

    При оплате бонусами для каждой позиции прописывается реальная полная стоимость в цене — Price. В объекте Payments нужно указать AdvancePayment (сумма оплаты бонусами) и Electronic (сумма, которую заплатил клиент).

    Структура объекта Payments

    Параметр Тип Обязательность Описание Тег ФФД
    Cash Number(14) Нет Вид оплаты «Наличные». Сумма к оплате в копейках, не больше 14 знаков. 1031
    Electronic Number(14) Да Вид оплаты «Безналичный». 1081
    AdvancePayment Number(14) Нет Вид оплаты «Предварительная оплата (Аванс)». 1215
    Credit Number(14) Нет Вид оплаты «Постоплата (Кредит)». 1216
    Provision Number(14) Нет Вид оплаты «Иная форма оплаты». 1217

    Структура объекта AgentData

    Данные агента. Обязателен, если используется агентская схема.

    Параметр Тип Обязательность Описание Тег ФФД
    AgentSign String Нет Признак агента.
    Возможные значения:
    bank_paying_agent — банковский платежный агент;
    bank_paying_subagent — банковский платежный субагент;
    paying_agent — платежный агент;
    paying_subagent — платежный субагент;
    attorney — поверенный;
    commission_agent — комиссионер;
    another — другой тип агента.
    1222
    OperationName String Нет Наименование операции.
    Атрибут обязателен, если AgentSign передан в значениях:
    • bank_paying_agent
    • bank_paying_subagent
    1044
    Phones Array of Strings Нет Телефоны платежного агента в формате +{Ц}.
    Атрибут обязателен, если в AgentSign передан в значениях:
    bank_paying_agent;
    bank_paying_subagent;
    paying_agent;
    paying_subagent.
    1073
    ReceiverPhones Array of Strings Нет Телефоны оператора по приему платежей в формате +{Ц}.
    Атрибут обязателен, если в AgentSign передан в значениях:
    paying_agent;
    paying_subagent.
    1074
    TransferPhones Array of Strings Нет Телефоны оператора перевода в формате +{Ц}.
    Атрибут обязателен, если в AgentSign передан в значениях:
    bank_paying_agent;
    bank_paying_subagent.
    1075
    OperatorName String Нет Наименование оператора перевода.
    Атрибут обязателен, если в AgentSign передан в значениях:
    bank_paying_agent;
    bank_paying_subagent.
    1026
    OperatorAddress String Нет Адрес оператора перевода.
    Атрибут обязателен, если в AgentSign передан в значениях:
    bank_paying_agent;
    bank_paying_subagent.
    1005
    OperatorInn String Нет ИНН оператора перевода.
    Атрибут обязателен, если в AgentSign передан в значениях:
    bank_paying_agent;
    bank_paying_subagent.
    1016

    Структура объекта SupplierInfo

    Данные поставщика платежного агента. Обязателен, если передается значение AgentSign в объекте AgentData.

    Параметр Тип Обязательность Описание Тег ФФД
    Phones Массив String Да, если передается значение AgentSign в объекте AgentData. Телефон поставщика в формате +{Ц}. 1–19 символов в каждой строке массива. 1171
    Name String Да, если передается значение AgentSign в объекте AgentData. Наименование поставщика.
    В данные 239 символов включаются телефоны поставщика + 4 символа на каждый телефон.
    Например, если передано два телефона поставщика длиной 12 и 14 символов, максимальная длина наименования поставщика будет 239 – (12 + 4) – (14 + 4) = 205 символов.
    1225
    Inn String Да, если передается значение AgentSign в объекте AgentData. ИНН поставщика в формате ЦЦЦЦЦЦЦЦЦЦ. 10–12 символов. 1226

    Пример запроса:

    {
    "TerminalKey":"TinkoffBankTest",
    "Amount":140000,
    "OrderId":"21050",
    "Description":"Подарочная карта на 1000 рублей",
    "Token":"871199b37f207f0c4f721a37cdcc71dfcea880b4a4b85e3cf852c5dc1e99a8d6"
    "DATA":{
    "Phone":"+71234567890",
    "Email":"a@test.com"},
    "Receipt": {
          "Email":"a@test.ru",
          "Phone":"+79031234567",
          "Taxation":"osn",
          "Items": [
            {
              "Name":"Наименование товара 1",
              "Price":10000,
              "Quantity":1.00,
              "Amount":10000,
              "Tax":"vat10"
            },
            {
              "Name":"Наименование товара 2",
              "Price":20000,
              "Quantity":2.00,
              "Amount":40000,
              "Tax":"vat20"
            },
            {
              "Name":"Наименование товара 3",
              "Price":30000,
              "Quantity":3.00,
              "Amount":90000,
              "Tax":"vat10"
            }
          ]
        }
    }
    

    Пример запроса, если используется агентская схема:

    {
    "TerminalKey":"TinkoffBankTest",
    "Amount": 50000,
    "OrderId":"21050",
    "Description":"Подарочная карта на 1000 рублей",
    "Token":"2ED30E046136931431B5251B7C9A1EAC68DAB082203BD42676BA14A851359DF4",
    "DATA":{"Phone":"+71234567890","Email":"a@test.com"},
    "Receipt": {
          "Email": "a@test.ru",
          "Phone": "+79031234567",
          "Taxation": "osn",
       "Customer":"TestCustomer",
       "CustomerInn":"1234567890",
       "Payments": {
                "electronic": 50000,
                "cash": 90000,
                "advancePayment": 0,
                "credit": 0,
                "provision": 0
            },
       "AgentData": {
                "AgentSign": "bank_paying_subagent",
                "OperationName": "Чек",
                "Phones": ["+19221210697", "+19098561231"],
                "ReceiverPhones": ["+29221210697", "+29098561231"],
                "TransferPhones": ["+39221210697"],
                "OperatorName": "Tinkoff",
                "OperatorAddress": "г.Москва",
                "OperatorInn": "7710140679"
            },
            "SupplierInfo": {
                "Phones": ["+49221210697", "+49098561231"]
            },
          "Items": [
            {
        "AgentData": {
               "AgentSign": "paying_agent",
                 "OperationName": "Позиция чека",
                 "Phones": ["+790912312398"],
                 "ReceiverPhones": ["+79221210697", "+79098561231"],
                 "TransferPhones": ["+79221210697"],
                 "OperatorName": "Tinkoff",
                 "OperatorAddress": "г. Тольятти",
                 "OperatorInn": "7710140679"
          },
                "SupplierInfo": {
                  "Phones": ["+79221210697", "+79098561231"],
                  "Name": "ООО Вендор товара",
                  "Inn": "7710140679"
          },
              "Name": "Наименование товара 1",
              "Price": 10000,
              "Quantity": 1.00,
              "Amount": 10000,
              "Tax": "vat10",
              "Ean13": "303130323930303030630333435",
              "ShopCode": "12345",
              "MeasurementUnit": "шт"
            },
            {
              "Name": "Наименование товара 2",
              "Price": 20000,
              "Quantity": 2.00,
              "Amount": 40000,
              "Tax": "vat20"
            },
            {
              "Name": "Наименование товара 3",
              "Price": 30000,
              "Quantity": 3.00,
              "Amount": 90000,
              "Tax": "vat10"
            }
          ]
        }
    }
    

    Структура объекта Receipt для ФФД 1.2

    JSON-объект с данными чека. Обязателен, если подключена онлайн-касса.

    Параметр Тип Обязательность Описание Тег ФФД
    Items Array of objects Да Массив, содержащий в себе информацию о товарах.
    Параметры объекта описаны в таблице Структура объекта Items.
    FfdVersion String Нет
    Версия ФФД. Возможные значения:
    • FfdVersion: 1.2
    • FfdVersion: 1.05

    Версия ФФД по умолчанию — 1.05.
    Email String Нет* Электронная почта для отправки чека. 1008
    Phone String Нет* Телефон для отправки чека. 1008
    Taxation Enum Да Система налогообложения. Возможные значения:
    osn — общая СН;
    usn_income — упрощенная СН;
    usn_income_outcome — упрощенная СН (доходы минус расходы);
    envd — единый налог на вмененный доход;
    esn — единый сельскохозяйственный налог;
    patent — патентная СН.

    Примечание:
    ‣ Самозанятые работают по системе налогообложения НПД — налог на профессиональную деятельность. Интегрировать онлайн-кассу и передавать такую СНО не нужно. Формировать чеки нужно в приложении или веб-версии «Мой налог».
    ‣ Автоматизированная упрощённая система налогообложения. Передавать такую систему налогообложения нужно как УСН. Это работает только для обычной схемы, для Т-Чеков не работает.
    1055
    Payments Object Нет** Объект c информацией о видах суммы платежа
    Параметры объекта описаны в таблице Структура объекта Payments.

    * Должен быть заполнен один из параметров — Phone или E-mail.

    ** Если объект не передан, автоматически указывается итоговая сумма чека с видом оплаты «Безналичный».
    Если передан объект receipt.Payments, значение в Electronic должно быть равно итоговому значению Amount в методе Init. При этом сумма введенных значений по всем видам оплат, включая Electronic, должна быть равна сумме всех товаров (Amount), переданных в объекте receipt.Items.

    Наименование Тип Обязательность Описание Тег ФФД
    FfdVersion String Нет
    Версия ФФД. Возможные значения:
    • FfdVersion: 1.2
    • FfdVersion: 1.05

    Версия ФФД по умолчанию — 1.05.
    ClientInfo Object Нет Информация по покупателю.
    Taxation Enum Да Система налогообложения. Возможные значения:
    osn — общая СН;
    usn_income — упрощенная СН;
    usn_income_outcome — упрощенная СН (доходы минус расходы);
    envd — единый налог на вмененный доход;
    esn — единый сельскохозяйственный налог;
    patent — патентная СН.

    Примечание:
    ‣ Самозанятые работают по системе налогообложения НПД — налог на профессиональную деятельность. Интегрировать онлайн-кассу и передавать такую СНО не нужно. Формировать чеки нужно в приложении или веб-версии «Мой налог».
    ‣ Автоматизированная упрощённая система налогообложения. Передавать такую систему налогообложения нужно как УСН. Это работает только для обычной схемы, для Т-Чеков не работает.
    1055
    Email String Нет* Электронная почта для отправки чека. 1008
    Phone String Нет* Телефон для отправки чека. 1008
    Customer String Нет Идентификатор/Имя покупателя. 1227
    CustomerInn String Нет ИНН покупателя. 1228
    Items Array of objects Да Массив, содержащий в себе информацию о товарах.
    Payments Object Нет** Объект c информацией о видах суммы платежа. Параметры объекта описаны в таблице Структура объекта Payments.
    OperatingСheckProps Object Нет Операционный реквизит чека (тег 1270).
    SectoralCheckProps Object Нет Отраслевой реквизит чека (тег 1261).
    AddUserProp Object Нет Дополнительный реквизит пользователя (тег 1084).
    AdditionalCheckProps String Нет Дополнительный реквизит чека (БСО) (тег 1192).

    * Должен быть заполнен один из параметров — Phone или E-mail.

    ** Если объект не передан, автоматически указывается итоговая сумма чека с видом оплаты «Безналичный».
    Если передан объект receipt.Payments, значение в Electronic должно быть равно итоговому значению Amount в методе Init. При этом сумма введенных значений по всем видам оплат, включая Electronic, должна быть равна сумме всех товаров (Amount), переданных в объекте receipt.Items.

    Структура объекта ClientInfo

    Параметр Тип Обязательность Описание Тег ФФД
    Birthdate String Нет Дата рождения покупателя в формате ДД.ММ.ГГГГ. 1243
    Citizenship String Нет Числовой код страны, гражданином которой является покупатель. Код страны указывается в соответствии с Общероссийским классификатором стран мира ОКСМ. 1244
    DocumentСode String Нет Числовой код вида документа, удостоверяющего личность
    Может принимать только значения:
    21 — паспорт гражданина Российской Федерации;
    22 — паспорт гражданина Российской Федерации, дипломатический паспорт, служебный паспорт, удостоверяющие личность гражданина Российской Федерации за пределами Российской Федерации;
    26 — временное удостоверение личности гражданина Российской Федерации, выдаваемое на период оформления паспорта гражданина Российской Федерации;
    27 — свидетельство о рождении гражданина Российской Федерации — для граждан Российской Федерации в возрасте до 14 лет;
    28 — иные документы, признаваемые документами, удостоверяющими личность гражданина Российской Федерации в соответствии с законодательством Российской Федерации
    31 — паспорт иностранного гражданина;
    32 — иные документы, признаваемые документами, удостоверяющими личность иностранного гражданина в соответствии с законодательством Российской Федерации и международным договором Российской Федерации;
    33 — документ, выданный иностранным государством и признаваемый в соответствии с международным договором Российской Федерации в качестве документа, удостоверяющего личность лица безгражданства;
    34 — вид на жительство (для лиц без гражданства);
    35 — разрешение на временное проживание (для лиц без гражданства);
    36 — свидетельство о рассмотрении ходатайства о признании лица без гражданства беженцем на территории Российской Федерации по существу;
    37 — удостоверение беженца;
    38 — иные документы, признаваемые документами, удостоверяющими личность лиц без гражданства в соответствии с законодательством Российской Федерации и международным договором Российской Федерации;
    40 — документ, удостоверяющий личность лица, не имеющего действительного документа, удостоверяющего личность, на период рассмотрения заявления о признании гражданином Российской Федерации или о приеме в гражданство Российской Федерации.
    1245
    DocumentData String Нет Реквизиты документа, удостоверяющего личность — например, серия и номер паспорта. 1246
    Address String Нет Адрес покупателя (клиента), грузополучателя. Максимум — 256 символов. 1254

    Структура объекта OperatingСheckProps

    Параметр Тип Обязательность Описание
    Name String Да Идентификатор операции (тег 1271).
    Принимает значения 0 до определения значения реквизита ФНС России.
    Value String Да Данные операции (тег 1272).
    Timestamp String Да Дата и время операции в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС (тег 1273).

    Структура объекта SectoralCheckProps

    Параметр Тип Обязательность Описание
    FederalId String Да Идентификатор ФОИВ (тег 1262). Максимальное количество символов — 3.
    Date String Да Дата документа основания в формате ДД.ММ.ГГГГ (тег 1263).
    Number String Да Номер документа основания (тег 1264).
    Value String Да Значение отраслевого реквизита (тег 1265).

    Структура объекта AddUserProp

    Параметр Тип Обязательность Описание
    Name String Да Наименование дополнительного реквизита пользователя (тег 1085).
    Value String Да Значение дополнительного реквизита пользователя (тег1086).

    Структура объекта Items

    Параметр Тип Обязательность Описание Тег ФФД
    Name String Да Наименование товара.
    Максимум — 128 символов.
    1030
    Price Number Да Цена в копейках. 1079
    Quantity Number Да Количество/вес:
    • целая часть не больше 5 знаков;
    • дробная часть не больше 3 знаков для Атол и 2 знаков для CloudPayments.
    1023
    Amount Number Да Сумма в копейках. Целочисленное значение не больше 10 знаков. 1043
    PaymentMethod Enum Да Признак способа расчёта. Если значение не передано, по умолчанию в онлайн-кассу передается full_payment.

    Возможные значения:
    full_prepayment — предоплата 100%;
    prepayment — предоплата;
    advance — аванс;
    full_payment — полный расчет;
    partial_payment — частичный расчет;
    credit — передача в кредит;
    credit_payment — оплата кредита.
    1214
    PaymentObject Enum Да Признак предмета расчёта.Если значение не передано, по умолчанию в онлайн-кассу отправляется commodity.

    Возможные значения:
    commodity — товар;
    excise — подакцизный товар;
    job — работа;
    service — услуга;
    gambling_bet — ставка азартной игры;
    gambling_prize — выигрыш азартной игры;
    lottery — лотерейный билет
    lottery_prize — выигрыш лотереи;
    intellectual_activity — предоставление результатов интеллектуальной деятельности;
    payment — платеж;
    agent_commission — агентское вознаграждение;
    composite — составной предмет расчета;
    another — иной предмет расчета.
    1212
    UserData String Нет Дополнительный реквизит предмета расчета. 1191
    Excise Number Нет Сумма акциза в рублях с учетом копеек, включенная в стоимость предмета расчета.
    Целая часть — не больше 8 знаков, дробная — не болше 2.
    Значение не может быть отрицательным.
    1229
    CountryCode String Нет Цифровой код страны происхождения товара в соответствии с Общероссийским классификатором стран мира, 3 цифры. 1230
    DeclarationNumber String Нет Номер таможенной декларации. Максимум — 32 цифры. 1231
    MeasurementUnit String Да Единицы измерения. Передается в соответствии с ОК 015-94 (МК 002-97).
    Возможные значения. Также можно передавать произвольные значения.
    MeasurementUnit обязателен, если ФФД онлайн-кассы — 1.2.
    2108
    MarkProcessingMode String Нет* Режим обработки кода маркировки. Должен принимать значение 0. 2102
    MarkCode Object Нет* Код маркировки в машиночитаемом формате, который формируется по установленным требованиями и правилам и наносится на упаковку, товары или товарные ярлыки. Параметры объекта описаны в таблице Структура объекта MarkCode. 1163
    MarkQuantity Object Нет** Реквизит «дробное количество маркированного товара». MarkQuantity не является обязательным объектом — в том числе для товаров с маркировкой. Этот объект можно передавать, если товар с маркировкой — то есть даже при ФФД 1.2 этот объект не является обязательным.
    SectoralItemProps Array of objects Нет*** Отраслевой реквизит предмета расчета. Параметры объекта описаны в таблице Структура объекта SectoralItemProps.
    Tax Enum Да Ставка налога. Возможные значения:
    none — без НДС;
    vat0 — НДС по ставке 0%;
    vat10 — НДС чека по ставке 10%;
    vat20 — НДС чека по ставке 20%;
    vat110 — НДС чека по расчетной ставке 10/110;
    vat120 — НДС чека по расчетной ставке 20/120.
    1199
    AgentData Object Да, если используется агентская схема Данные агента. Параметры объекта описаны в таблице Структура объекта AgentData.
    SupplierInfo Object Да, если передается значение AgentSign в объекте AgentData Данные поставщика платежного агента. Параметры объекта описаны в таблице Структура объекта AgentData.

    * Включается в чек, если предметом расчета является товар, который подлежит обязательной маркировке средством идентификации — соответствующий код в поле paymentObject.

    ** Передается только в случае, если:

    • расчет осуществляется за маркированный товар — соответствующий код в поле paymentObject,

    • значение в поле measurementUnit равно 0.

      Состоит из двух параметров:

      • Numerator — числитель дробной части предмета расчета. Значение должно быть строго меньше значения реквизита Denominator.
      • Denominator — знаменатель дробной части предмета расчета. Значение равно количеству товара в партии (упаковке), имеющей общий код маркировки товара.

    Пример:

    {
    "numerator": "1",
    "denominator": "2"
    }
    

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

    Как передать скидку в платеже

    На всех кассах, кроме Cloud Kassir, скидка уже должна быть заложена на стороне клиента — к нам в запросе должны приходить итоговые значения Price, Quantity, Amount. Произведение цены и количества/веса (Price * Quantity) должно быть равно общей сумме (Amount).

    Для Cloud Kassir скидка может быть учтена только в AmountPrice можно прописывать без скидки.

    Промокоды и бонусы

    При оплате бонусами для каждой позиции прописывается реальная полная стоимость в цене — Price. В объекте Payments нужно указать AdvancePayment (сумма оплаты бонусами) и Electronic (сумма, которую заплатил клиент).

    Структура объекта MarkCode

    Параметр Тип Обязательность Описание
    MarkCodeType String Да Тип штрихкода. Возможные значения:
    UNKNOWN — код товара, формат которого не идентифицирован, как один из реквизитов;
    EAN8 — код товара в формате EAN-8;
    EAN13 — код товара в формате EAN-13;
    ITF14 — код товара в формате ITF-14;
    GS10 — код товара в формате GS1, нанесенный на товар, не подлежащий маркировке
    GS1M — код товара в формате GS1, нанесенный на товар, подлежащий маркировке;
    SHORT — код товара в формате короткого кода маркировки, нанесенный на товар;
    FUR — контрольно-идентификационный знак мехового изделия;
    EGAIS20 — код товара в формате ЕГАИС-2.0;
    EGAIS30 — код товара в формате ЕГАИС-3.0;
    RAWCODE — код маркировки, как он был прочитан сканером.
    value String Да Код маркировки.

    Структура объекта SectoralItemProps

    Параметр Тип Обязательность Описание Тег ФФД
    FederalId Enum (string) Да Идентификатор ФОИВ — федеральный орган исполнительной власти. 1262
    Date String Да Дата нормативного акта ФОИВ. 1263
    Number String Да Номер нормативного акта ФОИВ. 1264
    Value String Да Состав значений, определенных нормативного актом ФОИВ. 1265

    Пример запроса с маркировкой:

    {
        "TerminalKey": "testRegressTwoFiscalAtolBank",
        "Amount": 90000,
        "OrderId": "{{$timestamp}}",
        "Description": "RS_TESTING",
        "CustomerKey": "a.grigorash",
        "Receipt": {
            "FfdVersion": "1.2",
            "ClientInfo": {
                "Birthdate": "21.11.1995",
                "Сitizenship": "643",
                "DocumentCode": "40",
                "DocumentData": "4507 443564",
                "Address": "г. Краснодар ул. Привокзальная 1"
            },
            "Taxation": "osn",
            "Email": "ext.test.qa@tinkoff.ru",
            "Phone": "88005553535",
            "Customer": "Клиент",
            "CustomerInn": "516974792202",
            "Items": [
                {
                    "AgentData": {
                        "AgentSign": "paying_agent",
                        "OperationName": "Позиция чека",
                        "Phones": [
                            "+790912312398"
                        ],
                        "ReceiverPhones": [
                            "+79221210697",
                            "+79098561231"
                        ],
                        "TransferPhones": [
                            "+79221210697"
                        ],
                        "OperatorName": "Tinkoff",
                        "OperatorAddress": "г. Тольятти",
                        "OperatorInn": "7710140679"
                    },
                    "SupplierInfo": {
                        "Phones": [
                            "+79221210697",
                            "+79098561231"
                        ],
                        "Name": "ООО Вендор товара",
                        "Inn": "7710140679"
                    },
                    "Name": "Тестовый товар",
                    "Price": 100000,
                    "Quantity": 1,
                    "Amount": 90000,
                    "Tax": "vat20",
                    "PaymentMethod": "full_prepayment",
                    "PaymentObject": "goods_with_marking_code",
                    "UserData": "Данные пользователя ext.test.qa@tinkoff.ru",
                    "Excise": 12.2,
                    "CountryCode": "056",
                    "DeclarationNumber": "12345678901",
                    "MeasurementUnit": "шт",
                    "MarkProcessingMode": "0",
                    "MarkCode": {
                        "MarkCodeType": "EAN8",
                        "Value": "12345678"
                    },
                    "MarkQuantity": {
                        "Denominator": "2",
                        "Numerator": "1"
                    },
                    "SectoralItemProps": [
                        {
                            "Number": "123/43",
                            "Date": "21.11.2020",
                            "Value": "test value SectoralItemProps",
                            "FederalId": "001"
                        }
                    ]
                }
            ]
        }
    }
    

    Пример запроса без маркировки:

    {
        "TerminalKey": "testRegressTwoFiscalAtolBank",
        "Amount": 90000,
        "OrderId": "{{$timestamp}}",
        "Description": "RS_TESTING",
        "CustomerKey": "a.grigorash",
        "Receipt": {
            "FfdVersion": "1.2",
            "Taxation": "osn",
            "Email": "ext.test.qa@tinkoff.ru",
            "Phone": "88005553535",
            "Customer": "Клиент",
            "CustomerInn": "516974792202",
            "Items": [
                {
                    "AgentData": {
                        "AgentSign": "paying_agent",
                        "OperationName": "Позиция чека",
                        "Phones": ["+790912312398"],
                        "ReceiverPhones": ["+79221210697", "+79098561231"],
                        "TransferPhones": ["+79221210697"],
                        "OperatorName": "Tinkoff",
                        "OperatorAddress": "г. Тольятти",
                        "OperatorInn": "7710140679"
                    },
                    "SupplierInfo": {
                        "Phones": ["+79221210697", "+79098561231"],
                        "Name": "ООО Вендор товара",
                        "Inn": "7710140679"
                    },
                    "Name": "Тестовый товар",
                    "Price": 100000,
                    "Quantity": 1,
                    "Amount": 90000,
                    "Tax": "vat20",
                    "PaymentMethod": "full_prepayment",
                    "PaymentObject": "commodity",
                    "MeasurementUnit": "шт"
                     
                }
            ]
        }
    }
    

    Коды ошибок

    CODE MESSAGE DETAILS (опционально)
    0 None
    1 Параметры не сопоставлены
    2 Отсутствуют обязательные параметры
    3 Внутренняя ошибка системы интернет-эквайринга
    4 Не получится изменить статус платежа
    5 Обратитесь в поддержку, чтобы уточнить детали
    6 Не получилось привязать карту покупателя. Обратитесь в поддержку, чтобы уточнить детали
    7 Неверный статус покупателя
    8 Неверный статус транзакции
    9 Переадресовываемый URL пуст
    10 Метод Charge заблокирован для данного терминала
    11 Невозможно выполнить платеж
    12 Неверный параметр RedirectDueDate
    13 Оплата с мобильного телефона недоступна
    13 Оплата через WebMoney недоступна
    14 Платеж неверный
    15 Не удалось осуществить платеж через EINV
    16 Счет был отклонен
    17 Неверные введенные данные
    18 Не удалось осуществить платеж через MC
    19 Не удалось осуществить платеж через WebMoney
    20 Ошибка повторного идентификатора заказа
    21 Внутренняя ошибка вызова сервиса ACQAPI
    27 Кассовая ссылка на текущий момент недоступна для повторной активации
    50 Ошибка отправки нотификации
    51 Ошибка отправки email
    52 Ошибка отправки SMS
    53 Обратитесь к продавцу
    54 Повторное прохождение 3DS авторизации не допустимо
    55 Повторите попытку позже Не найдено оплаченных назначений платежа
    60 Запрещено получение документов по URL для текущего терминала Запрещено получение документов по URL для текущего терминала
    61 Должен быть заполнен один из параметров: emailList или URL Должен быть заполнен один из параметров: emailList или URL
    62 Запрещено получение документов по URL для текущего systemId Запрещено получение документов по URL для текущего systemId
    63 Не найдена операция Не найдена операция
    64 Невалидные данные в запросе Невалидные данные в запросе
    65 Не удалось сформировать документ. Обратитесь в службу поддержки Не удалось сформировать документ. Повторите операцию позднее
    66 Не удалось сформировать документ. Повторите операцию позднее Запрещено получение документов по URL для текущего терминала
    67 Не удалось сформировать документ. Повторите операцию позднее Не удалось сформировать документ. Повторите операцию позднее
    68 Не удалось сформировать документ. Обратитесь в службу поддержки Стороний сервис не доступен
    76 Операция по иностранной карте недоступна Операция по иностранной карте недоступна. Воспользуйтесь картой российского банка
    77 Оплата иностранной картой недоступна Оплата по иностранной карте недоступна. Воспользуйтесь картой российского банка
    78 Выплата на иностранную карту недоступна Выплата на иностранную карту недоступна. Воспользуйтесь картой российского банка
    79 Возврат на иностранную карту недоступен. Возврат на иностранную карту недоступен. Обратитесь в поддержку
    96 Ошибка Iris
    97 Ошибка Jasper
    98 Ошибка SubExt
    99 Попробуйте повторить попытку позже Банк, выпустивший карту, отклонил операцию
    100 • Попробуйте еще раз. Если ошибка повторится — обратитесь в поддержку
    • Платеж не получится отменить, потому что деньги покупателя не были зарезервированы
    • Платеж уже отменен
    • Не получилось отменить платеж. Укажите сумму не больше, чем зарезервировано
    • Покупатель опротестовал платеж в банке. Обратитесь в поддержку,чтобы уточнить детали
    • Платеж уже подтвержден
    • Нужно настроить подтверждение платежа через СМС (3DS) — для этого обратитесь в поддержку
    • Карта покупателя неактивна
    101 Не пройдена идентификация 3DS Ошибка прохождения 3-D Secure
    102 • Обратитесь в поддержку, чтобы уточнить детали
    • Сообщите покупателю, чтобы попробовал оплатить еще раз. Если ошибка повторится — обратитесь в поддержку
    102 Операция отклонена, пожалуйста обратитесь в интернет-магазин или воспользуйтесь другой картой Заказ не может быть оплачен, обратитесь службу поддержки
    102 Превышен лимит на сумму выплат в месяц
    102 Отказ. больше двух успешных оплат с одного email в неделю по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одного phone в неделю по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одной карты в неделю по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одной карты в сутки по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одного устройства в сутки по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одного устройства в неделю по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одного куки/идентификатора клиентского агента в сутки по проекту dolyame.ru
    102 Отказ. больше двух успешных оплат с одного куки/идентификатора клиентского агента в неделю по проекту dolyame.ru
    102 Отказ. Попытка оплаты с виртуальных или мошеннических бинов по проекту dolyame.ru
    103 Недостаточно средств на счете
    104 Ошибка выполения рекуррента
    105 Нужно настроить автоплатежи по Maestro — для этого обратитесь в поддержку
    106 Карта не поддерживает 3DS проверку. Попробуйте другую карту
    107 Неверно введен CardId. Проверьте, что такая карта была ранее привязана
    108 Оплата разрешена только по 3DS картам. Попробуйте другую карту
    109 Не найден dsTranId для сессии
    110 Не передан cres
    111 Передан некорректный cres
    116 Недостаточно средств на карте
    119 Превышено допустимое количество запросов авторизации операции
    120 Попробуйте повторить попытку позже
    123 Попробуйте повторить попытку позже
    125 Попробуйте повторить попытку позже
    191 Некорректный статус договора, обратитесь к вашему менеджеру
    201 Поле PaymentId не должно быть пустым
    201 Поле paymentMethod не должно быть пустым
    201 Поле paymentObject не должно быть пустым
    201 Поле measurementUnit не должно быть пустым
    202 Терминал заблокирован
    203 Параметры запроса не должны быть пустыми
    204 Неверный токен. Проверьте пару TerminalKey/SecretKey
    205 Неверный токен. Проверьте пару TerminalKey/SecretKey Указанный терминал не найден
    206 email не может быть пустым
    207 Параметр DATA превышает максимально допустимый размер
    208 Наименование ключа из параметра DATA превышает максимально допустимый размер
    209 Значение ключа из параметра DATA превышает максимально допустимый размер
    210 Размер поля TerminalKey должен быть от {min} до {max}
    211 Неверный формат IP
    212 Размер поля OrderId должен быть от {min} до {max}
    213 Размер поля Description должен быть от {min} до {max}
    214 Поле Currency должно быть меньше или равно {value}
    215 Размер поля PayForm должен быть от {min} до {max}
    216 Размер поля CustomerKey должен быть от {min} до {max}
    217 Поле PaymentId числовое значение должно укладываться в формат (<{integer} цифр><{fraction} цифр>)
    218 Значение PAN не является числовым
    219 Неверный срок действия карты
    220 Размер поля CardHolder должен быть от {min} до {max}
    221 Значение CVV не является числовым
    222 Поле CardId числовое значение должно укладываться в формат (<{integer} цифр><{fraction} цифр>)
    223 Поле RebillId числовое значение должно укладываться в формат <{integer} цифр><{fraction} цифр>
    224 Неверный формат email
    225 Неверный формат email
    226 Размер поля email должен быть от {min} до {max}
    227 Размер поля Phone должен быть от {min} до {max}
    228 Размер поля MD должен быть от {min} до {max}
    229 Размер поля PaRes должен быть от {min} до {max}
    230 Размер поля Code должен быть от {min} до {max}
    231 Не найден идентификатор карты
    233 Размер поля CardId должен быть от {min} до {max}
    234 Размер поля PAN должен быть от {min} до {max}
    235 Размер поля RebillId должен быть от {min} до {max}
    236 Размер поля Token должен быть от {min} до {max}
    237 Размер поля PaymentId должен быть от {min} до {max}
    238 Размер поля ExpDate должен быть от {min} до {max}
    239 Размер поля CVV должен быть от {min} до {max}
    240 Поле Amount числовое значение должно укладываться в формат (<{integer} цифр>.<{fraction} цифр>)
    241 Поле Currency должно быть больше или равно {value}
    242 Размер поля InfoEmail должен быть от {min} до {max}
    243 Ошибка шифрования карточных данных
    244 Ошибка сопоставления карточных данных
    245 Параметр AddCard не сопоставлен
    246 Параметр SendEmail не сопоставлен
    247 Параметр Amount не сопоставлен
    248 Параметр CVV не сопоставлен
    249 Параметр Currency не сопоставлен
    250 Параметр DATA не сопоставлен
    251 Неверная сумма. Сумма должна быть больше или равна {value} копеек
    252 Срок действия карты истек
    253 Валюта {value} не разрешена для данного терминала
    254 Дополнительные возможности отключены
    255 Платеж не найден
    256 Указан некорректный тип безопасной сделки Указан некорректный тип безопасной сделки
    257 Некорректное значение признака последней выплаты. Используйте значения true или false Некорректное значение признака последней выплаты. Используйте значения true или false
    258 Неверный параметр Ean13
    259 Параметр EncryptedPaymentData не сопоставлен
    260 Максимальная длина номера телефона — 30 символов
    261 Параметр Source не сопоставлен
    262 Истек срок действия родительского платежа
    308 Сумма всех позиций в чеке должна равняться сумме всех видов оплаты
    309 Поле Receipt не должно быть пустым
    310 Дробная часть параметра Quantity не должна быть больше {value} знаков
    310 Целая часть параметра Quantity не должна быть больше {value} знаков
    311 Ошибка регистрации чека в Receipt Service
    312 Ошибка получения чека из Receipt Service
    313 Ошибка создания организации в Receipt Service
    314 Ошибка создания кассы в Receipt Service
    315 Касса не найдена
    316 Максимальная длина номера телефона — 19 символов
    317 Неверное значение поля agentSign
    318 Поле AgentSign не должно быть пустым
    319 Поле SupplierInfo не должно быть пустым
    320 Поле Inn в объекте SupplierInfo не должно быть пустым
    321 Поле Receipts не должно быть пустым
    322 Передана некорректная подпись
    323 Amount не совпадают
    324 Указанный тип отмены не может быть выполнен по операции
    325 Транзакция не найдена
    326 Неверный amount
    327 "Терминал не поддерживает C2C переводы или не передан Route=""C2C"" для C2C терминала"
    328 Должны присутствовать данные для списания и данные для пополнения
    329 email или Phone обязательны при передаче чека
    330 Сумма в запросе больше чем в оригинальной транзакции
    331 Неверный терминал
    332 Поле Fee в объекте Shops должно быть больше или равно 0
    333 Поле Amount в объекте Shops должно быть больше или равно 1
    334 Суммы в чеке и в платеже не совпадают
    335 OrderId {value} не найден для TerminalKey {value}
    381 Возможна привязка только резидентных карт
    382 Возможна привязка только нерезидентных карт
    383 Поле markProcessingMode должно быть заполнено для маркированных товаров
    383 Поле markCode должно быть заполнено для маркированных товаров
    383 Поле sectoralItemProps должно быть заполнено для маркированных товаров
    383 Поле markQuantity должно быть заполнено для маркированных товаров
    383 Поле {value} для маркированных товаров должно принимать значение {value}
    383 markCode.value имеет некорректное значение
    383 numerator и denominator должны быть больше 0
    383 numerator должен быть строго меньше denominator
    383 Для версии кассы ФФД 1.2 объекты AgentData и SupplierInfo должны быть переданы в Items
    384 Для C2C запрещено проводить рекуррент по данной ПС Для C2C запрещено проводить рекуррент по данной ПС
    385 Поле markQuantity передается только для маркированных товаров
    385 Поле markProcessingMode передается только для маркированных товаров
    386 markQuantity заполняется только для дробного расчета за штучный маркированный товар
    401 Внутренняя ошибка системы
    402 Повторите попытку позже
    403 Превышен лимит на количество пополнений в месяц
    404 Превышен лимит на сумму пополнения через бесконтактные сервисы
    405 Превышен лимит на сумму пополнения по виртуальной карте
    406 Превышен лимит на сумму пополнения в месяц через мобильное приложение
    407 Не найдено
    410 Данный тип перевода для терминала не доступен
    411 Сертификат не найден
    412 Истек срок действия сертификата
    413 Сертификат заблокирован
    414 Сертификат уже сохранен для данного терминала
    415 Дата начала срока действия сертификата еще не наступила
    416 Некорректное значение параметра SetStatus
    417 Ошибка обработки сертификата
    419 Параметр account объекта DATA должен быть заполнен корректно для MCC: 6050/6051
    500 Добавление карты к данному терминалу запрещено
    501 Терминал не найден
    502 Карта по requestKey не найдена
    503 CustomerKey не найден
    504 Не удалось провести платеж при привязке карты
    505 Не удалось привязать карту. Внутренняя ошибка
    506 Карта добавлена в черный список
    507 Карта не поддерживает 3DS проверку. Попробуйте другую карту
    508 Неверный номер карты
    509 Не удалось выполнить отмену при привязке карты
    510 Карта уже привязана к переданному CustomerKey
    511 Проверка 3DS не пройдена
    512 Не удалось выполнить запрос на проверку 3DS
    513 Не удалось выполнить платеж после прохождения 3DS
    514 Введена неверная сумма холдирования
    515 Внутренняя ошибка
    600 Карта добавлена в черный список
    600 Интернет-магазин отклонил операцию по данной карте. Обратитесь в интернет-магазин для выяснения причин отказа в платеже
    601 Разрешены операции только по Master Card
    603 Превышено количество попыток оплаты с данной карты
    604 Обратитесь в поддержку, чтобы уточнить детали
    619 Отсутствуют обязательные данные отправителя Не переданы персональные данные отправителя для операции emoney2card больше 15000 руб.
    620 Проверьте сумму — она не может быть равна 0 Сумма операции не может быть равна 0
    623 Выплата по этому заказу уже прошла Запрещено проводить платеж с OrderId для которого уже есть успешный платеж
    632 Превышен лимит на сумму операции Лимит на сумму пополнения emoney2card. См. лимиты
    633 Превышен лимит на количество переводов в день по иностранным картам Лимит на кол-во пополнений emoney2card для карт эмитированных нерезидентами РФ за 1 отчетный день
    634 Превышен лимит на сумму переводов по номеру карты в месяц Лимит на сумму пополнения emoney2card по номеру карты одного получателя в отчетный месяц
    637 Не хватает данных получателя или отправителя для выплаты на иностранную карту. Проверьте заполнение Отсутствуют персональные данные получателя/отправителя при переводе на иностранную карту
    642 Проверьте номер карты Карта не прошла проверку по алгоритму Луна
    648 Магазин заблокирован или еще не активирован. Обратитесь в поддержку, чтобы уточнить детали
    650 Сообщите покупателю, чтобы попробовал оплатить еще раз. Если ошибка повторится — обратитесь в поддержку
    651 Не получилось совершить платеж. Свяжитесь с поддержкой Передаваемый Request_Id не найден
    702 Поле maid и saav должно быть задано в настройках терминала
    703 Обратитесь в поддержку, чтобы уточнить детали
    800 Комиссия не найдена
    903 Повторите попытку позже
    914 Платеж не найден
    926 Сделка уже закрыта Сделка уже закрыта
    927 Сделка не найдена Сделка не найдена
    991 Для использования 3dsType нужно установить 3ds терминал Для использования TDS-роутинга нужно пользоваться ТДС терминалом
    999 Попробуйте повторить попытку позже
    1001 Свяжитесь с банком Свяжитесь с банком, выпустившим карту, чтобы провести платеж
    1003 Неверный магазин Неверный номер магазина. Идентификатор магазина недействителен
    1004 Банк, который выпустил карту, считает платеж подозрительным
    1005 Платеж отклонен банком, выпустившим карту Платеж отклонен банком, выпустившим карту
    1006 Платеж не прошел Свяжитесь с банком, выпустившим карту, чтобы провести платеж
    1007 Банк, который выпустил карту, считает платеж подозрительным
    1008 Банк, который выпустил карту, отклонил платеж
    1012 Банк, который выпустил карту, отклонил платеж
    1013 Банк, который выпустил карту, отклонил платеж — сумма превышает лимит по карте Сумма превышает лимит платежа вашего банка. Воспользуйтесь другой картой или обратитесь в банк
    1014 Карта недействительна Неправильные реквизиты — проверьте их или воспользуйтесь другой картой
    1015 Неверный номер карты Неверный номер карты
    1017 Попробуйте снова или свяжитесь с банком, выпустившим карту Попробуйте снова или свяжитесь с банком, выпустившим карту
    1018 Неизвестный статус платежа
    1019 Банк, который выпустил карту, отклонил платеж — сумма превышает лимит по карте
    1030 Повторите попытку позже. Не получилось оплатить. Попробуйте еще раз
    1033 Истек срок действия карты
    1034 Попробуйте повторить попытку позже Не получилось оплатить. Воспользуйтесь другой картой или обратитесь в банк, выпустивший карту
    1038 Превышено количество попыток ввода ПИН-кода — попробуйте снова или обратитесь в банк, выпустивший карту
    1039 Платеж отклонен — счет не найден
    1041 Карта утеряна Карта утеряна. Свяжитесь с банком, выпустившим карту
    1043 Банк, который выпустил карту, считает платеж подозрительным
    1051 Недостаточно средств на карте. Не получилось оплатить. На карте недостаточно средств
    1053 Платеж отклонен — счет не найден
    1054 Истек срок действия карты Неправильные реквизиты — проверьте их или воспользуйтесь другой картой
    1055 Неверный ПИН
    1057 Покупатель запретил такие операции для своей карты
    1058 Покупатель запретил такие операции для своей карты
    1059 Банк, который выпустил карту, считает платеж подозрительным
    1061 Покупатель превысил лимит платежей по своей карте
    1062 Банк, который выпустил карту, отклонил платеж
    1063 Банк, который выпустил карту, считает платеж подозрительным
    1064 Проверьте сумму
    1065 Покупатель превысил лимит платежей по своей карте
    1071 Токен просрочен Токен просрочен
    1075 Покупатель оплатил максимум раз по своей карте за день
    1076 Не получилось отменить резервирование. Обратитесь в поддержку, чтобы уточнить детали
    1077 Коды не совпадают — попробуйте снова
    1078 Данный тип операции не поддерживается картой
    1080 Плательщик ввел неверный срок действия карты
    1082 Неверный CVV Неправильные реквизиты — проверьте их или воспользуйтесь другой картой
    1085 Операция успешна Успех
    1086 Платеж отклонен — не получилось подтвердить ПИН-код
    1088 Банк, который выпустил карту, отклонил платеж
    1089 Попробуйте повторить попытку позже Не получилось оплатить. Попробуйте еще раз или обратитесь в банк, выпустивший карту
    1091 Технические работы в банке, который выпустил карту
    1092 Банк, который выпустил карту, отклонил платеж
    1093 Банк, который выпустил карту, считает платеж подозрительным
    1094 Банк, который выпустил карту, считает платеж подозрительным
    1096 Системная ошибка Системная ошибка
    1099 Способ оплаты отключен
    1116 Некорректная сумма выдачи Сумма баланса меньше суммы переданной в операции выдачи
    1119 Параметр account объекта DATA должен быть заполнен корректно для MCC: 6050/6051 Передан некорректный номер кошелька
    1125 Некорректное значение OperationInitiatorType. Должно быть одно из списка
    1126 Несопоставимые значения rebillId или Recurrent с переданным значением OperationInitiatorType
    1201 Обратитесь в поддержку, чтобы уточнить детали
    1202 Сумма платежа превышает лимит по разовой операции в этом магазине. Обратитесь в поддержку, чтобы уточнить детали
    1203 Сумма платежа превышает лимит по разовой операции или количеству операций в этом магазине. Обратитесь в поддержку, чтобы уточнить детали
    1204 Достигнут лимит по суточному обороту. Чтобы изменить лимит, обратитесь в поддержку
    1205 Магазин не принимает карты этой страны. Обратитесь в поддержку, чтобы уточнить детали
    1207 Сообщите покупателю, чтобы попробовал оплатить еще раз. Если ошибка повторится — обратитесь в поддержку
    1217 Воспользуйтесь другой картой или обратитесь к продавцу Воспользуйтесь другой картой или обратитесь к продавцу
    1218 Воспользуйтесь другой картой или обратитесь к продавцу Воспользуйтесь другой картой или обратитесь к продавцу
    1235 Для карт «Мир» нужно настроить подтверждение платежей по СМС 3DS 2.0. Обратитесь в поддержку, чтобы уточнить детали
    1316 Запрещено проведение авторизации Запрещено проведение авторизации с использованием 3DS
    1502 Недостаточно средств на счете компании Insufficient funds
    1503 Некорректный статус счета, обратитесь в поддержку Invalid account status
    2014 Не пройдена идентификация 3DS
    2015 Mерчант с таким именем и паролем не найден.
    2200 Превышено допустимое количество запросов авторизации операции
    3001 Оплата через QrPay недоступна Ошибка возникает, если для терминала не активирован способ оплаты СБП. Сделать это можно в личном кабинете интернет-эквайринга, в настройках магазина, во вкладке Способы оплаты
    3002 Недостаточный баланс счёта для отмены Ошибка возникает, если на расчетном счете магазина недостаточно средств для возврата. Пополните счет и повторите попытку
    3003 Отмена платежа в связи с мошенничеством
    3004 Способ СБП недоступен для магазина
    3005 Оплата через СБП не доступна
    3006 Банк получателя не может принять возврат. Выберите другой банк
    3007 Отказ в проведении операции от СБП
    3008 У получателя нет расчетного счета в этом банке. Выберите другой банк
    3009 Отказ в проведении операции от СБП или банка получателя
    3010 У получателя нет расчетного счета в этом банке. ФИО некорректное
    3011 Оплата через E2C недоступна
    3012 Привязка счета не найдена
    3013 Рекуррентные платежи недоступны
    3014 AccountToken не найден
    3015 Неверный статус AccountToken
    3016 Невозможно создать QR
    3017 Переданное значение RedirectDueDate вне допустимого диапазона
    3018 Список банков не найден
    3019 Не включен СБП в личном кабинете
    3020 К данному телефону и банку уже создана привязка. Выберите другой банк
    3021 Привязка по номеру телефона недоступна на данном терминале
    3022 Превышено доступное количество запросов для привязки. Попробуйте позже
    3023 Привязка невозможна
    3024 Не удалось найти банк по номеру телефона. Выберите другой банк
    3026 Запрос по привязке не идентифицирован
    3028 Банк покупателя отклонил возврат. Попросите покупателя обратиться туда или выберите другой его банк
    3029 Слишком много неудачных попыток за час. Попробуйте снова через час или выберите другой банк покупателя По требованиям НСПК в час допустимо проводить не больше 1 попытки возврата по операции
    3030 Слишком много неудачных попыток за сутки. Попробуйте еще раз завтра или выберите другой банк покупателя По требованиям НСПК в день допустимо проводить не больше 5 попыток возврата по операции
    3031 Банк покупателя отклонил возврат. Попросите покупателя обратиться туда или выберите другой его банк
    3032 Слишком много неудачных попыток за час. Попробуйте снова через час или выберите другой банк получателя
    3033 Слишком много неудачных попыток за сутки. Попробуйте еще раз завтра или выберите другой банк получателя
    3034 Банк получателя отклонил выплату. Попросите получателя обратиться туда или выберите другой его банк
    3035 Банк получателя отклонил выплату. Попросите получателя обратиться туда или выберите другой его банк
    3036 Возникла ошибка. Не получилось сделать выплату
    3038 Возврат средств через СБП доступен только со счетом в T-Bank. Измените счет в настройках вашего магазина
    3101 Оплата по Mir Pay недоступна для магазина
    3102 DeepLink для оплаты по Mir Pay не создан
    8001 Операция запрещена для рассрочки
    8002 T-Bank Credit Broker недоступен. Повторите попытку позже
    8003 Операция запрещена для покупки долями
    8004 BNPL недоступен. Повторите попытку позже
    9001 Попробуйте повторить попытку позже
    9999 Внутренняя ошибка системы
    - Количество товара должно быть больше нуля
    - Максимальная длина rawcode — 223 символа
    - Касса принимает значение markCode только с типом rawcode
    - Для данной кассы ожидалось одно из itemCode или markСode
    - Для данной кассы ожидалось либо itemCode, либо markCode
    - Для данной кассы предусмотрена передача только markСode

    Типовые ошибки онлайн-кассы

    Ошибка Решение Онлайн-касса
    Состояние чека не найдено. Попробуйте позднее Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. На всех кассах
    Сервер не смог обработать входной чек Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. На всех кассах
    Код ошибки, который начинается с <!DOCTYPE html и так далее Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. Orange Data
    Произошла ошибка при фискализации, обратитесь в службу технической поддержки Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. На всех кассах
    Чек зависает в очереди на фискализацию с интеграцией через aQsi Нужно исправить ошибку самостоятельно или через поддержку aQsi.
    Инструкция:
    • В личном кабинете aQsi перейдите в НастройкиИнтеграцииФискализация чеков на aQsi 5 из Orange Data. Сгенерируйте токен (ключ) и скопируйте его.
    • Перейдите в личный кабинет Orange Data в раздел Услуги. Вставьте токен (ключ) и сформируйте счет без ошибки.

    Инструкция aQsi.
    Orange Data
    REGISTRATION_REQUEST_FAILED — ошибка в запросе Причины ошибки могут быть разные. Основная причина — вы не передали версию ФФД 1.2 в своем запросе, при том, что терминал и касса настроены на ФФД 1.2. На всех кассах
    Неизвестная организация Онлайн-касса не зарегистрирована. Обратитесь в кассовый сервис и завершите интеграцию. На всех кассах
    Сумма неналичных оплат превышает сумму чека В запросе в одной или нескольких позициях чека вы передаете параметры price (цена) и quantity (количество) так, что их произведение не равняется amount (сумма) в данной позиции. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. На всех кассах
    Код товарной номенклатуры имеет неизвестный префикс Неверный код товара, параметр EAN13. Исправьте параметр EAN13 в своем запросе. Для уточнения можно обратиться в поддержку вашей кассы. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. На всех кассах
    Указанная версия ФФД не соответствует режиму обработки документов ФФД 1.2 Проверьте версию ФФД на вашем терминале (личный кабинет интернет-эквайринга → раздел Онлайн-кассы) и в запросе. Если версии не совпадают, исправьте версию на актуальную в запросе или в настройках онлайн-кассы в личном кабинете интернет-эквайринга. На всех кассах
    Ошибка при закрытии документа: некорректное значение параметров команды ФН Исчерпан ресурс ФН. Обратитесь в онлайн-кассу. На всех кассах
    Не удалось перейти в режим регистрации после закрытия смены: смена превысила 24 часа Исчерпан ресурс ФН. Обратитесь в онлайн-кассу. На всех кассах
    Если поле статуса чека пустое Вы отправляете запросы на версию ФФД 1.2, а касса и терминал настроены на ФФД 1.05. Отправляйте запросы на версию ФФД 1.05 или переключите настройки кассы и магазина на ФФД 1.2. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. На всех кассах
    AuthWrongUserOrPassword Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. Ekomkassa
    Неизвестная ошибка обработки У вас недоступна онлайн-касса. Обратитесь в поддержку онлайн-кассы. Бизнес.Ру
    Некорректный запрос. Ошибка в поле items: количество элементов в поле receipt.items не может превышать 100 Нужно сделать чек коррекции в личном кабинете кассы.
    Вы передали больше 100 позиций в чеке. В таком случае для будущих операций рекомендуем делить платеж на 2 и более.
    Бизнес.Ру
    Не найдена интеграция с платежной системой Вы указали неправильные данные для онлайн-кассы в личном кабинете T-Банка. Логин и пароль нужно взять из личного кабинета Бизнес.Ру: раздел Интеграции → Т‑Банк. Там указан логин и придуманный пользователем пароль. Также данные можно уточнить в поддержке приложения. Бизнес.Ру
    Неизвестная организация Проблема с настройкой интеграции на стороне кассы. Рекомендуем обратиться в поддержку вашей кассы. Orange Data и aQsi online
    Очередь документов переполнена Причина — выключенная касса aQsi или отсутствие интернета. Именно по этой причине все чеки которые поступают по API, встают в очередь на фискализацию в кассовом аппарате aQsi. Чем дольше касса не в сети, тем больше переполнение чеков на фискализацию.
    Обратитесь в поддержку кассы.
    Orange Data
    В группе нет ни одного устройства У вас не прописана или неверно прописана группа касс в настройках кассы в личном кабинете интернет-эквайринга — раздел Онлайн-кассы. Группу можно узнать в кассовом сервисе и внести изменения в в личном кабинете интернет-эквайринга. В 90% случаев нужно скорректировать на aQsi. Orange Data
    Нет оплаченных ККМ для обработки чека Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. CloudKassir
    Терминал заблокирован Ошибка на стороне кассы. Обратитесь в поддержку кассы и уточните причины блокировки. CloudKassir
    Нет касс без признака БСО для организации У партнера настроена касса с включенным параметром Только для печати БСО. Чеки, которые направляются на формирование в кассу, должны иметь признак БСО. По чеку, который находится в ошибке, означает, что чек был отправлен без признака БСО.

    Отключите передачу БСО на стороне кассы.
    CloudKassir
    Код группы, указанный в запросе, не соответствует токену Запрос и терминал настроены на ФФД 1.05. На стороне кассы настроено ФФД 1.2 или наоборот — несоответствие версий. Скорректируйте версии ФФД на стороне интернет-эквайринга и кассы. На всех кассах
    CLIENT_INFO_EMAIL_AND_PHONE_NOT_FOUND Вы не передаете в запросе ФФД 1.2 при том, что касса и терминал настроены на эту версию. На всех кассах
    Неизвестная группа На терминале установлена некорректная группа касс. Уточните корректную группу касс в поддержке онлайн-кассы и измените ее в настройках кассы в личном кабинете интернет-эквайринга. Orange Data и aQsi online
    Таймаут сообщения в очереди Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. АТОЛ
    Некорректное значение параметров команды ФН Уточните причины ошибки в поддержке кассы. Скорее всего, вы некорректно передаете СНО — на стороне кассы в настройках указана другая СНО. АТОЛ
    Во время регистрации чека выяснилось, что в группе нет активных касс Активируйте тариф в ОФД Платформа. Обратитесь в техническую поддержку ОФД Платформа или самостоятельно активируйте тариф в личном кабинете ОФД. АТОЛ
    Пользователь заблокирован Ошибка на стороне кассы. Скорее всего, касса заблокировала вас из-за того, что их услуги не были оплачены.
    Уточнение можно получить в поддержке кассы.
    АТОЛ
    Ошибка обмена с ФН на уровне интерфейса I2C ФН не был доступен, могли возникнуть технические неисправности в самой кассе. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. АТОЛ
    Недопустимое сочетание реквизитов В запросе передается признак определённого агента, а на кассе данный признак не установлен.
    Клиенту нужно подать заявку на изменение данных в личном кабинете АО.
    1. Зайдите в личный кабинет АТОЛ Онлайн → раздел Изменение данных.
    2. Перейдите на шаг 3 и выберите нужный агент.
    3. Сохраните и отправьте заявку администратору.
    АТОЛ
    Операция sell не поддерживается У вас приостановлена услуга фискализации. Пополните баланс и продлите действие услуги.
    Вам нужно обратиться в кассу для получения подробностей.
    КОМТЕТ Касса
    WrongLoginOrPassword Неправильный логин или пароль.
    Уточнитн интеграционные данные от кассы и введите их в личном кабинете интернет-эквайринга повторно: МагазиныОнлайн-касса.
    Ekomkassa
    ErrorIncomingMissingToken Проверьте актуальность логина и пароля от кассы. Ошибка может возникать, когда вы изменили пароль в личном кабинете кассы, но не поменяли его в настройках интеграции (в личном кабинете интернет-эквайринга), либо когда в момент отправки запроса в личном кабинете кассы вы были заблокированы. Для уточнений рекомендуем обратиться в поддержку кассы и сделать чек коррекции по этой операции. Ekomkassa
    Retry limit equals 20 was exceeded Ошибка может быть вызвана разными причинами — например, недоступностью кассы. Как правило, чеки с такой ошибкой автоматически обрабатываются через какое-то время. Означает, что API не получает от кассы статус отправленного ранее запроса на чек. Если чек не сформируется в течение суток, сделайте чек коррекции в личном кабинете кассы. Ekomkassa
    Kkm is busy at the moment Ошибка появляется на интегрированных кассах Эвотор, означает что касса перегружена задачами, обычно такие ошибки автоматически исправляет сервер, автоматически делает новый запрос через небольшой интервал времени, до тех пор пока касса не примет чек. Если чек не сформируется в течение суток, сделайте чек коррекции в личном кабинете кассы. Ekomkassa
    Операция невозможна, недостаточно питания Ошибка возникает на интегрированных кассах Эвотор, сервер автоматически перезапускает транзакцию через определенный период времени. Обычно ошибка возникает, когда на кассу Эвотора идет слишком много запросов одновременно. Если чек не сформируется в течение суток, сделайте чек коррекции в личном кабинете кассы. Ekomkassa
    Session time expired На кассе не переоткрылась смена. Ошибка автоматически исправляется кассовым сервером, запрос на чек перезапускается через определенный интервал времени.​ Если этого не произошло в течение суток, сделайте чек коррекции в личном кабинете кассы. Ekomkassa
    Команда не реализуется в данном режиме ККТ Ошибка возникает, если касса занята другим процессом, который не дает работать с ФН. В такой ситуации сервер кассы автоматически делает перезапуск чека через определенный интервал времени. Для получения более подробной информации рекомендуем обратиться в поддержку кассы. Ekomkassa
    Авторизация невозможна. Неверные учетные данные По этой ошибке есть 2 варианта решения:
    1. При подключении кассы Ferma вы указали неверные данные в личном кабинете интернет-эквайринга. Исправьте их.
    2. У вас версия ФФД 1.2 на терминале и кассе, но вы не передаете версию ФФД 1.2 в запросе.
    Ferma
    По кассе Ferma не завершена регистрация в ФНС Нужно завершить регистрацию кассы в личном кабинете Ferma или обратиться в поддержку OFD.RU по почте ofd@ofd.ru или номеру 84955409911. Ferma
    Не оплачена касса Ferma Вам нужно оплатить кассу для восстановления работы: продлите услугу в личном кабинете Ferma или обратитесь в поддержку OFD.RU по почте ofd@ofd.ru или номеру 84955409911. Ferma
    Таймаут сообщения в очереди ККТ отключена или на ПК клиента не запущено приложение для фискализации чеков. Рекомендуем уточнить причину ошибки у поддержке кассы. На всех кассах
    Нет касс соответствующих переданному типу платежного агента Вы передаете тип агента, который не настроен на стороне кассы или отличается от него. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. На всех кассах
    В группе нет ни одного устройства с требуемым признаком агента Вы передаете тип агента, который не настроен на стороне кассы или отличается от него. С такой ошибкой нужно сделать чек коррекции по этой операции в личном кабинете кассы. На всех кассах
    Неизвестная ошибка Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. CloudKassir
    Network error Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. На всех кассах
    Непредвиденная ошибка Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. Ferma
    Ошибка формата передачи ФН Ошибка на стороне кассы. Обратитесь в поддержку вашей онлайн-кассы и уточните причины ошибки в чеке. На всех кассах

    Типовые ошибки 3DS

    Ошибка Решение
    RReq not found for provided threeDSServerTransID RReq был получен от эмитента позже, чем был отправлен Submit3DSAuthorization (GetTdsResult).

    Повторно вызовите метод Submit3DSAuthorization (GetTdsResult) спустя некоторое время — у эмитента есть до 30 минут на отправку RReq после отправки ARes.
    deviceChannel is missing or has incorrect value Некорректно передается или не передается deviceChannel в 3ds method.
    Не пройдена аутентификация 3DS. Попробуйте повторить попытку позже Ошибка приходит для метода Submit3DSAuthorization. Проблема на стороне эмитента при прохождении 3DS.
    500 Internal Server Error. При получении ссылки на метод Check3dsVersion и дальнейшей отправки запроса получена ошибка 500 Ошибка может возникать на стороне ACS. Повторите запрос и обратитесь в поддержку эмитента для уточнения причин.

    Тестовые карты

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

    • Для прохождения тест-кейсов — тестовый терминал с приставкой DEMO. Запросы с него нужно отправлять на боевую среду и использовать тестовые карты из тест-кейса.

      Данные карт для тест-кейсов можно найти в личном кабинете: раздел МагазиныТерминалыТестовыйТестировать. При выборе определенного тест-кейса появится информация с данными карты.

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

    Добавление IP в White List

    Чтобы пользоваться тестовой средой, нужно добавить ваш IP-адрес в White List тестовой среды. Для этого пришлите нам:

    1. ИНН.

    2. Наименование организации.

    3. IP-адрес (или пул адресов), с которого планируется обращение.

    4. Тестовый URL, по которому будете обращаться:

      • rest-api-test.tinkoff.ru — для запросов по API в рамках обычных WEB оплат/выплат;
      • rest-api-test.tinkoff.ru — для запросов в SDK и использования его API;
      • sm-register-test.tcsbank.ru — для регистрации точек агрегатором/маркетплейсом.

    Важно
    Отправлять запросы для открытия платежной формы для оплаты нужно с IP-адреса, который был добавлен в White List.

    Информация по прохождению тест-кейсов
    1. Для прохождения тест-кейса №1 в запросе Init не нужно передавать Reсurrent = Y (recurrent:true), так как флаг рекуррентов не даст системе засчитать платеж как тест-кейс.

    2. При получении ошибки «Ошибка нотификации: не получаем ответ ОК» при прохождении тест-кейса №2 нужно проверить правильность передачи ответа на нотификацию. Верный ответ — 200:ОК.

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

    Например, на терминале установлена двухстадийная оплата, а в Init был передан pay_type = О — признак одностадийности. Если вам нужно поменять тип проведения платежа:

    1. Перейдите в личный кабинет интернет-эквайринга на вкладку Магазины.
    2. Выберите нужный платеж и на вкладке Способы оплаты выберите Списание средств.
    3. Напротив нужного пункта отметьте Списывать сразу (одностадийная) или Блокировать на счету покупателя (двустадийная).

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

    Описание параметра TransStatus находится в описании параметров ответа cres (JSON/JWE cres объект).

    Список тестовых карт для оплаты через протокол 3ds2.0

    Поведение карты TransStatus Описание PAN
    Ошибка оплаты
    Ошибка при списании
    Нет - 2201382000000021
    expDate: 12/25
    cvv: 123
    Ошибка оплаты
    Недостаточно средств
    Нет - 2201382000000831
    expDate: 12/25
    cvv: 123
    Успешная оплата
    3ds 2.0
    Frictionless Flow
    Нет AUTHENTICATION_SUCCESSFUL
    Успешное прохождение аутентификации без ввода пароля
    2201382000000013
    expDate: 12/25
    cvv: 123
    Успешная оплата
    3ds 2.0
    Challenge flow
    C CHALLENGE_REQURIED
    Требуется полное прохождение 3DS с редиректом на acsURL. Открытие формы для ввода одноразового пароля (OTP)
    2201382000000047
    expDate: 12/25
    cvv: 123
    Метод аутентификации на ACS: Static Passcode. Ввести верный пароль — 1qwezxc
    Ошибка оплаты
    3ds2.0
    Restricted
    R ACCOUNT_VERIFICATION_REJECTED
    Эмитент отклонил аутентификацию
    2201382000000005
    expDate: 12/25
    cvv: 123
    Ошибка оплаты
    Frictionless Flow
    Not Authenticated
    N NOT_AUTHENTICATED
    Карта не поддерживает 3DS
    2201382000000021
    expDate: 12/25
    cvv: 123
    Успешная оплата
    Card not Enrolled (Attempt)
    A ATTEMPTS_PROCESSING_PERFORMED
    Эмитент недоступен или не поддерживает 3DS v2.1. Платежная система разрешает провести Pay, но эмитент мог отклонить авторизацию
    2201382000000039
    expDate: 12/25
    cvv: 123

    Список тестовых карт для оплаты без 3DS

    Поведение карты TransStatus Описание PAN
    Успешная оплата Нет - 2200770239097761
    expDate: 12/25
    cvv: 123

    Карты Mock-сервиса — если не работает тестовая карта

    Поведение карты TransStatus Описание PAN
    Успешная оплата Y AUTHENTICATION_SUCCESSFUL_REASON_18
    Успешное прохождение аутентификации без ввода пароля c заполненной transStatusReason High confidence, то есть высокая уверенность в надежности
    2201382000000591

    Правила расчета возмещений по операционному реестру

    Если РКО от Т‑Банка:

    • есть — выплаты производятся в календарные дни;
    • нет — в дни работы расчетно-кассового центра по графику Центробанка.

    Возмещение считается за один календарный день.

    Тип операции Пояснение Плюс/минус
    Debit Операция оплаты Плюс
    Credit Операция возврата Минус
    Fee Комиссия по операции оплаты, в том числе неуспешной Минус
    CancelRefund Отмена возврата Плюс
    Chargeback Опротестование операции эмитентом Минус
    2Chargeback Арбитражное опротестование эмитентом Минус
    Chargeback_Reversal Отмена опротестования операции эмитентом Плюс
    2Chargeback_Reversal Отмена арбитражного опротестования операции эмитентом Плюс
    CR_Chargeback Возврат операции Refund от эмитента — карта или договор закрыты Плюс
    Representment Обратное опротестование Chargeback Т‑Банком Плюс
    Representment_Reversal Отмена обратного опротестования 2Chargeback Т‑Банком Минус
    AUTH_FAIL Неуспешная авторизация. Сама операция в расчете не участвует — только комиссия за них -
    CreditClientCorrection FeeColl. Ручное урегулирование операции с банкомэмитентом по договоренности или при списании с Т‑Банка по клирингу Минус
    DebitClientCorrection FeeColl. Ручное урегулирование операции с банкомэмитентом по договоренности или при списании с Т‑Банка по клирингу Плюс
    CreditCorrection Списание с ТСП претензии клиента Т‑Банка Минус
    DebitCorrection Зачисление ТСП претензии клиента Т‑Банка Плюс

    Формат реестра

    Тип файла — текстовый файл в кодировке Win CP-1251. Разделитель полей — символ ;, точка с запятой.

    Тело реестра состоит из строк. Одна строка — одна операция. Каждая строка тела реестра заканчивается знаком конец строки/перевод каретки (CR/LF) и должна содержать информацию из таблицы ниже.

    № Поля Наименование/содержание поля Размерность поля
    1 Порядковый номер Порядковый номер строк и тела реестра.
    2 Номер карты/телефона Маскированный номер карты: 1234 56** **** 7890 / Маскированный номер телефона: +7(903)XXX-XX-11.
    3 ПС Наименование платежной системы:
    • Visa,
    • MC,
    • Мir,
    • SBP,
    • Tinkoff Pay,
    • SberPay.
    4 Номер заказа Цифры, буквы. Кроме спецсимволов, не больше 256 знаков.
    5 Дата операции DD.MM.YYYY
    6 Время операции HH:MM:SS
    7 Временная зона MSK
    8 Код авторизации Шестизначный буквенно-цифровой код. Уникальный 32-значный номер операции СБ.
    9 Код терминала Номер терминала в системах банка.
    10 Дата обработки операции DD.MM.YYYY
    11 Дата перечисления DD.MM.YYYY
    12 Сумма операции (руб.) Сумма операции, разделитель целой и дробной части . (123.45).
    13 Комиссия Банка (руб.) Комиссия банка, разделитель целой и дробной части . (123.45).
    13.1* Комиссия за фискализацию (руб.) Комиссия за фискализацию, разделитель целой и дробной части . (123.45).
    14 К перечислению (руб.) Сумма к возмещению после удержания комиссии банка, разделитель целой и дробнойчасти .(123.45).
    15 Тип операции • Debit,
    • Chargeback_Fee,
    • 2Chargeback,
    • 2Chargeback_Reversal,
    • DebitCorrection,
    • CreditCorrection,
    • DebitClientCorrection,
    • CR_Chargeback,
    • CR_Chargeback_Fee,
    • Chargeback_Reversal,
    • Representment_Reversal,
    • CancelRefund,
    • CreditClientCorrection,
    • Credit,
    • Chargeback,
    • Chargeback_Reversal_Fee,
    • Representment,
    • Representment_Fee,
    • AUTH_FAIL.
    16 RRN Внутренний номер операции в платежной системе — кроме операций по СБП. Например, 835508576879.
    17 Payment ID Номер операции, присваиваемый банком.
    18 Название терминала От 4 до 20 латинских символов.
    19 Тип карты Карта, выпущенная на территории РФ или иностранная карта Dom/Int.
    20 DATA Для передачи дополнительных данных в реестр используется параметр DATA из метода Init — передаётся в виде ключ:значение. Используйте ключи:
    • Paymentpurpose,
    • Order_number,
    • Email,
    • Name,
    • Phone,
    • S_lastname,
    • S_firstname,
    • S_middlename,
    • Number,
    • Mfo_agreement.
    21 Описание Description, переданный в методе Init.

    Обратная связь

    По техническим вопросам обратитесь на почту acq_help@tbank.ru.

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

    История изменений

    Описание изменений Дата
    1 Создан документ 26.05.2023
    2 В описание параметра deviceChannel для метода FinishAuthorize добавлено уточнение, что значение 02 - Browser (BRW) используется по умолчанию 16.02.2024
    3 Раздел "Рекомендации при интеграции" переименован в "Инструкции по безопасности при интеграции" и дополнен описанием про корректность токена и использование новейших версий CMS 19.02.2024
    4 Раздел "Инструкции по безопасности при интеграции" дополнен описанием про использование ПО для интеграции, полученного не с сайта https://www.tbank.ru/kassa/develop/ 20.02.2024
    5 В раздел "Тестовые карты" добавлено пояснение про карты для тест-кейсов и карты для совершения тестовых платежей 11.03.2024
    6 В раздел "Подпись запроса" добавлена ссылка на сервис для проверки корректности формирования токена 11.03.2024
    7 Исправлено описание параметра "Success" в ответе для всех методов, где он используется 22.03.2024
    8 В раздел "Подпись запроса" добавлено уточнение про поддержку UTF-8 (пункт №5) 25.03.2024
    9 В раздел "Тестирование и обработка ошибок" добавлены типовые ошибки Онлайн-кассы, исправлен URL для закрывающего чека, добавлены параметры "MD", "PaReq", "ACSUrl" в описание метода "Привязка карты" 04.04.2024
    10 В раздел "Возмещения и реестры" добавлен подраздел "Формат реестра" 11.04.2024
    11 В раздел "Платежная форма в webview" были добавлены рекомендации по интеграции 11.04.2024
    12
  • Исправлено описание параметра "DATA" в методе AttachCard
  • В раздел "Подпись запроса" добавлено описание про проверку токена в ЛК ИЭ
  • В раздел "Какими терминами пользуемся в документации?" добавлено уточнение по данные тестового терминала
  • В описание метода Confirm добавлена ссылка на подробное описание механизма двухстадийного платежа
  • В раздел "Сценарии платежа" добавлено уточнение про проведение тестовых платежей в тестовом окружении
  • В описание параметра OrderId для метода Init добавлено уточнение про егоповторное использование
  • Исправлено описание объекта CardData для метода FinishAuthorize по нахождению открытого ключа
  • Исправлено описание параметра Description, который теперь имеет максимальную длину в 140 смволов для всех типов оплат
  • 12.04.2024
    13
  • Дополнено описание параметра Params в методе GetState
  • Добавлена информация по прохождению тест-кейсов в раздел "Тестовые карты"
  • 16.04.2024
    14 В раздел "Фискализация" добавлен подраздел "Подключение Онлайн-кассы", а также в раздел "Нотификации мерчанта об операциях" добавлены дпоплнительные параметры массива "DATA" 16.04.2024
    15 Обновлено описание пункта №2 дополнительных мер при интеграции с MAPI в разделе "Инструкции по безопасности при интеграции" 18.04.2024
    16 Правка ошибок в параметрах "RebillId" и "CardId" в нотификациях и добавление инсофрмации по проуедению скидок/бонусов в разделе "Описание дополнительных объектов" 26.04.2024
    17 Добавление пояснения в ответ на метод подтверждения платежа статуса "3DS_CHECKING" 14.05.2024
    18
  • В раздел "Тестовые карты" добавлена информация по добавлению IP а WL
  • В раздел "Сценарии оплаты по карте" добавлено уточнение про оплату в рублях (блок "Правила работы"), про сроки холдирования (блок "Двухстадийный платеж") и про частичный возврат при подключенной онлайн-кассе (блок "Возврат и отмена платежа")
  • 16.05.2024
    19
  • Дополнено описание параметра Description в методе Init
  • Обновлено описание параметра "version" в методе "Получение ссылки"
  • 17.05.2024
    20
  • Дополнено описание формата параметра DATA в ответе на метод NotificationPayment
  • В раздел "Формат реестра" добавлены используемые ключи для передачи дополнительных параметров в реестр
  • 30.05.2024
    21
  • Добавление таблицы статусов рекуррентных платежей по СБП
  • Обновление URL для метода SberPay/transactions/{paymentId}/QR
  • Добавление описания функционала кастомизации платежной формы
  • 10.06.2024
    22 Убрана обязательность параметра ClientInfo в чеках для ФФД 1.2. Добавлено описание для формирования токена методом getConfirmOperation 13.06.2024
    23 Добавлено описание ошибок 3020, 3021, 3022, 3023, 3024, 3026, 3032, 3033, 3034, 3035, 3036 и 3038 в раздел "Коды ошибок" 25.06.2024
    24 Добавлен подраздел "Квитанции" и описаны ключи для доп. параметров в DATA 27.06.2024
    25 Добавлены теги ФФД к сущностям параметра Receipt для ФФД 1.05 и ФФД 1.2 27.06.2024
    26 Добавлено примечание к параметру "Taxation" в описании доп. объектов 01.07.2024
    27 Убрана обязательность передачи специальных параметров для полей Route и Source в методах "/cancel" и "/confirm" 25.07.2024
    28 В разделе "Сценарии оплаты по карте" добавлено уточнение про частичный возврат при подключенной онлайн-кассе (блок "Возврат и отмена платежа") 26.07.2024
    29 В разделе нотификаций исправлен тип параметра PaymentId на "number" 02.08.2024
    30 Добавлен раздел "Типовые ошибки 3DS", добавлена типовая ошибка по онлайн-кассам, обновлена информация по нотификациям о фискализации, добавлен статус "DEADLINE_EXPIRED" для нотификаций по HTTP(S) 14.08.2024
    31 Обновлено описание нотификаций по HTTP(S) 28.08.2024
    32 Добавлена важная информация о DEMO терминале в разделе "Прохождение 3DS" 26.09.2024