Оплата ЮKassa

Приём платежей через ЮKassa для OpenCart 4: оплата на защищённой странице ЮKassa (карты, СБП, SberPay и другие способы по настройкам вашего магазина в ЮKassa), холдирование, возвраты из карточки заказа, чеки 54-ФЗ, HTTP-уведомления и журнал запросов.

Назначение и совместимость

Расширение добавляет способ оплаты «Оплата через ЮKassa» (банковские карты, СБП, SberPay и другие способы — по договору магазина с ЮKassa). Покупатель подтверждает заказ, переходит на страницу ЮKassa, оплачивает и возвращается в магазин. Статус заказа ставится автоматически: при возврате покупателя на сайт, по HTTP-уведомлению ЮKassa или кнопкой «Обновить статус» в заказе.

Один магазинПлатёж на ваш shopId; доступные покупателю способы оплаты настраиваются в личном кабинете ЮKassa.
РублиСумма платежа всегда в рублях: заказ в RUB уходит как есть, заказ в другой валюте пересчитывается по курсу RUB магазина. Валюта RUB должна быть заведена в Система → Локализация → Валюты.
Без SDK и правок ядраПрямые запросы к API ЮKassa v3; ядро OpenCart не меняется, модификаторов нет.

Проверено на OpenCart 4.1.0.4 и PHP 8.2 (нужно расширение PHP cURL). Другие версии OpenCart 4 не проверялись.

Установка

  1. Расширения → Установщик → «Загрузить», файл yookassa_oc4.ocmod.zip (имя не менять: OpenCart 4 берёт из него код расширения), затем зелёная кнопка «Установить» в строке «Оплата ЮKassa».
  2. Расширения → Расширения, тип «Оплата» → «Установить» у «Оплата ЮKassa», затем «Редактировать».
  3. Введите shopId и секретный ключ, нажмите «Проверить подключение», включите статус и сохраните.
  4. Укажите адрес для HTTP-уведомлений в личном кабинете ЮKassa (раздел ниже).

При установке создаются три таблицы (yookassa_payment, yookassa_refund, yookassa_log) и событие панели в карточке заказа. Права получает группа пользователя, который нажал «Установить»; другим группам — Система → Пользователи → Группы пользователей, маршрут extension/yookassa_oc4/payment/yookassa.

Ключи магазина и проверка

Ключи берутся в личном кабинете ЮKassa: Интеграция → Ключи API. У тестового магазина свои shopId и ключ — так проверяют интеграцию без реальных денег (тестовые карты описаны в документации ЮKassa).

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

Настройки

Расширения → Расширения → Оплата → Оплата ЮKassa → Редактировать, вкладка «Настройки».

НастройкаПо умолчаниюСмысл
СтатусвыключеноВыключенный способ покупатели не видят. Включить можно только с введёнными ключами
Тестовый режимвключёнПодсказка покупателю о тестовой карте на шаге подтверждения
ХолдированиевыключеноДвухстадийная оплата: деньги замораживаются, списание — кнопкой в заказе (до 7 дней)
Статусы заказасм. нижеКакой статус ставить при создании платежа, холде, оплате, отмене и полном возврате
Уведомлять покупателядаПисьмо покупателю при смене статуса заказа платежом (штатная история заказа)
Минимальная сумма заказа0В основной валюте магазина; ниже неё способ не предлагается
Географическая зонавсе зоныОграничение по адресу оплаты (действует, если в настройках магазина включён адрес оплаты)
Порядок сортировки1Место в списке способов оплаты
Проверять IP-адрес уведомленийдаУведомления принимаются только с подсетей ЮKassa; выключать только для отладки
Журнал запросов к APIдаЗапросы и ответы во вкладке «Журнал»; уведомления записываются всегда

Статусы заказа и холд

СобытиеСтатус по умолчаниюПояснение
Платёж создан, покупатель ушёл на страницу ЮKassaне менятьЗаказ остаётся без статуса (в списке «потерянных») до оплаты — как у штатных способов оплаты. Если задать статус, заказ появится в списке сразу
Холд: деньги замороженыОжиданиеНужно подтвердить или отменить списание в карточке заказа
ОплаченВ обработкеДеньги списаны
Платёж отменёнОтменёнОтказ банка, истечение срока, отмена холда магазином. У заказа без статуса статус не меняется
Возвращён полностьюВозврат средствПосле возврата всей суммы из карточки заказа или по уведомлению ЮKassa

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

