Вступить в клуб →
сложнаявопросREST API и интеграции

Заказ и сделка в CRM расходятся: HTTP-вызов внутри транзакции

DB::transaction(function () use ($order) {
    $order->save();
    $this->crm->createDeal($order); // внешний HTTP-запрос
});

По отчётам расхождение: иногда сделка в CRM есть, а заказа в вашей базе нет; иногда наоборот. Что действительно решает проблему?

  • Перенести вызов CRM в начало транзакции: если база потом откажет, сделка уже создана, и расхождение закроется ручной сверкой
  • Обернуть вызов CRM в try/catch и при ошибке выполнять компенсирующее удаление сделки — этого достаточно при любых сбоях процесса
  • Сохранять в одной транзакции заказ и запись-задание на отправку (outbox), а вызывать CRM отдельным воркером с повторами и ключом идемпотентности
  • Использовать распределённую транзакцию XA между вашей базой и HTTP-API партнёра: двухфазный коммит обеспечит атомарность

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела