Skip to content

fix: payment_link в письме о новом заказе - #458

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-407-payment-link-notification
Open

fix: payment_link в письме о новом заказе#458
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-407-payment-link-notification

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

После перехода на NotificationManager плейсхолдер payment_link не заполнялся в письмах о смене статуса заказа (tpl.msEmail.new.customer), хотя шаблон по-прежнему ожидает {$payment_link}.

Добавлен PaymentLinkResolver: для статуса «Новый» (ms3_status_new) резолвит URL через PaymentService::loadPaymentHandler() и getPaymentLink(). StatusChangedNotification кэширует результат один раз на уведомление, чтобы не вызывать payment API при каждом обходе getPlaceholders().

Удалён неиспользуемый и сломанный OrderStatusService::getPaymentLink() (неверный аргумент конструктора payment handler). В PaymentService::loadPaymentHandler() добавлен loadCustomClasses('payment') для кастомных провайдеров.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #407

Как это было протестировано?

cd core/components/minishop3
php -l src/Services/Payment/PaymentLinkResolver.php          # exit 0
php -l src/Notifications/Order/StatusChangedNotification.php # exit 0
php -l src/Services/Payment/PaymentService.php               # exit 0
composer ci:php                                              # exit 0 (14 smoke tests, incl. PaymentLinkResolverTest)
  • Ручное тестирование
  • Автоматические тесты (composer ci:php)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: fix/issue-407-payment-link-notification
  • MODX: n/a (smoke без MODX)
  • PHP: 8.4

Скриншоты (если применимо)

Не применимо (backend / email placeholders).

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуется, новых UI-строк нет
  • PHPStan проходит без новых ошибок (локально; в CI пока нет)
  • ESLint проходит без ошибок — Vue не затронут
  • Обновлён CHANGELOG.md — по политике репозитория, только при релизе

Дополнительные заметки

  • Резолв ссылки выполняется только для ms3_status_new (не final, не paid).
  • Review: code-reviewer и thermo-nuclear — исправлен BLOCK (кэш + делегирование в PaymentService); security-review — BLOCK/HIGH не найдено.
  • Follow-up (не в scope): унификация gating с ms3_get_order.php (payStatus).

StatusChangedNotification now resolves the online payment URL once per
notification via PaymentLinkResolver and passes it to email templates.
Removes the broken unused OrderStatusService::getPaymentLink helper.

Closes #407
@Ibochkarev
Ibochkarev requested a review from biz87 July 27, 2026 03:56
Share payStatus parsing and eligibility rules between StatusChangedNotification
and ms3_get_order via PaymentLinkResolver. Add PaymentLinkResolverResolveTest
with stub handler (no MODX bootstrap).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant