Исправление синхронизации возвратов. Обновление рекомендуется всем, у кого включены возвраты (REFUNDS_ENABLED='true').
🐛 Что было сломано
При каждом запуске синхронизация возвратов падала с ошибкой ЮKassa:
[BadRequestError] {'description': 'Invalid request parameter',
'parameter': 'createdBefore;createdAfter',
'code': 'invalid_request'}
Платежи при этом обрабатывались нормально, но общий статус сервиса уходил в degraded, а контейнер — в unhealthy. В Telegram и на почту при каждом запуске приходило уведомление об ошибке.
Спасибо @gamers65 за подробный отчёт (#39).
🔍 Причина
ЮKassa принимает фильтры created_at.* только в ISO 8601 с суффиксом Z (по документации — 2018-07-18T10:51:18.139Z).
Сервис записывал checkpoint возвратов через datetime.now(timezone.utc).isoformat(), то есть в offset-нотации ...+00:00, и подставлял это значение в запрос как есть. Для платежей замена на Z выполнялась явно, поэтому они работали.
✅ Что исправлено
Все метки времени перед отправкой в ЮKassa приводятся к UTC с суффиксом Z общей функцией. Заодно корректно обрабатываются метки без таймзоны и в зоне, отличной от UTC.
Ничего делать руками не нужно: нормализация применяется и к уже сохранённым checkpoint'ам, поэтому состояние старого формата чинится само при первом запуске. Сбрасывать state или переустанавливать сервис не требуется.
📦 Обновление
cd /opt/yookassa-to-mynalog && sudo docker compose pull && sudo docker compose up -dПосле запуска статус вернётся в ok, а контейнер — в healthy.
Полный список изменений: 3.4.0...3.4.1