Модуль «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, например токен программы лояльности.
Сценарий работает следующим образом:
- Приложение передает
merchantPayloadв SDK. - SDK формирует готовую строку CP QR в формате
YAQR<payload>. - Приложение кодирует всю возвращенную строку в QR-код без изменений.
- После сканирования кассовое ПО передает полученную строку CP QR на бэкенд Яндекс Пэй без изменений.
- В ответе кассового API мерчант получает переданный
merchantPayloadи может использовать его в своем сценарии, например для программы лояльности.
Что такое YAQR
YAQR — собственный универсальный формат CP QR Яндекс Пэй:
YAQR<payload>
где:
-
YAQR— префикс, по которому кассовое ПО определяет, что перед ним CP QR от Яндекса; -
<payload>— строка с данными, необходимыми для обработки платежа. Содержит информацию о Пэй-тикете для оплаты в контуре Яндекса и опционально дополнительную информацию от мерчантаmerchantPayload(например, токен лояльности).В стандартной реализации строка
<payload>может включать символы алфавита z85, а также знак подчеркивания (_) и запятую (,). При этом мерчанту разрешается дополнять строку любыми другими символами при необходимости.
Формат YAQR используется как единая строка, которую приложение и кассовое ПО должны передавать без изменений.
Важно
Внутреннее устройство строки может меняться, поэтому не разбирайте ее и не формируйте самостоятельно.
Схема взаимодействия
-
Инициализация SDK. После запуска приложения вызывается метод
initialize(), который инициализирует SDK Яндекс Пэй и подготавливает его к работе. -
Активация сценария быстрой оплаты. Через
activateQuickPay/enableQuickPaymentактивируется сценарий быстрой оплаты и отображение виджета. Покупатель проходит авторизацию через Яндекс ID, если ранее не был авторизован. -
Получение данных для CP QR. Покупатель выбирает в виджете карту для оплаты заказа. В зависимости от сценария приложение использует один из методов:
getPaymentSessionId()— получает идентификатор платежной сессииsessionId;getCPQR(merchantPayload)— передает дополнительные данные мерчантаmerchantPayloadи получает готовую строку CP QR в форматеYAQR<payload>.
-
Генерация и отображение QR-кода. В зависимости от сценария приложение:
- при использовании
getPaymentSessionId()формирует QR-код на основе полученногоsessionId; - при использовании
getCPQR(merchantPayload)кодирует в QR-код всю возвращенную строку без изменений.
- при использовании
-
Сканирование QR-кода и создание заказа. Покупатель предъявляет QR-код кассиру. Кассовое ПО считывает CP QR и передает его на бэкенд Яндекс Пэй как есть.
-
Оплата и получение результата. Яндекс Пэй списывает сумму с карты пользователя, после чего статус операции синхронизируется с системой партнера. Результат оплаты передается в приложение через
onPaymentResult(). При использованииgetCPQR(merchantPayload)переданныйmerchantPayloadтакже возвращается мерчанту в ответе кассового API.
Схему обработки оплаты на кассе см. в разделе Схема обработки оплаты.
Поддерживаемые платформы
| Платформа | Документация |
|---|---|
| Android | Руководство Android SDK |
| iOS | Руководство iOS SDK |
| Flutter | Руководство Flutter SDK |
Состоит из 85 печатных ASCII-символов:
- цифры (10 символов):
0123456789; - строчные латинские буквы (26 символов):
abcdefghijklmnopqrstuvwxyz; - заглавные латинские буквы (26 символов):
ABCDEFGHIJKLMNOPQRSTUVWXYZ; - специальные символы (23 символа):
.-:+=^!/*?&<>()[]{}@%$#. Алфавит подобран так, чтобы избегать символов, которые могут вызывать проблемы в языках программирования и при передаче данных.