Модуль «CP QR»

CP QR (Customer Presented QR) — QR-код, который покупатель предъявляет продавцу для оплаты. Модуль «CP QR» позволяет добавить в приложение магазина виджет быстрой оплаты по QR‑коду от Яндекс Пэй в офлайн-точках.

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

Способы формирования CP QR

Модуль поддерживает два способа получения данных для формирования CP QR:

  • метод getPaymentSessionId() — приложение получает sessionId и самостоятельно формирует на его основе QR-код;
  • метод getCPQR(merchantPayload) — приложение передает дополнительные данные мерчанта merchantPayload, а SDK формирует и возвращает готовую строку CP QR в формате YAQR.

Когда использовать getPaymentSessionId()

Используйте getPaymentSessionId(), если приложению не требуется передавать дополнительные данные мерчанта в CP QR.

Метод возвращает идентификатор платежной сессии sessionId, на основе которого приложение самостоятельно формирует QR-код.

Когда использовать getCPQR(merchantPayload)

Используйте getCPQR(merchantPayload), если приложению необходимо передать собственные данные в составе CP QR, например токен программы лояльности.

Сценарий работает следующим образом:

  1. Приложение передает merchantPayload в SDK.
  2. SDK формирует готовую строку CP QR в формате YAQR<payload>.
  3. Приложение кодирует всю возвращенную строку в QR-код без изменений.
  4. После сканирования кассовое ПО передает полученную строку CP QR на бэкенд Яндекс Пэй без изменений.
  5. В ответе кассового API мерчант получает переданный merchantPayload и может использовать его в своем сценарии, например для программы лояльности.

Что такое YAQR

YAQR — собственный универсальный формат CP QR Яндекс Пэй:

YAQR<payload>

где:

  • YAQR — префикс, по которому кассовое ПО определяет, что перед ним CP QR от Яндекса;

  • <payload> — строка с данными, необходимыми для обработки платежа. Содержит информацию о Пэй-тикете для оплаты в контуре Яндекса и опционально дополнительную информацию от мерчанта merchantPayload (например, токен лояльности).

    В стандартной реализации строка <payload> может включать символы алфавита z85, а также знак подчеркивания (_) и запятую (,). При этом мерчанту разрешается дополнять строку любыми другими символами при необходимости.

Формат YAQR используется как единая строка, которую приложение и кассовое ПО должны передавать без изменений.

Важно

Внутреннее устройство строки может меняться, поэтому не разбирайте ее и не формируйте самостоятельно.

Схема взаимодействия

  1. Инициализация SDK. После запуска приложения вызывается метод initialize(), который инициализирует SDK Яндекс Пэй и подготавливает его к работе.

  2. Активация сценария быстрой оплаты. Через activateQuickPay / enableQuickPayment активируется сценарий быстрой оплаты и отображение виджета. Покупатель проходит авторизацию через Яндекс ID, если ранее не был авторизован.

  3. Получение данных для CP QR. Покупатель выбирает в виджете карту для оплаты заказа. В зависимости от сценария приложение использует один из методов:

    • getPaymentSessionId() — получает идентификатор платежной сессии sessionId;
    • getCPQR(merchantPayload) — передает дополнительные данные мерчанта merchantPayload и получает готовую строку CP QR в формате YAQR<payload>.
  4. Генерация и отображение QR-кода. В зависимости от сценария приложение:

    • при использовании getPaymentSessionId() формирует QR-код на основе полученного sessionId;
    • при использовании getCPQR(merchantPayload) кодирует в QR-код всю возвращенную строку без изменений.
  5. Сканирование QR-кода и создание заказа. Покупатель предъявляет QR-код кассиру. Кассовое ПО считывает CP QR и передает его на бэкенд Яндекс Пэй как есть.

  6. Оплата и получение результата. Яндекс Пэй списывает сумму с карты пользователя, после чего статус операции синхронизируется с системой партнера. Результат оплаты передается в приложение через onPaymentResult(). При использовании getCPQR(merchantPayload) переданный merchantPayload также возвращается мерчанту в ответе кассового API.


Схему обработки оплаты на кассе см. в разделе Схема обработки оплаты.

Поддерживаемые платформы

Платформа Документация
Android Руководство Android SDK
iOS Руководство iOS SDK
Flutter Руководство Flutter SDK

Состоит из 85 печатных ASCII-символов:

  • цифры (10 символов): 0123456789;
  • строчные латинские буквы (26 символов): abcdefghijklmnopqrstuvwxyz;
  • заглавные латинские буквы (26 символов): ABCDEFGHIJKLMNOPQRSTUVWXYZ;
  • специальные символы (23 символа): .-:+=^!/*?&<>()[]{}@%$#. Алфавит подобран так, чтобы избегать символов, которые могут вызывать проблемы в языках программирования и при передаче данных.