Download OpenAPI specification:Download
Свои предложения и идеи о документации можно оставить в репозитории по адресу: https://github.com/Raiffeisen-DGTL/ecom-API/blob/master/ecom.yaml
Для подключения перейдите на сайт.
По остальным вопросам работы с API необходимо обращаться в Службу Поддержки Raiffeisenbank:
Чтобы принимать платежи:
Для интеграции платежной страницы используйте:
Демонстрация: https://pay.raif.ru/pay/demo.html
Пользователь совершает следующие действия в процессе платежа:
Схема выполнения платежа представлена ниже:
По закону от 22.05.2003 № 54–ФЗ "О применении контрольно-кассовой техники при осуществлении расчетов в Российской Федерации" при оплате товаров, работ или услуг необходимо формировать фискальный чек и отправлять его в налоговую с помощью кассы.
Клиенты Райффайзенбанка, подключившие интернет-эквайринг, также могут воспользоваться услугой фискализации чеков через онлайн-кассу. Пошаговые инструкции приведены ниже.
Поставщик кассового оборудования | ФФД 1.05 | ФФД 1.2 |
---|---|---|
АТОЛ Онлайн | + | + |
Билайн | - | + |
БИФИТ | + | - |
Чек-Онлайн | + | - |
Эвотор | + | + |
LIFE PAY | + | + |
ОFD.ru | + | + |
Orange Data | + | - |
Поддерживает ФФД 1.05 и ФФД 1.2.
Поддерживает ФФД 1.2
Поддерживает ФФД 1.05
Поддерживает ФФД 1.05
Поддерживает ФФД 1.05 и ФФД 1.2
Поддерживает ФФД 1.05 и ФФД 1.2
Поддерживает ФФД 1.05 и ФФД 1.2
Для получения данных по подключенной кассе в OFD.ru перейдите в раздел Ferma в личном кабинете клиента и пролистайте до виджета "Реквизиты доступа". Скопируйте логин, пароль и идентификатор группы ККТ для подключения. Эти данные понадобятся на следующем шаге.
После этого чеки будут автоматически регистрироваться через выбранную кассу. Помимо автоматической фискализации чеков также доступна фискализация через API банка.
Поддерживает ФФД 1.05
Bзаимодействие осуществляется по протоколу HTTP с использованием методов GET/POST (в описании каждого запроса явно указан требуемый метод и адрес).
POST-запросы используют JSON-аргументы, GET-запросы работают со строками запросов.
При отправке запросов на открытие платежной формы и создание заказа с открытием формы, API возвращает ответ в формате HTML документа, ответы на остальные запросы будут в формате JSON.
Ответ любого метода содержит код сообщения (code). Если в процессе обработки любого запроса произойдет логическая ошибка, API вернет дополнительно описание ошибки (message).
Для авторизация запросов необходимы:
Продовый хост: https://pay.raif.ru
Тестовый хост: https://pay-test.raif.ru
BАЖНО: Секретный ключ необходимо хранить в защищенном месте, нельзя публиковать на сторонних ресурсах или передавать третьим лицам.
Межсервисные запросы авторизуются посредством секретного ключа API (SECRET_KEY). Параметр авторизации указывается в заголовке Authorization, значение которого формируется как "Bearer SECRET_KEY".
Посмотреть боевой publicId и сгенерировать ключи можно в личном кабинете во вкладке "Прием платежей"
Для генерации тестового секретного ключа необходимо обратиться по адресу: ecom@raiffeisen.ru
Стандартный ответ сервиса содержит код сообщения (code). Если в процессе обработки запроса произойдет логическая ошибка, API вернет описание ошибки (message).
HTTP-код | code | message | Комментарий |
---|---|---|---|
200 | SUCCESS | Запрос обработан успешно | Успешное выполнение запроса без логических и системных сбоев. |
200 | ERROR.Код_ошибки | Текстовое сообщение о сути ошибки | Логическая ошибка при выполнении запроса. |
500 | ERROR.INTERNAL | Ошибка | Системная ошибка при выполнении запроса. |
Для полного цикла тестирования оплаты необходимо указывать сумму платежа больше 10 рублей. Карты для тестовой среды:
Для полного цикла тестирования оплаты Райффайзенбанк предоставляет возможность использования демо-приложения для сканирования QRC от имени покупателя по адресу: WEB-приложение для оплаты
Указанный адрес можно открыть в браузере любого устройства, где есть камера. Никакого дополнительного софта/плагинов устанавливать не нужно. Далее нажать на значок СБП (при необходимости разрешить браузеру доступ к камере) и поднести к ней изображение QR-кода. Если камера не открылась, проверьте, что в адресе указан протокол https.
Использование JS SDK позволяет открывать форму с фронтовой части в pop-up окне, либо редиректить пользователя на страницу Банка, что обеспечивает бесшовный сценарий для клиента.
Дополнительно возможно кастомизировать интерфейс платежной формы и передавать дополнительные поля.
Вы можете настроить название, логотип и цвет кнопок на форме в нашем конфигураторе: Конфигуратор
Там же можно получить код для встраивания его в JS-библиотеку.
Доступные SDK:
Также плагины для различных cms можно найти в github.
При использовании остальных SDK для работы с платежной формой необходимо либо самостоятельно использовать методы, описанные в разделе [Платежная форма], либо использовать дополнительно JS SDK.
Простой способ для интеграции. Клиента необходимо перенаправить на платежную форму, передав параметры заказа. Кастомизация интерфейса формы или передача дополнительных полей в данном варианте интеграции недоступны.
При редиректе клиента на полученный URL откроется форма для оплаты
publicId required | string Идентификатор магазина |
amount required | string Сумма платежа в рублях. Минимальный платеж по карте 10 рублей. Для копеек доступно два знака после точки. |
orderId | string <= 40 characters ^[A-z0-9-_.]+$ Идентификатор заказа в магазине |
comment | string <URL encoded> <= 140 characters Комментарий к заказу |
paymentDetails | string <= 140 characters Назначение платежа для выписки, используется для СБП |
paymentMethod | string Enum: "ONLY_SBP" "ONLY_ACQUIRING" Выбор метода оплаты |
locale | string Enum: "ru" "en" Выбор языка формы, по умолчанию ru |
successUrl | string <URL encoded> URL ресурса, куда будет перенаправлен клиент в случае успешного платежа |
failUrl | string <URL encoded> URL ресурса, куда будет перенаправлен клиент в случае неуспешного платежа |
expirationDate | string <date-time encoded> Срок жизни заказа. YYYY-MM-DDТHH24:MM:SS±HH:MM |
successSbpUrl | string <uri> Ссылка для автоматического возврата плательщика из приложения банка в приложение или на сайт магазина. Ссылка должна содержать https:// для web страниц или уникальную схему для мобильного приложения. |
Метод позволяет создать заказ с открытием формы
publicId required | string Идентификатор магазина |
orderId | string <= 40 characters ^[A-z0-9-_.]+$ Order ID |
amount required | number Сумма платежа в рублях. Минимальная сумма для ооплаты картой 10 рублей. Для копеек доступно два знака после разделителя. |
comment | string <= 140 characters Комментарий. Не может быть пустым или содержать только пробелы. Может сождержать: |
successUrl | string URL ресурса, куда будет перенаправлен клиент в случае успешного платежа |
failUrl | string URL ресурса, куда будет перенаправлен клиент в случае неуспешного платежа |
object Дополнительные параметры. | |
paymentMethod | string Enum: "ONLY_SBP" "ONLY_ACQUIRING" Выбор метода оплаты. Если значение не передано, отображается общая форма |
locale | string Enum: "ru" "en" Выбор языка формы, по умолчанию ru |
expirationDate | string <date-time> Срок жизни заказа. YYYY-MM-DDТHH24:MM:SS±HH:MM |
successSbpUrl | string <uri> Ссылка для автоматического возврата плательщика из приложения банка в приложение или на сайт магазина. Ссылка должна содержать https:// для web страниц или уникальную схему для мобильного приложения. |
paymentDetails | string <= 140 characters Назначение платежа для платежей по СБП |
{- "publicId": "000001680200002-80200002",
- "orderId": "orderTest",
- "amount": 1200,
- "comment": "Покупка шоколадного торта",
- "failUrl": "string",
- "extra": {
- "apiClient": "Payform Software",
- "apiClientVersion": "1.0.0"
}, - "paymentMethod": "ONLY_SBP",
- "locale": "ru",
- "expirationDate": "2022-10-21T14:17:00.000+03:00",
- "paymentDetails": "string"
}
{- "timestamp": "2023-02-15T06:36:32.418+00:00",
- "status": 415,
- "error": "Unsupported Media Type",
- "path": "string"
}
Для реализации взаимодействия с партнёром Райффайзенбанк предоставляет API для:
Метод позволяет получить статус транзакции. Необходимо проверять сумму, так как у клиентов есть возможность ее изменить.
orderId required | string <= 40 characters A-z0-9-_. Идентификатор заказа в магазине |
Authorization required | string |
<?php
$orderId = 'testOrder';
/** @var \Raiffeisen\Ecom\Client $client */
$response = $client->getOrderTransaction($orderId);
print_r($response);
?>
{- "code": "SUCCESS",
- "transaction": {
- "id": 120059,
- "orderId": "testOrder",
- "status": {
- "value": "SUCCESS",
- "date": "2019-07-11T17:45:13+03:00"
}, - "paymentMethod": "acquiring",
- "paymentParams": {
- "rrn": "935014591810",
- "authCode": "259AA"
}, - "amount": 12500.5,
- "comment": "Покупка шоколадного торта",
- "extra": {
- "apiClient": "Payform Software",
- "apiClientVersion": "1.0.0"
}
}
}
Метод позволяет выполнить отмену/возврат по платежу, как полную, так и частичную.
В случае с СБП выполняется только возврат.
Для мерчантов с подключенной фискализацией метод также позволяет пробить фискальный чек по возврату. Для этого необходимо в теле запроса передать данные чека в объекте receipt.
В таком случае чек возврата будет пробит автоматически. Если объект не передан, то возврат будет проведен без чека.
orderId required | string <= 40 characters A-z0-9-_. Идентификатор заказа в магазине |
refundId required | string <= 40 characters A-z0-9-_. Уникальный идентификатор запроса на возврат в системе партнера |
Authorization required | string |
amount required | number Сумма возврата в рублях |
paymentDetails | string <= 140 characters Назначение платежа для СБП. Не может быть пустым или содержать только пробелы. Может сождержать: |
{- "amount": 1200,
- "paymentDetails": "string"
}
{- "code": "SUCCESS",
- "amount": 1200,
- "refundStatus": "IN_PROGRESS",
- "receipt": {
- "customer": {
- "email": "customer@test.ru",
- "name": "Иванов Иван Иванович",
- "extra": { }
}, - "items": [
- {
- "name": "Шоколадный торт",
- "price": 1200,
- "quantity": 1,
- "amount": 1200,
- "paymentObject": "COMMODITY_MARKING_WITH_CODE",
- "paymentMode": "FULL_PREPAYMENT",
- "measurementUnit": "PIECE",
- "nomenclatureCode": "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",
- "vatType": "VAT20",
- "agentType": "ANOTHER",
- "supplierInfo": {
- "phone": "+79991234567",
- "name": "ООО «Ромашка»",
- "inn": "287381373424"
}, - "marking": {
- "quantity": {
- "numerator": 1,
- "denominator": 3
}, - "code": {
- "format": "GS1M",
- "value": "MDEwNDYwNzQyODY3OTA5MDIxNmVKSWpvV0g1NERkVSA5MWZmZDAgOTJzejZrU1BpckFwZk1CZnR2TGJvRTFkbFdDLzU4aEV4UVVxdjdCQmtabWs0PQ=="
}
}
}
], - "payments": [
- {
- "type": "PREPAID",
- "amount": 1200
}
]
}
}
Метод позволяет получить статус по отмене/возврату.
orderId required | string <= 40 characters A-z0-9-_. Идентификатор заказа в магазине |
refundId required | string <= 40 characters A-z0-9-_. Уникальный идентификатор запроса на возврат в системе партнера |
Authorization required | string |
<?php
$orderId = 'testOrder';
$refundId = 'testRefund';
/** @var \Raiffeisen\Ecom\Client $client */
$response = $client->getOrderRefund($orderId, $refundId);
print_r($response);
?>
{- "code": "SUCCESS",
- "amount": 150,
- "refundStatus": "COMPLETED"
}
Метод позволяет получить данные о заказе
orderId required | string Идентификатор заказа в магазине |
Authorization required | string |
<?php
$orderId = 'testOrder';
/** @var \Raiffeisen\Ecom\Client $client */
$response = $client->getOrder($orderId);
print_r($response);
?>
{- "amount": 12500.5,
- "comment": "Покупка шоколадного торт",
- "extra": {
- "apiClient": "Payform Software",
- "apiClientVersion": "1.0.0"
}, - "status": {
- "value": "NEW",
- "date": "2019-08-24T14:15:22+03:00"
}, - "expirationDate": "2019-08-24T14:15:22+03:00"
}
Данный метод позволяет отменить заказ, если он не был оплачен. После отмены страница оплаты будет недоступна.
orderId required | string Идентификатор заказа в магазине |
Authorization required | string |
<?php
$orderId = 'testOrder';
/** @var \Raiffeisen\Ecom\Client $client */
$client->deleteOrder($orderId);
?>
{- "code": "ORDER_HAS_FINAL_STATUS",
- "message": "Заказ с идентификатором test123 имеет статус PAID"
}
Метод позволяет получить по заказу список чеков, которые успешно зарегистрированы в ОФД и имеют статус DONE. По умолчанию возвращаются как чеки прихода, так и чеки возврата. Чтобы получить чеки определенного типа, необходимо в строке запроса передать дополнительный параметр receiptType.
Если ни один чек не найден, в ответ вернется 200 OK и пустой массив.
orderId required | string <= 40 characters A-z0-9-_. Идентификатор заказа в магазине |
receiptType | string Enum: "sell" "refund" Тип чека: |
Authorization required | string |
<?php
$orderId = 'testOrder';
/** @var \Raiffeisen\Ecom\Client $client */
$response = $client->getOrderReceipts($orderId);
print_r($response);
?>
[- {
- "receiptNumber": "3000827351832",
- "receiptType": "REFUND",
- "status": "DONE",
- "orderNumber": "testOrder",
- "total": 1200,
- "customer": {
- "email": "customer@test.ru",
- "name": "Иванов Иван Иванович"
}, - "items": [
- {
- "name": "Шоколадный торт",
- "price": 1200,
- "quantity": 1,
- "amount": 1200,
- "paymentObject": "COMMODITY",
- "paymentMode": "FULL_PAYMENT",
- "measurementUnit": "шт",
- "nomenclatureCode": "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",
- "vatType": "VAT20",
- "agentType": "ANOTHER",
- "supplierInfo": {
- "phone": "+79991234567",
- "name": "ООО «Ромашка»",
- "inn": "956839506500"
}
}
], - "payments": [
- {
- "type": "PREPAID",
- "amount": 1200
}
]
}
]
Метод позволяет получить чек возврата по идентификатору заказа и идентификатору возврата.
orderId required | string <= 40 characters A-z0-9-_. Идентификатор заказа в магазине |
refundId required | string <= 40 characters A-z0-9-_. Уникальный идентификатор запроса на возврат в системе партнера |
Authorization required | string |
<?php
$orderId = 'testOrder';
$refundId = 'testRefund';
/** @var \Raiffeisen\Ecom\Client $client */
$response = $client->getOrderRefundReceipt($orderId, $refundId);
print_r($response);
?>
{- "receiptNumber": "3000827351831",
- "receiptType": "REFUND",
- "status": "DONE",
- "orderNumber": "testOrder",
- "total": 1200,
- "customer": {
- "email": "customer@test.ru",
- "name": "Иванов Иван Иванович",
- "extra": { }
}, - "items": [
- {
- "name": "Шоколадный торт",
- "price": 1200,
- "quantity": 1,
- "amount": 1200,
- "paymentObject": "COMMODITY_MARKING_WITH_CODE",
- "paymentMode": "FULL_PREPAYMENT",
- "measurementUnit": "PIECE",
- "nomenclatureCode": "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",
- "vatType": "VAT20",
- "agentType": "ANOTHER",
- "supplierInfo": {
- "phone": "+79991234567",
- "name": "ООО «Ромашка»",
- "inn": "287381373424"
}, - "marking": {
- "quantity": {
- "numerator": 1,
- "denominator": 3
}, - "code": {
- "format": "GS1M",
- "value": "MDEwNDYwNzQyODY3OTA5MDIxNmVKSWpvV0g1NERkVSA5MWZmZDAgOTJzejZrU1BpckFwZk1CZnR2TGJvRTFkbFdDLzU4aEV4UVVxdjdCQmtabWs0PQ=="
}
}
}
], - "payments": [
- {
- "type": "PREPAID",
- "amount": 1200
}
]
}
Для информирования ТСП о проведенных платежах и возвратах могут использоваться HTTP-уведомления на адрес, указанный в его настройках.
Боевой адрес можно указать в личном кабинете во вкладке "Прием платежей"
Также адрес для тестовой и боевой среды можно указать с помощью метода в API.
Для партнёра уведомление представляет собой входящий POST-запрос, который использует JSON-структуру.
Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200.
Ответы с любыми другими HTTP-кодами будут считаться невалидными. Повторные попытки отправки будут проводиться в течение суток с нарастающим интервалом.
Для проверки подлинности уведомления по оплате к данным добавляется подпись в заголовке x-api-signature-sha256, полученная на основе общего секретного ключа и контрольной строки amount|publicId|order|transaction.status.value|transaction.status.date
с помощью HMAC-SHA-256.
Для проверки подлинности уведомления по возврату к данным добавляется подпись в заголовке x-api-signature-sha256, полученная на основе общего секретного ключа и контрольной строки amount|publicId|refund.id|status.value|status.date
с помощью HMAC-SHA-256.
Необходимо проверять сумму, так как у клиентов есть возможность ее изменить.
Уведомления отправляются с IP 193.28.44.23
event | string Value: "payment" Тип сообщения |
any (transaction) Данные по операции |
{- "event": "payment",
- "transaction": {
- "id": 120059,
- "orderId": "testOrder",
- "status": {
- "value": "SUCCESS",
- "date": "2019-07-11T17:45:13+03:00"
}, - "paymentMethod": "acquiring",
- "paymentParams": {
- "rrn": "935014591810",
- "authCode": "259AA"
}, - "amount": 12500.5,
- "comment": "Покупка шоколадного торта",
- "extra": {
- "apiClient": "Payform Software",
- "apiClientVersion": "1.0.0"
}
}
}
{- "refund": {
- "id": "test12345",
- "ecom": {
- "rrn": "556435345345435",
- "authCode": "123456AA"
}, - "amount": 1500.2,
- "status": {
- "value": "COMPLETED",
- "date": "2024-07-09T15:00:00+03:00"
}, - "paymentParams": {
- "transactionId": 935014591810,
- "orderId": "259AA"
}
}
}
Для подписи уведомлений будет использоваться ключ из заголовка авторизации.
Authorization required | string |
callbackUrl required | string URL для приема уведомлений |
{
}
{
}
Для подключения отправки реестров необходимо написать на ecom@raiffeisen.ru
Реестры по платежам отправляются на ежедневной основе.
В случае отсутствия операций за день, реестр на следующий день не отправляется.
Формат реестра:
Наименование колонки | Значение |
---|---|
Мерчант | Идентификатор в системе банка |
Дата операции МСК | Дата и время проведения операции |
Тип | Тип операции |
id заказа | Id заказа в системе партнера (orderId) |
id возврата | Id возврата в системе партнера (refundId) |
Комментарий | Комментарий к заказу (comment) |
Способ оплаты | Instant Payment QR - при оплате по СБП, Название платежной системы - по Эквайрингу |
Данные оплаты | QR id - для СБП, authCode и rnn -для Эквайринга |
id клиента | СБП - маскированный код плательщика. Для Эквайринга - маскированный номер карты |
Сумма | Сумма транзакции (amount) |
Комиссия | Комиссия по транзакции |
Дополнительные поля | Дополнительная информация (extra) |
Пример выписки по платежам интернет-эквайринга
Методы позволяют получить список операций и итоговые суммы за определенный промежуток времени. Возможно использование методов для закрытия кассового периода.
Отчёт по транзакциям за указанный период (не более трёх дней)
from required | string YYYY-MM-DD ТHH24:MM:SS±HH:MM Дата и время начала выборки |
to required | string YYYY-MM-DD ТHH24:MM:SS±HH:MM Дата и время окончания выборки |
operationTypes | string Enum: "Payment" "Refund" Фильтр по типу операции. Если значение не передано - выгружаются все типы операций |
qrId | string Фильтр по QR-коду. Если значение не передано - выгружаются все операции по мерчанту |
Authorization | string |
{- "sbp": {
- "payments": {
- "sum": 21,
- "count": 2
}, - "refunds": {
- "sum": 10,
- "count": 1
}, - "total": {
- "sum": 11,
- "count": 3
}
}, - "card": {
- "payments": {
- "sum": 23,
- "count": 2
}, - "refunds": {
- "sum": 11,
- "count": 1
}, - "total": {
- "sum": 12,
- "count": 3
}
}
}
Получение детализированного отчёта по транзакциям за указанный период (не более трёх дней)
from required | string YYYY-MM-DD ТHH24:MM:SS±HH:MM Дата и время начала выборки |
to required | string YYYY-MM-DD ТHH24:MM:SS±HH:MM Дата и время окончания выборки |
operationTypes | string Enum: "Payment" "Refund" Фильтр по типу операции. Если значение не передано - выгружаются все типы операций |
qrId | string Фильтр по QR-коду. Если значение не передано - выгружаются все операции по мерчанту |
Authorization | string |
{- "sbp": {
- "payment": [
- {
- "orderId": "a3294_3FFERSer_RE",
- "amount": 77,
- "transactionDate": "2022-12-08T13:21:04.631543+03:00",
- "paymentSystem": "Instant Payment QR",
- "paymentDetails": "Благотворительное пожертвование",
- "transactionId": 178657,
- "clientId": "007910******4567",
- "qrId": "AS1A007L7B8IPA1F8CBQ8RK2D27FHST9",
- "sbpTransactionId": "A23091339574920E000009529E6B66DF",
- "orderComment": "Комментарий",
- "fee": 0.31
}
], - "refund": [
- {
- "orderId": "a3294_3FFERSer_RE",
- "amount": 17,
- "transactionDate": "2022-12-09T13:17:04.631543+03:00",
- "paymentSystem": "Instant Payment QR",
- "paymentDetails": "Возврат денежных средств",
- "transactionId": 178658,
- "clientId": "007910******4567",
- "qrId": "AS1A007L7B8IPA1F8CBQ8RK2D27FHST9",
- "sbpTransactionId": "B229701403532102000016268EEA632B",
- "refundId": "refundOrder1",
- "fee": 0
}
]
}, - "card": {
- "payment": [
- {
- "orderId": "xU5q5XG8m3oaDGKOTWg01671000652444",
- "amount": 14,
- "transactionDate": "2022-12-14T09:51:02.339+03:00",
- "paymentSystem": "VISA",
- "paymentDetails": "Назначение платежа",
- "transactionId": 5252420,
- "clientId": "200043****823",
- "authCode": "259AA",
- "rrn": "935014591810",
- "orderComment": "Благотворительное пожертвование",
- "fee": 0.38
}
], - "refund": [
- {
- "orderId": "xU5q5XG8m3oaDGKOTWg01671000652444",
- "amount": 13,
- "transactionDate": "2022-12-14T10:01:24.84+03:00",
- "paymentSystem": "VISA",
- "paymentDetails": "Назначение платежа",
- "transactionId": 5252440,
- "clientId": "200043****823",
- "authCode": "259AA",
- "rrn": "935014591810",
- "refundId": "refundId1",
- "fee": 0
}
]
}
}
Ответ любого метода содержит код сообщения (code). Если в процессе обработки любого запроса произойдет логическая ошибка, API вернет описание ошибки (message).
Описание основных ошибок:
code | message |
---|---|
ERROR.NOT_FOUND | Счет не найден у данного партнера |
ERROR.REFUND_INSUFFICIENT_FUNDS | Сумма возврата больше суммы остатка по платежу |
ERROR.INVALID_REQUEST | Некорректные параметры запроса |
RECEIPT_VALIDATION_FAILED | Чек не прошел валидацию. Причина: * |