ivan.sadovin d61e00d7f7 Merge branch 'main' into 'release'
feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+

See merge request products/cashier/cms/PHPShop!1
2026-10-27 12:06:08 +03:00

🌟 Платёжный модуль «Монета» для PHPShop

PHPShop PHP License

© Правообладатель: НКО «МОНЕТА» (ООО)

📦 Версия модуля: 2.0

ℹ️ Модуль заменяет встроенный в PHPShop 6.7 и 7.0 модуль «Монета» 1.0: тот же каталог moneta и тот же способ оплаты, настройки переносятся кнопкой «Обновить модуль» (раздел «Обновление со встроенного модуля»).

ℹ️ Требования:
PHPShop: 6.7.0+
PHP: 7.4+
Валюта магазина: только RUB

🚀 Установка и настройка модуля

  1. 📥 Скачайте архив модуля.

  2. Распакуйте архив в каталог phpshop/modules/ магазина — в корне архива лежит каталог moneta, он заменит файлы встроенного модуля «Монета». Загрузить архив через админку PHPShop нельзя: в ней нет установки модулей из архива. Два способа:

    • файловый менеджер панели хостинга (ISPmanager, cPanel, Plesk и др.): загрузите архив в phpshop/modules/ и распакуйте его там, соглашаясь на замену файлов, затем удалите архив и распакованный рядом README.md (это эта инструкция, модулю он не нужен);
    • FTP/SFTP: распакуйте архив на своём компьютере и скопируйте каталог moneta в phpshop/modules/ с заменой файлов.

    В итоге должен получиться путь phpshop/modules/moneta/install/module.xml — без лишнего вложенного каталога. Если встроенный модуль «Монета» у вас включён, сначала прочитайте раздел «Обновление со встроенного модуля».

  3. Админка PHPShop -> «Модули» -> «Монета» -> «Включить».

  4. Откройте настройки модуля и заполните поля (таблица ниже), нажмите «Применить».

  5. Включите способ оплаты «Приём платежей банковскими картами, через СБП и Pay-сервисы (Монета)»: «Заказы» -> «Способы оплаты» (/phpshop/admpanel/admin.php?path=payment). При установке он встаёт первым в списке способов оплаты при оформлении заказа; порядок меняется полем «Приоритет» в карточке способа оплаты (меньшее число — выше).

  6. Настройте счёт в личном кабинете MONETA.RU (раздел ниже).

Выключение модуля в PHPShop удаляет его таблицы — настройки придётся ввести заново.

Магазин с базой в UTF-8

Если в phpshop/inc/config.ini указано charset = "utf8", переключите кодировку статических файлов в .htaccess в корне сайта — PHPShop поставляет его с кодировкой windows-1251, а строка для UTF-8 в нём уже есть, но закомментирована:

#AddDefaultCharset windows-1251
AddDefaultCharset utf-8

