Создать заказ с динамическим QR-кодом
Генерирует и активирует динамический QR-код. Выведите QR-код на экран или распечатайте, после этого покупатель отсканирует его и оплатит заказ.
Если в ответе статус 5XX, повторите запрос.
Совет
Пошаговые инструкции см. в разделе Самостоятельная интеграция.
Скачайте OpenAPI-спецификацию в разделе Specification.
Аутентификация запросов
В каждом запросе передавайте в HTTP-заголовки:
|
|
Заголовок: Выпустите его личном кабинете по инструкции. |
|
|
Заголовок: Токен кассового ПО. Получите его у менеджера интеграции. |
Если в запросе отсутствуют или переданы недействительные токены, сервер вернет статус 401 Unauthorized.
Пример запроса:
curl https://pay.yandex.ru/api/merchant/cash-register/v1/accounts \
--header 'Authorization: Api-Key <YandexPayApiKey>' \
--header 'Software-Authorization: <SoftwareAuthorization>' \
Request
POST
https://sandbox.pay.yandex.ru/api/merchant/cash-register/v1/orders/dynamic
Sandbox
POST
https://pay.yandex.ru/api/merchant/cash-register/v1/orders/dynamic
Production
Body
application/json
{
"cart": {
"items": [
{
"productId": "1234567890",
"quantity": {},
"title": "Хлеб",
"total": "123.45",
"description": "example",
"unitPrice": "123.45"
}
],
"total": {
"amount": "123.45"
}
},
"currencyCode": "RUB",
"orderId": "01963e94-7457-74da-8739-fa7ea310a255",
"availablePaymentMethods": [
"CARD"
],
"billingPhone": "+79999999999",
"extensions": {
"billingReport": {
"branchId": "01967cb8-f2c4-7293-9027-2976830c9485",
"managerId": "01967cb9-67b9-7942-99c2-bf95331d137d"
}
},
"orderSource": "WEBSITE",
"purpose": "Оплата по заказу 12345",
"metadata": "example",
"ttl": 600
}
All of 2 types
-
Type: CreateOrder
Example
{ "cart": { "items": [ { "productId": "1234567890", "quantity": { "count": "123.45" }, "title": "Хлеб", "total": "123.45", "description": "example", "unitPrice": "123.45" } ], "total": { "amount": "123.45" } }, "currencyCode": "RUB", "orderId": "01963e94-7457-74da-8739-fa7ea310a255", "availablePaymentMethods": [ "CARD" ], "billingPhone": "+79999999999", "extensions": { "billingReport": { "branchId": "01967cb8-f2c4-7293-9027-2976830c9485", "managerId": "01967cb9-67b9-7942-99c2-bf95331d137d" } }, "orderSource": "WEBSITE", "purpose": "Оплата по заказу 12345", "metadata": "example" } -
Type: object
ttl
Type: integer
Время жизни QR-кода в секундах.
Default:
600Min value:
180Max value:
43200Example
{ "ttl": 600 }
ItemQuantity
Количество единиц товара в позиции.
|
Name |
Description |
|
count |
Type: string<double> Количество единиц товара в позиции. Example: |
Example
{
"count": "123.45"
}
CartItem
|
Name |
Description |
|
productId |
Type: string Идентификатор товара в системе продавца. В заказе все Max length: Example: |
|
quantity |
Type: ItemQuantity Количество единиц товара в позиции. Example
|
|
title |
Type: string Наименование товара. Max length: Example: |
|
total |
Type: string<double> Сумма позиции с учетом скидок. Example: |
|
description |
Type: string Описание товара. Max length: Example: |
|
unitPrice |
Type: string<double> Цена за единицу товара. Используется в расширенной логике возвратов. Примеры:
Example: |
Example
{
"productId": "1234567890",
"quantity": {
"count": "123.45"
},
"title": "Хлеб",
"total": "123.45",
"description": "example",
"unitPrice": "123.45"
}
CartTotal
Итоговая информация о стоимости заказа.
|
Name |
Description |
|
amount |
Type: string<double> Сумма корзины с учетом всех скидок. Должна быть больше или равна 1. Example: |
Example
{
"amount": "123.45"
}
Cart
Корзина.
Если в корзине есть позиции с нецелыми ценами (3 ручки за 10 рублей) или весовые товары (500 г. говядины), для всех позиций в корзине добавьте цену за единицу товара unitPrice. Это избавит от проблем с округлением, например, при возврате.
|
Name |
Description |
|
items |
Type: CartItem[] Список позиций в заказе. Min items: Example
|
|
total |
Type: CartTotal Итоговая информация о стоимости заказа. Example
|
Example
{
"items": [
{
"productId": "1234567890",
"quantity": {
"count": "123.45"
},
"title": "Хлеб",
"total": "123.45",
"description": "example",
"unitPrice": "123.45"
}
],
"total": {
"amount": "123.45"
}
}
Currency
Трехбуквенный код валюты (ISO 4217).
Type: string
Default: RUB
Const: RUB
Example: RUB
AvailablePaymentMethod
Методы оплаты, которые будут доступны покупателю в платежной форме Яндекс Пэй.
Не передавайте это поле, если нет необходимости отключать методы оплаты.
Возможные варианты:
- поле не передано — доступны все методы;
["CARD", "SPLIT"]— доступны все методы;["SPLIT"]— доступны все методы;["CARD"]— доступны все методы, кроме Сплита.
Если Сплит отключен в личном кабинете, он не будет доступен для оплаты, даже если указан в availablePaymentMethods.
Type: string
Enum: CARD, SPLIT
OrderSource
Поверхность, на которой инициализировали создание заказа. Необходимо для последующей аналитики.
-
WEBSITE— Кнопка размещена на сайте. Ссылка на оплату сформировалась после действий (нажатия кнопки) пользователя на сайте. -
APP— Кнопка размещена в мобильном приложении. Ссылка на оплату сформировалась после действий (нажатия кнопки) пользователя в приложении. -
CRM— Ссылка на оплату сформирована менеджером в CRM или другой админке. -
CASH_REGISTER— Ссылка на оплату сформирована для отображения на оффлайн-кассе. -
CMS_PLUGIN— Ссылка на оплату сформирована в плагине для CMS.
Type: string
Enum: WEBSITE, APP, CRM, CASH_REGISTER, CMS_PLUGIN
CreateOrder
|
Name |
Description |
||||||
|
cart |
Type: Cart Корзина. Если в корзине есть позиции с нецелыми ценами (3 ручки за 10 рублей) или весовые товары (500 г. говядины), для всех позиций в корзине добавьте цену за единицу товара Example
|
||||||
|
currencyCode |
Type: Currency Трехбуквенный код валюты (ISO 4217). Default: Enum: |
||||||
|
orderId |
Type: string Идентификатор заказа в системе продавца. Max length: Example: |
||||||
|
availablePaymentMethods |
Type: AvailablePaymentMethod[] Min items: Example
|
||||||
|
billingPhone |
Type: string Номер телефона клиента. Используется для упрощения авторизации, а также может увеличить вероятность одобрения по Сплиту. Номер телефона должен начинаться с +7, далее 10 цифр. Min length: Max length: Pattern: Example: |
||||||
|
extensions |
Type: object
Дополнительные параметры для оформления заказа:
Example
|
||||||
|
metadata |
Type: string Произвольные данные по заказу для внутреннего использования. Max length: Example: |
||||||
|
orderSource |
Type: OrderSource Поверхность, на которой инициализировали создание заказа. Необходимо для последующей аналитики.
Enum: |
||||||
|
purpose |
Type: string Назначение платежа. Max length: Example: |
Example
{
"cart": {
"items": [
{
"productId": "1234567890",
"quantity": {
"count": "123.45"
},
"title": "Хлеб",
"total": "123.45",
"description": "example",
"unitPrice": "123.45"
}
],
"total": {
"amount": "123.45"
}
},
"currencyCode": "RUB",
"orderId": "01963e94-7457-74da-8739-fa7ea310a255",
"availablePaymentMethods": [
"CARD"
],
"billingPhone": "+79999999999",
"extensions": {
"billingReport": {
"branchId": "01967cb8-f2c4-7293-9027-2976830c9485",
"managerId": "01967cb9-67b9-7942-99c2-bf95331d137d"
}
},
"orderSource": "WEBSITE",
"purpose": "Оплата по заказу 12345",
"metadata": "example"
}
Responses
200 OK
Заказ создан.
Body
application/json
{
"data": {
"paymentUrl": "https://qr.nspk.ru/AD10006C35FBF1GA9IUAGIF6JCU23NVE?type=02&bank=100000000061&sum=2200&cur=RUB&crc=04A3"
},
"code": 200,
"status": "success"
}
|
Name |
Description |
||
|
data |
Type: object
Example
|
||
|
code |
Type: integer Default: |
||
|
status |
Type: string Default: |
400 Bad Request
Ошибка валидации или бизнес-логики.
Body
application/json
{
"status": "fail",
"reason": "Invalid cart item parameter: total = 200.5004",
"reasonCode": "VALIDATION_ERROR"
}
All of 2 types
-
Type: Error
Example
{ "status": "fail", "reason": "example" } -
Type: object
reasonCode
Type: BadRequestErrorReasonCode
Код ошибки:
VALIDATION_ERROR— Ошибка валидации. Тело или параметры запроса не соответствуют спецификации.QRC_ID_NOT_FOUND— QR-код не найден, QR-табличка не привязана к продавцу.ORDER_COLLISION— Заказ с таким идентификатором уже существует, при этом его параметры отличаются от указанных в запросе.ORDER_NOT_FOUND— Заказ не найден.ORDER_ALREADY_CAPTURED— Заказ уже оплачен.ORDER_NOT_CAPTURED— Заказ не оплачен.ORDER_REFUND_COLLISION— Операция возврата заказа уже существует, при этом ее параметры отличаются от указанных в запросе.ORDER_REFUND_WITHOUT_CART_FOR_PARTIAL_REFUND— Запрос на частичный возврат без указания корзины. Для проведения частичного возврата заполните полеrefundCart.ORDERUPDATE_UNKNOWN_ITEM_PRODUCT_ID—productIdотсутствует в корзине заказа.ORDERUPDATE_DUPLICATE_ITEM_PRODUCT_ID—productIdдолжен быть уникальным.ORDERUPDATE_INVALID_ITEM_PRICE_WITH_QUANTITY— Некорректная комбинация цены и количества единиц товара для возврата.ORDERUPDATE_INVALID_ITEM_PRICE_RANGE— Неверно задана цена за единицу товара для возврата.ORDERUPDATE_INVALID_ITEM_QUANTITY— Неверно задано количество единиц товара для возврата.ANOTHER_REFUND_IN_PROGRESS— Другой возврат уже в процессе, дождитесь его завершения.
Список кодов ошибок открытый и будет дополняться, необходимо уметь обрабатывать неизвестные коды ошибок.
Enum:
VALIDATION_ERROR,QRC_ID_NOT_FOUND,ORDER_COLLISION,ORDER_NOT_FOUND,ORDER_ALREADY_CAPTURED,ORDER_NOT_CAPTURED,ORDER_REFUND_COLLISION,ORDER_REFUND_WITHOUT_CART_FOR_PARTIAL_REFUND,ORDERUPDATE_UNKNOWN_ITEM_PRODUCT_ID,ORDERUPDATE_DUPLICATE_ITEM_PRODUCT_ID,ORDERUPDATE_INVALID_ITEM_PRICE_RANGE,ORDERUPDATE_INVALID_ITEM_PRICE_WITH_QUANTITY,ORDERUPDATE_INVALID_ITEM_QUANTITY,ANOTHER_REFUND_IN_PROGRESSreason
Type: string
Example:
Invalid cart item parameter: total = 200.5004Example
{ "reasonCode": "VALIDATION_ERROR", "reason": "Invalid cart item parameter: total = 200.5004" }
Error
|
Name |
Description |
|
reason |
Type: string Описание ошибки. Example: |
|
status |
Type: string Default: Const: |
Example
{
"status": "fail",
"reason": "example"
}
BadRequestErrorReasonCode
Код ошибки:
VALIDATION_ERROR— Ошибка валидации. Тело или параметры запроса не соответствуют спецификации.QRC_ID_NOT_FOUND— QR-код не найден, QR-табличка не привязана к продавцу.ORDER_COLLISION— Заказ с таким идентификатором уже существует, при этом его параметры отличаются от указанных в запросе.ORDER_NOT_FOUND— Заказ не найден.ORDER_ALREADY_CAPTURED— Заказ уже оплачен.ORDER_NOT_CAPTURED— Заказ не оплачен.ORDER_REFUND_COLLISION— Операция возврата заказа уже существует, при этом ее параметры отличаются от указанных в запросе.ORDER_REFUND_WITHOUT_CART_FOR_PARTIAL_REFUND— Запрос на частичный возврат без указания корзины. Для проведения частичного возврата заполните полеrefundCart.ORDERUPDATE_UNKNOWN_ITEM_PRODUCT_ID—productIdотсутствует в корзине заказа.ORDERUPDATE_DUPLICATE_ITEM_PRODUCT_ID—productIdдолжен быть уникальным.ORDERUPDATE_INVALID_ITEM_PRICE_WITH_QUANTITY— Некорректная комбинация цены и количества единиц товара для возврата.ORDERUPDATE_INVALID_ITEM_PRICE_RANGE— Неверно задана цена за единицу товара для возврата.ORDERUPDATE_INVALID_ITEM_QUANTITY— Неверно задано количество единиц товара для возврата.ANOTHER_REFUND_IN_PROGRESS— Другой возврат уже в процессе, дождитесь его завершения.
Список кодов ошибок открытый и будет дополняться, необходимо уметь обрабатывать неизвестные коды ошибок.
Type: string
Enum: VALIDATION_ERROR, QRC_ID_NOT_FOUND, ORDER_COLLISION, ORDER_NOT_FOUND, ORDER_ALREADY_CAPTURED, ORDER_NOT_CAPTURED, ORDER_REFUND_COLLISION, ORDER_REFUND_WITHOUT_CART_FOR_PARTIAL_REFUND, ORDERUPDATE_UNKNOWN_ITEM_PRODUCT_ID, ORDERUPDATE_DUPLICATE_ITEM_PRODUCT_ID, ORDERUPDATE_INVALID_ITEM_PRICE_RANGE, ORDERUPDATE_INVALID_ITEM_PRICE_WITH_QUANTITY, ORDERUPDATE_INVALID_ITEM_QUANTITY, ANOTHER_REFUND_IN_PROGRESS
401 Unauthorized
Ошибка авторизации.
Body
application/json
{
"status": "fail",
"reason": "Authorization header is missing",
"reasonCode": "AUTHENTICATION_ERROR"
}
All of 2 types
-
Type: Error
Example
{ "status": "fail", "reason": "example" } -
Type: object
reasonCode
Type: UnauthorizedErrorReasonCode
Код ошибки:
AUTHENTICATION_ERROR— Ошибка авторизации. Повторно получите API-ключ.
Список кодов ошибок открытый и будет дополняться, необходимо уметь обрабатывать неизвестные коды ошибок.
Enum:
AUTHENTICATION_ERRORreason
Type: string
Example:
Authorization header is missingExample
{ "reasonCode": "AUTHENTICATION_ERROR", "reason": "Authorization header is missing" }
UnauthorizedErrorReasonCode
Код ошибки:
AUTHENTICATION_ERROR— Ошибка авторизации. Повторно получите API-ключ.
Список кодов ошибок открытый и будет дополняться, необходимо уметь обрабатывать неизвестные коды ошибок.
Type: string
Const: AUTHENTICATION_ERROR
Example: AUTHENTICATION_ERROR
429 Too Many Requests
Слишком много запросов, повторите запрос позже.
Если ошибка сохраняется при разумном использовании API, обратитесь в поддержку.
500 Internal Server Error
Внутренняя ошибка сервера. Тело ответа может отсутствовать или иметь произвольный формат.
При получении статуса 5XX, повторите запрос.
No longer supported, please use an alternative and newer version.