feat: add fiscalization settings, POST callbacks and fix callback issues

This commit is contained in:
2026-10-21 11:41:23 +03:00
committed by Git Moneta
parent d1ac3d989b
commit 6598b95bb8
9 changed files with 1103 additions and 210 deletions
+41 -18
View File
@@ -4,7 +4,7 @@
![PHP](https://img.shields.io/badge/PHP-5.6%2B-purple)
![License](https://img.shields.io/badge/License-MIT-green)
> **📦 Версия модуля: 1.0.3**
> **📦 Версия модуля: 1.0.4**
> **ℹ️ Совместимость версий OpenCart:**
> 3.0.0.0, 3.0.1.1, 3.0.1.2, 3.0.2.0, 3.0.3.0, 3.0.3.1, 3.0.3.2, 3.0.3.3, 3.0.3.4, 3.0.3.5, 3.0.3.6, 3.0.3.7, 3.0.3.8, 3.0.3.9, 3.0.4.0, 3.0.4.1, 3.0.5.0
@@ -29,11 +29,11 @@
│ │ ├── view/image/payment/payanyway.png
│ │ └── view/template/extension/payment/payanyway.twig
│ └── catalog
│ ├── controller/extension/payment/payanyway.php
│ ├── controller/extension/payment/payanyway.php — форма оплаты, Check URL и Pay URL
│ ├── language/{en-gb,ru-ru}/extension/payment/payanyway.php
│ ├── model/extension/payment/payanyway.php
│ └── view/theme/default/template/extension/payment/payanyway.twig
├── install.xml
├── install.xml — OCMOD: приём Check/Pay URL методом POST (правка роутера витрины)
└── README.md
```
@@ -48,20 +48,31 @@
- **«Редактировать»** — для перехода к настройкам
4. ✏️ Заполните соответствующие поля в настройках способа оплаты:
| Поле | Описание |
|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| **Включить модуль оплаты** | Включите или выключите модуль оплаты |
| **Номер счёта** | Ван номер расширенного счёта в системе [MONETA.RU](https://moneta.ru/) |
| **Код проверки целостности данных** | Код проверки целостности данных, указанный в настройках расширенного счёта в системе [MONETA.RU](https://moneta.ru/) |
| **Сервер платежей** | `Боевой` / `Тестовый` |
| **НДС** | Выберите из списка |
| **Валюта платежа** | `RUB` |
| **Статусы заказа** | Выберите соответствующие статусы заказа из списка |
| **Обрабатываемый** | Укажите статус заказа, который выставляется при его создании |
| **Успешный** | Укажите статус заказа, который выставляется при успешной оплате |
| **Неуспешный** | Укажите статус заказа, который выставляется при ошибке оплаты |
| **Регион отображения** | Географическая зона, в которой будет отображаться способ оплаты |
| **Порядок сортировки** | Определяет порядок отображения платежного метода в списке методов оплаты при оформлении заказа. Чем меньше число, тем выше позиция в списке |
| Поле | Описание |
|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Включить модуль оплаты** | Включите или выключите модуль оплаты |
| **Номер счёта** | Ваш номер расширенного счёта в системе [MONETA.RU](https://moneta.ru/), только цифры |
| **Код проверки целостности данных** | Код проверки целостности данных, указанный в настройках расширенного счёта в системе [MONETA.RU](https://moneta.ru/). Сохраняется ровно так, как введён, в том числе с символами `&`, `"`, `<`, `>` |
| **Сервер платежей** | `Боевой` / `Демо` (демо-площадка MONETA.RU) |
| **Тестовый режим** | Имитация оплаты без реального списания средств. Должен совпадать с настройкой счёта в MONETA.RU: уведомление в другом режиме модуль отклоняет |
| **Фискализация чеков** | Включайте, только если к счёту подключён кассовый сервис [kassa.payanyway.ru](https://kassa.payanyway.ru/). Включена — на проверочный запрос модуль отвечает чеком для кассы (без кассы MONETA.RU вернёт ошибку `-700`). Выключена — в операцию уходят только позиции заказа и контакты покупателя. По умолчанию включена |
| **Email для чеков** | Обязателен при фискализации. Подставляется в чек, только если у покупателя нет ни e-mail, ни телефона (ФИО покупателя в чеке остаётся) |
| **НДС** | Ставка НДС всех позиций чека |
| **Признак способа расчёта** | Для товаров, доставки и сборов. Обычно `Полный расчёт`. Проданные подарочные сертификаты всегда идут авансом |
| **Признак предмета расчёта** | Для товаров. Доставка и сборы всегда идут услугой, подарочные сертификаты — платежом |
| **Валюта платежа** | `RUB` |
| **Статусы заказа** | Выберите соответствующие статусы заказа из списка |
| **Обрабатываемый** | Укажите статус заказа, который выставляется при его создании |
| **Успешный** | Укажите статус заказа, который выставляется при успешной оплате |
| **Неуспешный** | Укажите статус заказа, который выставляется при ошибке оплаты |
| **Отменённые** | Заказ в этих статусах не оплачивается: на проверочный запрос модуль отвечает отказом. По умолчанию `Canceled`, `Canceled Reversal`, `Voided` |
| **URL для уведомлений** | Адрес Check URL и Pay URL для настроек счёта MONETA.RU, кнопка «Скопировать» |
| **Регион отображения** | Географическая зона, в которой будет отображаться способ оплаты |
| **Порядок сортировки** | Определяет порядок отображения платежного метода в списке методов оплаты при оформлении заказа. Чем меньше число, тем выше позиция в списке |
Сумма позиций чека всегда равна сумме оплаты: налоги OpenCart входят в цену товаров, скидки (купоны, подарочные сертификаты, бонусные баллы) распределяются по товарам, доставка и сборы идут отдельными позициями. В истории заказа при оплате сохраняется номер операции MONETA.RU: «Заказ оплачен. Номер операции: N».
> ⚠️ **После обновления модуля** нажмите **«Модули / Расширения» → «Модификации» → «Обновить»**, затем откройте настройки PayAnyWay, проверьте новые поля (фискализация после обновления включена) и нажмите **«Сохранить»**. Пока при включённой фискализации не задан «Email для чеков», над формой настроек показывается предупреждение.
---
@@ -76,7 +87,7 @@
| **Тестовый режим** | `Нет` |
| **Check URL** | `https://your_site_name/index.php?route=extension/payment/payanyway/callback` |
| **Pay URL** | `https://your_site_name/index.php?route=extension/payment/payanyway/callback` |
| **HTTP method** | `GET` |
| **HTTP method<sup>\*</sup>** | `GET` или `POST` (требуется настройка) |
| **Можно переопределять настройки в URL** | `Да` |
| **Подпись формы оплаты обязательна** | `Да` |
| **Код проверки целостности данных** | `ваш_код` (произвольный набор символов) |
@@ -87,6 +98,18 @@
> ⚠️ **Важно!** Для кириллического домена PayURL и CheckURL должны быть указаны в кодировке [Punycode](https://2ip.ru/punycode/).
### <sup>\*</sup> 📨 Уведомления методом POST
При **HTTP method** = `POST` MONETA.RU переносит параметры из адреса Check URL / Pay URL в тело запроса, в том числе `route=extension/payment/payanyway/callback`. Штатный OpenCart 3 ищет маршрут только в адресе и без доработки отвечает главной страницей, а платёжная форма показывает «Код ошибки: 302».
Модуль решает это модификацией OCMOD из `install.xml`: маршрут колбэка (и только его) берётся из тела запроса. Чтобы модификация заработала:
1. Устанавливайте модуль только через **«Модули / Расширения» → «Установка расширений»** (архив `payanyway.ocmod.zip`). При заливке файлов по FTP модификация не регистрируется.
2. После установки или обновления модуля откройте **«Модули / Расширения» → «Модификации»** (Extensions → Modifications) и нажмите синюю кнопку **«Обновить»** вверху справа. Повторяйте это после включения, выключения или удаления любой модификации и после кнопки «Очистить».
3. Откройте настройки PayAnyWay. Если модификация не применена, над формой будет жёлтое предупреждение. Причину смотрите на вкладке «Лог» в «Модификациях»: строка `NOT FOUND` у файла `catalog/controller/startup/router.php` означает, что роутер уже изменён другой модификацией.
Если модификацию применить не удаётся, выберите в настройках счёта **HTTP method** = `GET`: при GET модификация не нужна.
---
## 📚 Полезные ресурсы OpenCart