Без этого браузер читает файлы локали PHPShop (phpshop/locale/russian_utf/*.js) в неверной кодировке: подсказки и сообщения админки и витрины (например, «Пожалуйста, выберите доставку») выводятся кракозябрами. На nginx то же самое задаёт директива charset utf-8; в блоке server сайта. После изменения обновите страницы с очисткой кэша браузера (Ctrl+F5). Модуль от этой настройки не зависит: его страницы и данные для MONETA.RU выводятся в нужной кодировке сами.

Обновление со встроенного модуля

В PHPShop 6.7 и 7.0 модуль «Монета» 1.0 уже встроен — в том же каталоге phpshop/modules/moneta. Если он у вас включён, не выключайте его: при выключении PHPShop удаляет таблицы модуля, и номер счёта с кодом пришлось бы вводить заново. Обновление переносит настройки само.

Перед обновлением

  • Обновляйте, когда нет оплат «в процессе»: оплату, которую покупатель начал во встроенном модуле, а MONETA.RU подтвердила уже после обновления, новый модуль не узнает и не зачтёт — такие заказы после обновления сверьте с операциями в личном кабинете MONETA.RU и отметьте оплаченными вручную.
  • Если вы правили шаблоны в каталоге модуля (templates/), сохраните их копию — файлы будут заменены.

Обновление

  1. Распакуйте архив модуля в phpshop/modules/ с заменой файлов встроенного модуля — как в шаге 2 установки. Модуль не выключайте.
  2. Админка PHPShop -> «Модули» -> «Монета». На вкладке «Основное» появится предупреждение, что настройки ещё от встроенного модуля, — до нажатия кнопки из шага 3 приём оплат выключен (покупатель видит «Оплата через Монету временно недоступна»), а изменения на этой вкладке не сохраняются.
  3. Вкладка «О модуле»: PHPShop пишет «Версия ядра 2.0 не соответствует версии базы данных 1.2» — нажмите «Обновить модуль».
  4. Проверьте настройки на вкладке «Основное» и нажмите «Применить»:
    • Номер счёта перенесён из поля «ID» встроенного модуля (только цифры), код проверки целостности данных — из поля «Секретное слово», «Оплата при статусе» и «Описание оплаты» — как было;
    • Сервер платежей — «Боевой», как работал встроенный модуль; для демо-счёта выберите «Демо»;
    • Тестовый режим и фискализация — выключены: включите их, если они нужны (см. «Настройки модуля»).
  5. Способ оплаты остаётся прежним, включённым или выключенным, как был. Его название и иконка заменяются на новые, если вы их не меняли; изменённые сохраняются.

Личный кабинет MONETA.RU — настройки счёта (раздел «Настройка счёта в личном кабинете MONETA.RU»):

Поле Было у встроенного модуля Что указать
Check URL пусто https://<ваш-сайт>/phpshop/modules/moneta/payment/callback.php — модуль проверит заказ до оплаты: сумму, статус, не оплачен ли он уже
Pay URL https://<ваш-сайт>/phpshop/modules/moneta/payment/result.php …/payment/callback.php, как Check URL. Старый адрес result.php тоже работает, менять его можно не сразу
Success URL, Fail URL http://<ваш-сайт>/success и /fail Лучше включить флаг «Можно переопределять настройки в URL»: модуль сам вернёт покупателя на страницу со статусом оплаты. Без флага укажите адреса со слэшем на конце — https://<ваш-сайт>/success/ и https://<ваш-сайт>/fail/: адреса без слэша PHPShop не открывает (404), так было и со встроенным модулем

Настройки модуля

Поле Описание
Номер счёта Номер расширенного счёта MONETA.RU, только цифры
Код проверки целостности данных Код проверки целостности данных, указанный в настройках расширенного счёта. Сохранённый код в настройках не показывается — оставьте поле пустым, чтобы его не менять
Сервер платежей Боевой (по умолчанию) / Демо (demo.moneta.ru, отдельный номер счёта)
Тестовый режим По умолчанию Выкл. Передаёт MNT_TEST_MODE=1; должен совпадать с флагом «Тестовый режим» в настройках счёта
URL для уведомлений Скопируйте и укажите этот адрес в настройках расширенного счёта как Check URL и Pay URL
Описание оплаты Текст над суммой и кнопкой оплаты на странице «Заказ оформлен» и в личном кабинете покупателя. По умолчанию Оплатите пожалуйста свой заказ, пусто — без текста. Пока заказ ждёт проверки менеджером, текст не показывается: покупатель видит «Заказ обрабатывается менеджером.»
Фискализация чеков По умолчанию Выкл. Фискализация чеков по 54-ФЗ средствами системы MONETA.RU сервисом kassa.payanyway.ru
Email для чеков Обязателен при включённой фискализации: если у покупателя нет ни email, ни телефона, чек уйдёт на этот адрес
Система налогообложения По умолчанию Не передавать — касса возьмёт её из своих настроек
НДС на товары Из настроек раздела «Настройка цен» (по умолчанию) — «Значение НДС» в разделе «Настройка цен» системных настроек PHPShop; иначе одна ставка на все товары, включая расчётные 5/105 … 22/122
НДС на доставку Из настроек способа доставки (по умолчанию) — «Значение НДС» способа доставки; иначе одна ставка на доставку
Признак способа расчёта У всех позиций чека, включая доставку. По умолчанию Полный расчёт
Признак предмета расчёта У товаров. По умолчанию Товар; для услуг, работ и др. — по перечню кассы. Доставка в чеке всегда «Услуга»
Оплата при статусе Новый заказ — оплата сразу после оформления; другой статус — после проверки заказа менеджером
Статус после оплаты По умолчанию Оплачено платежными системами

Сохранять настройки может только администратор с правом «Модули: редактирование» (раздел «Администраторы», вкладка «Права»). Модуль принимает сохранение только со страницы настроек этого же магазина. Если вместо сохранения появилось «запрос пришёл не со страницы этого магазина», откройте настройки заново и нажмите «Применить». Если сообщение повторяется, проверьте, не убирает ли браузер, расширение или прокси заголовки Origin и Referer.

Оформление блока оплаты

На странице «Заказ оформлен» покупатель видит карточку оплаты: логотип MONETA.RU, описание оплаты из настроек, сумму «К оплате», кнопку «Оплатить <сумма>» и пояснение о переходе на защищённую страницу MONETA.RU. Карточка собирается по шаблону phpshop/modules/moneta/templates/payment_forma.tpl, стили — templates/moneta.css, логотип — templates/moneta.svg; их можно изменить под тему магазина:

Переменная Что подставляется
@payment_info@ «Описание оплаты» из настроек модуля — обычный текст, переносы строк сохраняются
@payment_info_hide@ moneta-hide, если описание пустое или заказ сейчас нельзя оплатить
@moneta_total@ Сумма к оплате, как её пишет витрина: 18 500 и знак рубля темы (<span class=rubznak>p</span>)
@moneta_total_hide@ moneta-hide, если заказ сейчас нельзя оплатить, — скрывает сумму и пояснение
@payment_forma@ Форма с кнопкой «Оплатить» или текст о состоянии заказа

Переменные @payment_info@ и @payment_forma@ — те же, что во встроенном модуле PHPShop, поэтому шаблон от него подойдёт. Пути к файлам модуля в шаблоне пишутся без начального слэша (phpshop/modules/...) — витрина PHPShop сама делает их абсолютными. Шаблон и стили лежат в каталоге модуля: обновление модуля их перезапишет — сохраните свою версию перед обновлением.

🔧 Настройка счёта в личном кабинете MONETA.RU

  1. 📝 Зарегистрируйтесь в платёжной системе PayAnyWay и заполните все необходимые данные. Дождитесь проверки аккаунта и создайте расширенный счет.

  2. ⚙️ Заполните настройки расширенного счета (раздел «Мой счет» → «Управление счетами» → «Редактировать счет» → «Показать дополнительные поля»):

Параметр Значение
Псевдоним любой, например Монета
Тестовый режим Нет (как в настройке модуля)
Check URL и Pay URL https://<ваш-сайт>/phpshop/modules/moneta/payment/callback.php — готовый адрес — в поле «URL для уведомлений» настроек модуля (кнопка «Копировать») и на вкладке «Инструкция»
HTTP метод (PayUrl, CheckUrl) POST или GET
Код проверки целостности данных произвольный набор символов; тот же код укажите в настройках модуля
Подпись формы оплаты обязательна Да
Можно переопределять настройки в url Да
Success URL Оставить пустым
Fail URL Оставить пустым
InProgress URL Оставить пустым
Return URL Оставить пустым

⚠️ Важно! Для кириллического домена PayURL и CheckURL должны быть указаны в кодировке Punycode.

  1. Для фискализации чеков по 54-ФЗ средствами за рамками PHPShop настройте вашу кассу в сервисе kassa.payanyway.ru, в настройках расширенного счёта в MONETA.RU установите Pay URL https://kassa.payanyway.ru/index.php?do=invoicepayurl, а в настройках кассы пропишите Pay URL вашего интернет-магазина https://<ваш-сайт>/phpshop/modules/moneta/payment/callback.php. В этом случае чек по 54-ФЗ будет пробиваться через kassa.payanyway.ru, а запрос на Pay URL магазина будет проходить через этот сервис транзитом.

Журнал операций

«Модули» -> «Монета» -> «Журнал операций»: каждое уведомление MONETA.RU (проверка заказа и оплата) с ответом модуля. Код проверки целостности и подписи в журнал не пишутся.

На странице — 500 последних записей, по ним работают поиск и сортировка таблицы. Записи одного заказа за всё время находит поле над таблицей: введите номер заказа (33-57) или целиком MNT_TRANSACTION_ID из личного кабинета MONETA.RU.

На что обратить внимание:

  • «Вторая оплата оплаченного заказа» — покупатель оплатил заказ дважды. Модуль вторую оплату не зачитывает, MONETA.RU будет повторять уведомление; сделайте возврат в личном кабинете MONETA.RU или свяжитесь с покупателем.
  • «Сумма не совпадает с заказом», «У заказа другой способ оплаты» — заказ изменили после того, как покупатель открыл форму оплаты. Верните сумму или способ оплаты — повторное уведомление MONETA.RU зачтёт оплату.
  • «Чек не собран» — при включённой фискализации модуль не смог собрать чек заказа, и оплата не началась: без чека касса не пробьёт его по 54-ФЗ. Причина — в журнале ошибок PHP (строки с префиксом moneta:); обычно это сумма заказа выше предела кассы (42 949 672,95 ₽) или сбой базы данных.
  • «Тестовый режим не совпадает с настройкой модуля» — флаг «Тестовый режим» в модуле и в настройках счёта MONETA.RU должен совпадать.

Как проходит оплата

  1. После оформления заказа (или в личном кабинете, если оплата доступна после проверки менеджером) покупатель нажимает кнопку оплаты и переходит на платёжную форму MONETA.RU.
  2. MONETA.RU проверяет заказ (Check URL) и после оплаты уведомляет магазин (Pay URL) — модуль переводит заказ в статус «после оплаты».
  3. Покупатель возвращается в магазин на страницу /moneta/. Если MONETA.RU уже подтвердила оплату — «Оплата прошла успешно»; если подтверждение ещё в пути — страница около минуты ждёт его и обновляется сама. Статус заказа виден только его владельцу: вошедшему покупателю или в том же браузере, где показывалась кнопка оплаты; остальным — «Заказ не найден». Статус заказа меняет только уведомление MONETA.RU, а не возврат покупателя. Шаблон страницы — templates/return_forma.tpl, стили — templates/moneta.css.

📚 Полезные ресурсы


✅ Модуль настроен, приятных платежей! 💰🎉

S
Description
No description provided
Readme
141 KiB
Languages
PHP 97%
Go Template 1.5%
CSS 1.5%