feat: moneta 2.0, MONETA.Assistant payment module for PHPShop 6.7+
This commit is contained in:
@@ -1,93 +1,169 @@
|
||||
# PHPShop
|
||||
# 🌟 Платёжный модуль «Монета» для [PHPShop](https://www.phpshop.ru/)
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
> **© Правообладатель:** НКО «МОНЕТА» (ООО)
|
||||
|
||||
## Getting started
|
||||
> **📦 Версия модуля: 2.0**
|
||||
|
||||
To make it easy for you to get started with GitLab, here's a list of recommended next steps.
|
||||
> ℹ️ Модуль заменяет встроенный в PHPShop 6.7 и 7.0 модуль «Монета» 1.0: тот же каталог `moneta` и тот же способ оплаты, настройки переносятся кнопкой «Обновить модуль» (раздел [«Обновление со встроенного модуля»](#обновление-со-встроенного-модуля)).
|
||||
|
||||
Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
|
||||
> **ℹ️ Требования:**<br>
|
||||
> **PHPShop:** 6.7.0+<br>
|
||||
> **PHP:** 7.4+<br>
|
||||
> **Валюта магазина:** только RUB<br>
|
||||
|
||||
## Add your files
|
||||
## 🚀 Установка и настройка модуля
|
||||
|
||||
* [Create](https://docs.gitlab.com/user/project/repository/web_editor/#create-a-file) or [upload](https://docs.gitlab.com/user/project/repository/web_editor/#upload-a-file) files
|
||||
* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command:
|
||||
1. 📥 [Скачайте архив модуля](https://git.pub.moneta.ru/CMS/PHPShop/releases).
|
||||
2. Распакуйте архив в каталог `phpshop/modules/` магазина — в корне архива лежит каталог `moneta`, он заменит файлы встроенного модуля «Монета». Загрузить архив через админку PHPShop нельзя: в ней нет установки модулей из архива. Два способа:
|
||||
- **файловый менеджер панели хостинга** (ISPmanager, cPanel, Plesk и др.): загрузите архив в `phpshop/modules/` и распакуйте его там, соглашаясь на замену файлов, затем удалите архив и распакованный рядом `README.md` (это эта инструкция, модулю он не нужен);
|
||||
- **FTP/SFTP**: распакуйте архив на своём компьютере и скопируйте каталог `moneta` в `phpshop/modules/` с заменой файлов.
|
||||
|
||||
```
|
||||
cd existing_repo
|
||||
git remote add origin https://git.moneta.ru:8000/products/cashier/cms/PHPShop.git
|
||||
git branch -M main
|
||||
git push -uf origin main
|
||||
В итоге должен получиться путь `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 в нём уже есть, но закомментирована:
|
||||
|
||||
```apache
|
||||
#AddDefaultCharset windows-1251
|
||||
AddDefaultCharset utf-8
|
||||
```
|
||||
|
||||
## Integrate with your tools
|
||||
Без этого браузер читает файлы локали PHPShop (`phpshop/locale/russian_utf/*.js`) в неверной кодировке: подсказки и сообщения админки и витрины (например, «Пожалуйста, выберите доставку») выводятся кракозябрами. На nginx то же самое задаёт директива `charset utf-8;` в блоке `server` сайта. После изменения обновите страницы с очисткой кэша браузера (Ctrl+F5). Модуль от этой настройки не зависит: его страницы и данные для MONETA.RU выводятся в нужной кодировке сами.
|
||||
|
||||
* [Set up project integrations](https://git.moneta.ru:8000/products/cashier/cms/PHPShop/-/settings/integrations)
|
||||
## Обновление со встроенного модуля
|
||||
|
||||
## Collaborate with your team
|
||||
В PHPShop 6.7 и 7.0 модуль «Монета» 1.0 уже встроен — в том же каталоге `phpshop/modules/moneta`. Если он у вас включён, не выключайте его: при выключении PHPShop удаляет таблицы модуля, и номер счёта с кодом пришлось бы вводить заново. Обновление переносит настройки само.
|
||||
|
||||
* [Invite team members and collaborators](https://docs.gitlab.com/user/project/members/)
|
||||
* [Create a new merge request](https://docs.gitlab.com/user/project/merge_requests/creating_merge_requests/)
|
||||
* [Automatically close issues from merge requests](https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically)
|
||||
* [Enable merge request approvals](https://docs.gitlab.com/user/project/merge_requests/approvals/)
|
||||
* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/)
|
||||
**Перед обновлением**
|
||||
|
||||
## Test and Deploy
|
||||
- Обновляйте, когда нет оплат «в процессе»: оплату, которую покупатель начал во встроенном модуле, а MONETA.RU подтвердила уже после обновления, новый модуль не узнает и не зачтёт — такие заказы после обновления сверьте с операциями в личном кабинете MONETA.RU и отметьте оплаченными вручную.
|
||||
- Если вы правили шаблоны в каталоге модуля (`templates/`), сохраните их копию — файлы будут заменены.
|
||||
|
||||
Use the built-in continuous integration in GitLab.
|
||||
**Обновление**
|
||||
|
||||
* [Get started with GitLab CI/CD](https://docs.gitlab.com/ci/quick_start/)
|
||||
* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/user/application_security/sast/)
|
||||
* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/topics/autodevops/requirements/)
|
||||
* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/user/clusters/agent/)
|
||||
* [Set up protected environments](https://docs.gitlab.com/ci/environments/protected_environments/)
|
||||
1. Распакуйте архив модуля в `phpshop/modules/` с заменой файлов встроенного модуля — как в шаге 2 [установки](#-установка-и-настройка-модуля). Модуль не выключайте.
|
||||
2. Админка PHPShop -> **«Модули»** -> **«Монета»**. На вкладке «Основное» появится предупреждение, что настройки ещё от встроенного модуля, — до нажатия кнопки из шага 3 приём оплат выключен (покупатель видит «Оплата через Монету временно недоступна»), а изменения на этой вкладке не сохраняются.
|
||||
3. Вкладка **«О модуле»**: PHPShop пишет «Версия ядра 2.0 не соответствует версии базы данных 1.2» — нажмите **«Обновить модуль»**.
|
||||
4. Проверьте настройки на вкладке «Основное» и нажмите **«Применить»**:
|
||||
- **Номер счёта** перенесён из поля «ID» встроенного модуля (только цифры), **код проверки целостности данных** — из поля «Секретное слово», **«Оплата при статусе»** и **«Описание оплаты»** — как было;
|
||||
- **Сервер платежей** — «Боевой», как работал встроенный модуль; для демо-счёта выберите «Демо»;
|
||||
- **Тестовый режим** и **фискализация** — выключены: включите их, если они нужны (см. [«Настройки модуля»](#настройки-модуля)).
|
||||
5. Способ оплаты остаётся прежним, включённым или выключенным, как был. Его название и иконка заменяются на новые, если вы их не меняли; изменённые сохраняются.
|
||||
|
||||
***
|
||||
**Личный кабинет MONETA.RU** — настройки счёта (раздел [«Настройка счёта в личном кабинете MONETA.RU»](#настройка-счёта-в-личном-кабинете-monetaru)):
|
||||
|
||||
# Editing this README
|
||||
| Поле | Было у встроенного модуля | Что указать |
|
||||
|-------------------------------|----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **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), так было и со встроенным модулем |
|
||||
|
||||
When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
|
||||
## Настройки модуля
|
||||
|
||||
## Suggestions for a good README
|
||||
| Поле | Описание |
|
||||
|-------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Номер счёта** | Номер расширенного счёта [MONETA.RU](https://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 |
|
||||
| **НДС на доставку** | `Из настроек способа доставки` (по умолчанию) — «Значение НДС» способа доставки; иначе одна ставка на доставку |
|
||||
| **Признак способа расчёта** | У всех позиций чека, включая доставку. По умолчанию `Полный расчёт` |
|
||||
| **Признак предмета расчёта** | У товаров. По умолчанию `Товар`; для услуг, работ и др. — по перечню кассы. Доставка в чеке всегда «Услуга» |
|
||||
| **Оплата при статусе** | `Новый заказ` — оплата сразу после оформления; другой статус — после проверки заказа менеджером |
|
||||
| **Статус после оплаты** | По умолчанию `Оплачено платежными системами` |
|
||||
|
||||
Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
|
||||
Сохранять настройки может только администратор с правом «Модули: редактирование» (раздел «Администраторы», вкладка «Права»). Модуль принимает сохранение только со страницы настроек этого же магазина. Если вместо сохранения появилось «запрос пришёл не со страницы этого магазина», откройте настройки заново и нажмите «Применить». Если сообщение повторяется, проверьте, не убирает ли браузер, расширение или прокси заголовки Origin и Referer.
|
||||
|
||||
## Name
|
||||
Choose a self-explaining name for your project.
|
||||
## Оформление блока оплаты
|
||||
|
||||
## Description
|
||||
Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
|
||||
На странице «Заказ оформлен» покупатель видит карточку оплаты: логотип MONETA.RU, описание оплаты из настроек, сумму «К оплате», кнопку «Оплатить <сумма>» и пояснение о переходе на защищённую страницу MONETA.RU. Карточка собирается по шаблону `phpshop/modules/moneta/templates/payment_forma.tpl`, стили — `templates/moneta.css`, логотип — `templates/moneta.svg`; их можно изменить под тему магазина:
|
||||
|
||||
## Badges
|
||||
On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
|
||||
| Переменная | Что подставляется |
|
||||
|-----------------------|---------------------------------------------------------------------------------------------------|
|
||||
| `@payment_info@` | «Описание оплаты» из настроек модуля — обычный текст, переносы строк сохраняются |
|
||||
| `@payment_info_hide@` | `moneta-hide`, если описание пустое или заказ сейчас нельзя оплатить |
|
||||
| `@moneta_total@` | Сумма к оплате, как её пишет витрина: `18 500` и знак рубля темы (`<span class=rubznak>p</span>`) |
|
||||
| `@moneta_total_hide@` | `moneta-hide`, если заказ сейчас нельзя оплатить, — скрывает сумму и пояснение |
|
||||
| `@payment_forma@` | Форма с кнопкой «Оплатить» или текст о состоянии заказа |
|
||||
|
||||
## Visuals
|
||||
Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
|
||||
Переменные `@payment_info@` и `@payment_forma@` — те же, что во встроенном модуле PHPShop, поэтому шаблон от него подойдёт. Пути к файлам модуля в шаблоне пишутся без начального слэша (`phpshop/modules/...`) — витрина PHPShop сама делает их абсолютными. Шаблон и стили лежат в каталоге модуля: **обновление модуля их перезапишет** — сохраните свою версию перед обновлением.
|
||||
|
||||
## Installation
|
||||
Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
|
||||
## 🔧 Настройка счёта в личном кабинете MONETA.RU
|
||||
|
||||
## Usage
|
||||
Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
|
||||
1. 📝 [Зарегистрируйтесь](https://payanyway.ru/partnerRegistration.htm) в платёжной системе PayAnyWay и заполните все
|
||||
необходимые данные. Дождитесь проверки аккаунта и создайте **расширенный счет**.
|
||||
|
||||
## Support
|
||||
Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
|
||||
2. ⚙️ Заполните настройки расширенного счета (раздел **«Мой счет» → «Управление счетами» → «Редактировать счет» →
|
||||
«Показать дополнительные поля»**):
|
||||
|
||||
## Roadmap
|
||||
If you have ideas for releases in the future, it is a good idea to list them in the README.
|
||||
| Параметр | Значение |
|
||||
|------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| **Псевдоним** | любой, например `Монета` |
|
||||
| **Тестовый режим** | `Нет` (как в настройке модуля) |
|
||||
| **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** | Оставить пустым |
|
||||
|
||||
## Contributing
|
||||
State if you are open to contributions and what your requirements are for accepting them.
|
||||
> ⚠️ **Важно!** Для кириллического домена PayURL и CheckURL должны быть указаны в
|
||||
> кодировке [Punycode](https://2ip.ru/punycode/).
|
||||
|
||||
For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
|
||||
3. Для фискализации чеков по 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 магазина будет проходить через этот сервис транзитом.
|
||||
|
||||
You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
|
||||
## Журнал операций
|
||||
|
||||
## Authors and acknowledgment
|
||||
Show your appreciation to those who have contributed to the project.
|
||||
**«Модули»** -> **«Монета»** -> **«Журнал операций»**: каждое уведомление MONETA.RU (проверка заказа и оплата) с ответом модуля. Код проверки целостности и подписи в журнал не пишутся.
|
||||
|
||||
## License
|
||||
For open source projects, say how it is licensed.
|
||||
На странице — 500 последних записей, по ним работают поиск и сортировка таблицы. Записи одного заказа за всё время находит поле над таблицей: введите номер заказа (`33-57`) или целиком `MNT_TRANSACTION_ID` из личного кабинета MONETA.RU.
|
||||
|
||||
## Project status
|
||||
If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
|
||||
На что обратить внимание:
|
||||
|
||||
- **«Вторая оплата оплаченного заказа»** — покупатель оплатил заказ дважды. Модуль вторую оплату не зачитывает, 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`.
|
||||
|
||||
## 📚 Полезные ресурсы
|
||||
|
||||
* [PHPShop](https://www.phpshop.ru/)
|
||||
* [PHP API](https://wiki.phpshop.ru/api/php-api)
|
||||
* [HTML Верстальщику](https://wiki.phpshop.ru/dizain/verstalshiku)
|
||||
* [Прайс-листы поставщиков в CSV](https://wiki.phpshop.ru/rabota-s-bazoi/import-i-eksport/csv)
|
||||
* [Ручное добавление каталогов, товаров](https://wiki.phpshop.ru/tovary/ruchnoe-dobavlenie-tovarov)
|
||||
* [Установка на хостинг](https://wiki.phpshop.ru/ustanovka-i-obnovlenie/ustanovka-na-khosting#ustanovka-cherez-arhiv-v-ruchnom-rezhime)
|
||||
* [Разработчикам](https://wiki.phpshop.ru/moduli/razrabotchikam/)
|
||||
|
||||
---
|
||||
|
||||
**✅ Модуль настроен, приятных платежей!** 💰🎉
|
||||
|
||||
Reference in New Issue
Block a user