Холд подтверждается и отменяется только целиком. Частичное подтверждение в этой версии не поддерживается.

Чеки 54-ФЗ

Вкладка «Чеки 54-ФЗ». Режим выбирается по тому, как фискализация подключена в вашем кабинете ЮKassa:

Состав чека: позиции заказа (название, количество, цена с налогом, если налог начислен в заказе) и доставка отдельной позицией «Услуга». Сумма позиций всегда равна сумме платежа: разница из-за скидок уровня заказа или округлений распределяется по позициям. Покупателю чек уходит на e-mail и телефон из заказа (телефон приводится к формату 79000000000).

НастройкаСмысл
Система налогообложенияКод СНО в чеке. Для «Чеков от ЮKassa» не нужна, для своей кассы — если систем несколько
НДС по умолчаниюСтавка для товаров без соответствия классу налога и для доставки без своей ставки. Коды 1–12: без НДС, 0 %, 10 %, 20 %, 10/110, 20/120, 5 %, 7 %, 5/105, 7/107, 22 %, 22/122
НДС доставкиОтдельная ставка для позиции доставки
Соответствие классов налогаКласс налога товара в OpenCart → код НДС в чеке
Признак предмета расчётаТовар, услуга, работа, платёж, иной — для позиций товаров; доставка всегда «услуга»
Признак способа расчётаПолный расчёт или предоплата 100 %
За соответствие ставок НДС и системы налогообложения вашему учёту отвечает владелец магазина: расширение передаёт в чек то, что указано в настройках.

HTTP-уведомления

Адрес показан на вкладке «Настройки» (…/index.php?route=extension/yookassa_oc4/payment/yookassa.callback). Укажите его в кабинете ЮKassa: Интеграция → HTTP-уведомления, события payment.succeeded, payment.waiting_for_capture, payment.canceled, refund.succeeded.

Как платит покупатель

  1. На шаге оплаты выбирает «Оплата через ЮKassa» и нажимает «Перейти к оплате».
  2. Расширение создаёт платёж в ЮKassa и переводит покупателя на страницу оплаты. Если покупатель вернётся и нажмёт кнопку ещё раз в течение часа, тот же платёж используется повторно — дублей не будет.
  3. После оплаты покупатель возвращается в магазин: при успехе — страница «Заказ оформлен»; при отказе банка или незавершённой оплате — страница «Оплата не завершена» с причиной и кнопками «Повторить оплату» и «Вернуться к оформлению». Деньги в этом случае не списаны.

Панель в карточке заказа

Продажи → Заказы → заказ: над блоком «История» появляется панель «Платёж ЮKassa» со списком платежей заказа (идентификатор, сумма, состояние, способ оплаты, чек, возвраты).

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

Журнал

Вкладка «Журнал» показывает последние 50 записей: запросы к API (метод, путь, код ответа, тело запроса и ответа без ключей) и входящие уведомления с результатом обработки. Кнопка «Очистить журнал» удаляет все записи. Если запросы к API в журнале не нужны, выключите «Журнал запросов к API» — уведомления записываются всё равно.

В сборке OCM Store

В русской сборке OCM Store расширение уже установлено и выключено: откройте Расширения → Расширения → Оплата → Оплата ЮKassa, введите ключи, включите статус и укажите адрес уведомлений в кабинете ЮKassa. Пакета в Установщике нет — файлы расширения входят в сборку.

Удаление

Расширения → Расширения → Оплата → «Удалить» у «Оплата ЮKassa», затем в Установщике — удалить пакет. Настройки и событие удаляются; таблицы платежей, возвратов и журнала остаются (это данные заказов). Повторная установка сохраняет прежние ключи и статусы, если настройки ещё есть.

Типовые вопросы

Способа оплаты нет на шаге оплаты. Проверьте: статус включён, введены оба ключа, в магазине заведена валюта RUB, сумма заказа не ниже минимальной, геозона подходит адресу, в корзине нет подписок.

Покупатель оплатил, а статус заказа не изменился. Нажмите «Обновить статус» в карточке заказа. Проверьте адрес уведомлений в кабинете ЮKassa (нужен HTTPS) и журнал: отклонённые уведомления записываются с кодом 403.

«ЮKassa не приняла платёж». Текст ошибки — из ответа API, подробности в журнале. Чаще всего — неверные ключи или чек с нулевой позицией.

Нужны ли агентские чеки и сплитование? Нет: это расширение для одного магазина, продавцов и площадок нет.