msGetnet

Оплата картой через эквайринг Getnet для miniShop2
Автор дополнения
Артур Шевченко
Пакетов
31
Закачек
3 502
Обычно отвечает в течение суток
Автор дополнения
Пакетов
31
Закачек
3 502
Обычно отвечает в течение суток
Версия 1.0.18-alpha
Дата выпуска 05.08.2026
Загрузки 0
Просмотры 97
Внимание, этот компонент несовместим с MODX 3.
Что делает
  • Добавляет в miniShop2 способ оплаты банковской картой через эквайринг Getnet.
  • Работает по Payment Link API: магазин запрашивает ссылку на оплату, покупатель платит на стороне банка.
  • Результат оплаты приходит вебхуком — статус заказа меняется автоматически, без ручной сверки.
Особенности
  • Поддержана оплата частями: сумма платежа считается по числу взносов с округлением по формату цен miniShop2.
  • Валюта и форматирование берутся из настроек магазина, отдельной синхронизации не нужно.
  • Тестовый и боевой контуры переключаются настройкой, ключи — в системных настройках MODX.
  • Каждый запрос и ответ пишется в лог: разбор спорной оплаты не превращается в гадание.
Требования
  • MODX Revolution 2.5+, PHP 7.4+
  • miniShop2
  • Договор с Getnet и доступ к их API

1.0.18-alpha

  • Срок жизни платёжной ссылки настраивается: системная настройка msgetnet_link_lifetime_minutes (минут, area «Основные», по умолчанию пусто). msGetnet::getExpiration() считает expiration = now(UTC) + N минут и форматирует в ISO 8601 UTC (Y-m-d\TH:i:s.v\Z, напр. 2028-12-30T13:18:27.232Z) — формат подтверждён по swagger Getnet. При 0/пусто отправляется пустой expiration — Getnet применяет свой срок по умолчанию (поведение до этой версии сохранено). Поле expiration в getRequestBody() больше не захардкожено пустым. Лексикон ru/en/pt. ВНИМАНИЕ: перед сборкой настройку msgetnet_link_lifetime_minutes создать в менеджере стенда (namespace msgetnet) — сборка тянет настройки из БД стенда.

1.0.17-alpha

  • FIX: приём боевого вебхука Getnet. По первому реальному вызову подтверждено, что Getnet шлёт вебхук GET-ом с параметрами в query string (тело пустое) — раньше handleRequest() парсил только JSON-тело php://input, поэтому уходил в ветку «пустое тело» и заказ никогда не доходил до смены статуса (отсюда «пустой вебхук» из 1.0.16). Теперь webhook.php отдаёт сервису и тело, и $_GET; источник выбирается так: непустое валидное JSON-тело имеет приоритет, иначе берётся query (в лог пишется source=body|query). Ветка ошибки срабатывает только когда пусты ОБА источника.
  • FIX: сопоставление заказа по order_id. Getnet возвращает наш order_prefix (= msOrder.num) с дописанным суффиксом «.{токен}.{seq}» (напр. «2606-1195.Fwf1U22ia.0»). Раньше findOrder() искал msOrder по полной строке и не находил заказ. Добавлен extractOrderNum() — номер берётся до первой точки; findOrder() матчит по нормализованному num, затем по полному order_id, затем по числовому id. Воронка process_uid теперь считается по нормализованному num и сходится с созданием ссылки.
  • В properties.msgetnet дополнительно сохраняются поля боевого вебхука (для сверки и возвратов): number_installments, acquirer_transaction_id, authorization_timestamp, authorization_code, terminal_nsu, brand.

1.0.16-alpha

  • FIX: вебхук Getnet логирует пустое тело запроса. Раньше при пустом php://input webhook.php молча делал return — нельзя было отличить «Getnet не звонил» от «звонил, но тело потерялось» (enable_post_data_reading=Off, multipart, GET-проба). Теперь webhook.php безусловно отдаёт тело сервису, а handleRequest() пишет в mxLogger (level error, тег webhook) диагностику: method, content_type, content_length, заголовки. Логирование консистентно с остальными этапами (воронка process_uid, учёт msgetnet_log_level), без прямого modX::log в обход mxLogger.

1.0.15-alpha

  • Минимальный уровень логирования: настройка msgetnet_log_level (debug|info|warning| error, по умолчанию error; единый приёмник mxLogger, включено из коробки). Logger учитывает порог — записи ниже отбрасываются ещё до резолва mxLogger. Консистентно с mxLogger.min_level (строковое значение, textfield). msGetnet передаёт уровень в Logger; лексикон ru/en/pt. ВНИМАНИЕ: перед сборкой настройку msgetnet_log_level создать в менеджере (namespace msgetnet) — сборка тянет настройки из БД стенда.

1.0.14-alpha

  • Логи msGetnet группируются в воронку по заказу: processuid = «msgetnet»+md5(num) (12 симв.). Записи создания ссылки (auth/payment/сохранение) и прилетевший позже вебхук того же заказа склеиваются одним process_uid (order_id вебхука = order_prefix = msOrder.num) — в mxLogger виден единый процесс оплаты. Добавлен Logger::setProcess(); устанавливается в getPaymentLink() и handleRequest().

