> Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
При наличии реконсайл-джобы (reconciliation job), которая автоматически сверяет платежи, ручное исправление застрявших платежей требуется только в исключительных случаях - например, когда джоба не может разрешить конфликт из-за неоднозначных данных или ошибок в исходных записях.
Основной подход:
- Диагностика причины застревания. Сначала проверяем статус платежа в базе данных и логи реконсайл-джобы. Типичные причины: несоответствие суммы, отсутствие транзакции в платёжной системе, дубликаты или ошибки формата.
- Ручное вмешательство через админ-интерфейс или SQL. Для Go-сервиса лучше иметь эндпоинт (например,
POST /admin/payments/{id}/resolve), который принимает корректирующие данные (правильный статус, сумму, ID внешней транзакции). Пример:GOfunc (h *Handler) ResolvePayment(w http.ResponseWriter, r *http.Request) {var req struct {PaymentID string `json:"payment_id"`Status string `json:"status"`ExternalID string `json:"external_id,omitempty"`}// валидация, проверка правerr := h.repo.UpdatePayment(r.Context(), req.PaymentID, req.Status, req.ExternalID)if err != nil {http.Error(w, err.Error(), http.StatusInternalServerError)return}// после обновления можно вручную запустить реконсайл для этого платежаh.reconciliationJob.ProcessSinglePayment(r.Context(), req.PaymentID)w.WriteHeader(http.StatusOK)} - Синхронизация с реконсайл-джобой. После ручного исправления обязательно запускаем повторную сверку для этого конкретного платежа (как в примере выше), чтобы джоба подтвердила корректность и обновила связанные записи (например, баланс счёта).
- Логирование и аудит. Все ручные изменения должны логироваться с указанием оператора, времени и причины. Это критично для отладки и соответствия требованиям.
Важно: Ручное исправление - временная мера. Если такие случаи повторяются, нужно дорабатывать реконсайл-джобу: добавлять обработку краевых случаев, улучшать маппинг данных или увеличивать таймауты. В идеале, ручное вмешательство должно быть сведено к нулю.
> Похожие задачи по Go
Как хранится история переходов статусов платежей?
Вы используете один кластер или геораспределенную систему?
Как следить за работой оркестратора и какие метрики использовать для проверки корректности
Как задаются стратегии для каждого платежа: через API или иначе
> Похожие задачи по backend
Как хранится история переходов статусов платежей?
Вы используете один кластер или геораспределенную систему?
Как следить за работой оркестратора и какие метрики использовать для проверки корректности
Как задаются стратегии для каждого платежа: через API или иначе
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью