Skip to content

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

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

fix: payment_link в письме о новом заказе#458
Ibochkarev wants to merge 3 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).

@Ibochkarev
Ibochkarev requested a review from biz87 July 27, 2026 03:56
@Ibochkarev
Ibochkarev force-pushed the fix/issue-407-payment-link-notification branch from 264e85d to effdf45 Compare July 28, 2026 04:49
@Ibochkarev Ibochkarev added the bug Something isn't working label Jul 28, 2026
@Ibochkarev
Ibochkarev force-pushed the fix/issue-407-payment-link-notification branch from effdf45 to beb961f Compare July 29, 2026 02:05
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
Share payStatus parsing and eligibility rules between StatusChangedNotification
and ms3_get_order via PaymentLinkResolver. Add PaymentLinkResolverResolveTest
with stub handler (no MODX bootstrap).
@biz87

biz87 commented Jul 29, 2026

Copy link
Copy Markdown
Member

Требуется ребейз на beta: пересечение с только что влитым #485.

Конфликт по OrderStatusService::getPaymentLink():

Подход этого PR (выделенный PaymentLinkResolver + кэш на уведомление + фикс плейсхолдера payment_link в письме) архитектурно полнее, так что при ребейзе он заменяет in-place фикс из #485 — это ожидаемо и правильно. Нужно просто снять метод, который #485 успел починить.

Второй возможный конфликт — ServiceRegistry.php: #485 удалил мёртвую запись ms3_config_manager, а этот PR добавляет ms3_payment_link_resolver. При ребейзе свести оба изменения (удаление + добавление).

После ребейза — прогнать composer stan (PHPStan-гейт из #433 теперь активен) и composer ci:php.

@Ibochkarev
Ibochkarev force-pushed the fix/issue-407-payment-link-notification branch from beb961f to ec010bc Compare July 29, 2026 11:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

2 participants