1.0.13-alpha

  • Вебхук Getnet теперь реально обрабатывает оплату: при status=APPROVED заказ помечается оплаченным (ms2_status_paid) через miniShop2->changeOrderStatus (события msOnBeforeChangeOrderStatus/msOnChangeOrderStatus, запись в ms2_order_log, уведомления). Защита от повторной обработки (если уже оплачен) и сверка суммы вебхука с суммой заказа (несовпадение — warning, не блокирует).
  • Исправлен поиск заказа в вебхуке: было $request['orderID'] (такого ключа нет) → теперь по order_id/order_prefix и поиску msOrder по num (= order_prefix, который мы отправляем при создании ссылки), с фолбэком по числовому id.
  • Невалидный JSON в теле вебхука больше не теряется молча: пишется error с json_error, сырым телом и заголовками — чтобы увидеть реальный формат вызова.
  • Сохраняются ОБА идентификатора под правильными ключами: properties.msgetnet.link_ids[] (link_id из создания ссылки) и properties.msgetnet.payment_id (+ payment_status, payment_type — из вебхука). Старый ключ payment_ids (хранил link_id) убран.
  • Логи стали осмысленными и разнесены по тэгам поверх базового «msgetnet»: auth (токен), payment (создание ссылки), webhook (приём оплаты), http (debug — низкоуровневый дамп CURL). Ошибки — level error, аномалии — warning.
  • Клиент API Getnet создаётся лениво: приём вебхука больше не дёргает авторизацию Getnet впустую.

1.0.12-alpha

  • Логирование переведено на компонент mxLogger: записи идут под тегом «msgetnet» через сервис mxLogger (если он установлен). Файловый лог убран.
  • Если логирование включено (msgetnet_debug=1), а mxLogger не установлен — в журнал ошибок MODX пишется предупреждение (один раз на запрос): «Установите mxLogger или отключите логирование (msgetnet_debug)».
  • «Источник» в логах указывает на реальный код msGetnet (через опцию skip_classes mxLogger 1.0.0-rc2+), а не на класс-прокладку Logger.

1.0.11-alpha

  • Убраны выдуманные фолбэк-ключи (payment_link_id/payment_id/number/id) — у Getnet их нет. Идентификатор берётся только из реального поля link_id.

1.0.10-alpha

  • Идентификатор ссылки берётся из поля link_id ответа Getnet (раньше основным был payment_link_id). Остальные ключи оставлены фолбэком.

1.0.9-alpha

  • Фикс: msOrder (xPDOSimpleObject) не имеет setProperties/getProperties (есть только у modResource/modElement). Сохранение payment_ids переведено на json-поле properties через get()/set() — как в miniShop2. В 1.0.8 вызов падал бы с Call to undefined method.

1.0.8-alpha

  • При генерации Payment Link paymentId (payment_link_id) сохраняется в свойства заказа (namespace msgetnet, ключ payment_ids).
  • Если на один заказ создаётся несколько ссылок — хранятся все идентификаторы (без дублей).

1.0.7-alpha

  • Дефолт msgetnet_amount_multiplier изменён с 1 на 100 (центы) — под текущий аккаунт Getnet.

1.0.6-alpha

  • Блок payment вынесен в системные настройки: msgetnet_credit_enable/_authenticated/_not_authenticated, msgetnet_debit_enable/_authenticated/_not_authenticated/_caixa_virtual_card, msgetnet_wallet_enable, msgetnet_pix_enable.
  • Исправление отсутствия рассрочки: режим аутентификации credit должен совпадать с enabled-products продавца. Дефолты: credit без 3DS (not_authenticated), debit с 3DS (authenticated).
  • Хелпер boolOption() для корректного чтения combo-boolean настроек ('0'/'1').
  • Множитель суммы вынесен в настройку msgetnet_amount_multiplier (1 = реалы, 100 = центы; по умолчанию 1).

1.0.5-alpha

  • Исправление 400 ValidationError при создании Payment Link: order.description и order.order_prefix больше не отправляются пустыми (Getnet их отклоняет). description = "Pedido ", order_prefix = .

1.0.4-alpha

  • Исправление: при апгрейде больше не перезаписываются name/logo/active/description способа оплаты msPayment — дефолты ставятся только при первой установке (resolver.payments.php). Сохраняются ручные настройки админа.

1.0.3-alpha

  • Включена рассрочка: max_installments в Payment Link берётся из настройки msgetnet_max_installments (1..12, по умолчанию 12).
  • Сниппет msGetnetInstallments — витринная подсказка «Até Nx de R$ X» с кэшем в партиции 'default' (чистится штатным «Очистить кэш»).
  • Параметр &price необязателен: без него выводится короткая фраза без суммы платежа («Até Nx no cartão de crédito»).
  • Защита от деления на ноль (clamp installments 1..12) и округление платежа по точности ms2_price_format (&round=round|ceil|floor).
  • Чанк tpl.msGetnet.installments + лексиконы msgetnet_installments_hint / msgetnet_installments_hint_short (pt/en/ru).
  • Сумма и валюта подсказки — через miniShop2->formatPrice() и ключ ms2_frontend_currency.
  • Консоль manage-getnet.php: команда manage-elements (создание категории и static-элементов) + настройка max_installments.

1.0.2-alpha

  • Исправление формата запроса OAuth: application/json → application/x-www-form-urlencoded.
  • Безопасная проверка access_token через empty() вместо прямого обращения.
  • Добавление order_prefix в тестовый запрос.

1.0.1-alpha

  • Перенос бизнес-логики из services/custom/ в src/.
  • Исправление неймспейсов: msPayspot → msGetnet.
  • Перенос composer.json и vendor/ в корень пакета.
  • Обновление путей автозагрузки во всех точках входа.
  • Исправление бага в Request.php ($this->logging → $this->logger).
  • Добавление требований к версии PHP в composer.json.
  • Добавление консольного интерфейса для тестирования API (test-api.php).

1.0.0-alpha

  • Первая сборка.

Последние обсуждения в сообществе MODX.pro