Полный возврат средств на 1С-Битрикс: настройка API, чеков и 54-ФЗ

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Полный возврат средств на 1С-Битрикс: настройка API, чеков и 54-ФЗ
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

Возврат средств — операция, которая в Битриксе часто вызывает ошибки: зависшие статусы, дубли чеков, нарушение 54-ФЗ. Особенно когда сроки эквайера вышли, но клиент требует деньги назад. За 10 лет мы провели более 50 интеграций эквайеров и столкнулись со всеми типичными проблемами: неправильный токен, неверный формат суммы, отсутствие чека возврата. Часто разработчики забывают про лимиты API — это приводит к блокировке. В этом материале разберём, как настроить автоматизированный возврат без ручной работы и штрафов, на примере Тинькофф, ЮКассы, Сбербанка. Мы проектируем логику с учётом всех edge cases: частичный возврат, отмена платежа до подтверждения, возврат комиссии эквайера. Наша цель — чтобы возврат проходил в один клик для менеджера и без ошибок со стороны платёжной системы. Получите консультацию по автоматизации возвратов.

Временные ограничения на возврат

Разные эквайеры имеют разные сроки, в которые возврат технически возможен:

Эквайер Срок возврата Метод после срока
Тинькофф До 365 дней Ручной возврат через банк
ЮКасса До 365 дней Через поддержку ЮКасса
Сбербанк До 3 лет Через личный кабинет
CloudPayments До 365 дней Запрос в поддержку

Если срок прошёл — возврат делается банковским переводом вручную. Платёжная система здесь не участвует.

Типичные ошибки при настройке возврата:

  • Неверный токен или подпись запроса.
  • Пропущен чек возврата (нарушение 54-ФЗ).
  • Превышение лимита суммы возврата.
  • Зависший статус заказа из-за отсутствия обработки ответа.

Пошаговая инструкция настройки возврата

  1. Определите эквайер и его API. У каждого свой протокол и требования к подписи запросов.
  2. Разработайте единую функцию-обёртку. Она будет вызывать нужный API по ключу gateway.
  3. Настройте проверку лимитов. У Тинькофф, например, максимальная сумма возврата не может превышать первоначальную.
  4. Подключите фискализацию. Сформируйте чек возврата с теми же позициями, что и в исходном чеке.
  5. Протестируйте все сценарии: полный, частичный возврат, отмену до подтверждения и обработку ошибок.

Автоматизация сокращает время обработки возврата с 2 часов в день (при 100 возвратах) до 5 минут — экономия до 96% времени менеджера. Средняя сумма возврата по нашим проектам — от 1 500 до 50 000 руб. Экономия от автоматизации достигает 500 000 руб. в год для крупного магазина.

Как настроить полный возврат через API?

Вместо трёх отдельных скриптов используем обёртку, которая вызывает нужный API в зависимости от эквайера. Так код легче поддерживать и расширять.

function processRefund(string $gateway, int $paymentId, string $externalId, ?float $amount = null): void
{
    switch ($gateway) {
        case 'tinkoff':
            $params = [
                'TerminalKey' => TINKOFF_TERMINAL,
                'PaymentId'   => $externalId,
            ];
            $params['Token'] = tinkoffSign($params, TINKOFF_SECRET);
            $result = tinkoffPost('/v2/Cancel', $params);
            if ($result['Status'] === 'REFUNDED') {
                setPaymentRefunded($paymentId);
            }
            break;

        case 'yookassa':
            $refund = $client->createRefund([
                'payment_id' => $externalId,
                'amount' => [
                    'value' => number_format($amount, 2, '.', ''),
                    'currency' => 'RUB',
                ],
                'receipt' => buildRefundReceipt($order),
            ], uniqid('', true));
            if ($refund->getStatus() === 'succeeded') {
                setPaymentRefunded($paymentId);
            }
            break;

        case 'sberbank':
            $params = [
                'userName' => SBER_LOGIN,
                'password' => SBER_PASSWORD,
                'orderId' => $externalId,
                'amount' => (int)($amount * 100),
            ];
            $response = file_get_contents(
                'https://securepayments.sberbank.ru/payment/rest/refund.do?' . http_build_query($params)
            );
            $result = json_decode($response, true);
            if ($result['errorCode'] === '0') {
                setPaymentRefunded($paymentId);
            }
            break;
    }
}

Почему важно обновлять статус заказа в Битрикс?

Без корректного обновления статуса заказ останется оплаченным. Это приводит к повторной отправке или некорректному учёту. Используем стандартный API Bitrix\Sale\Payment:

function setPaymentRefunded(int $paymentId): void
{
    $payment = Bitrix\Sale\Payment::loadById($paymentId);
    if (!$payment) return;

    $payment->setPaid('N');
    $payment->setField('PS_STATUS', 'Y');
    $payment->setField('PS_STATUS_CODE', 'refunded');
    $payment->setField('PS_STATUS_MESSAGE', 'Возврат от ' . date('d.m.Y H:i'));
    $payment->save();

    $order = $payment->getCollection()->getOrder();
    // Опционально: переводим заказ в статус "Возврат"
    $order->setField('STATUS_ID', 'RF');
    $order->save();

    sendRefundNotification($order, $payment->getSum());
}

Что входит в настройку возврата?

При заказе настройки возврата на 1С-Битрикс мы предоставляем:

  • Анализ текущей интеграции эквайера и схемы платежей.
  • Разработку единой API-обёртки для всех поддерживаемых платёжных систем.
  • Настройку формирования чека возврата в соответствии с 54-ФЗ.
  • Интеграцию с онлайн-кассой (АТОЛ, Штрих-М и др.) для автоматической отправки чеков.
  • Обновление статусов заказов и отправку уведомлений покупателям.
  • Опционально — добавление кнопки «Вернуть оплату» в административную панель.
  • Тестирование всех сценариев, включая частичный возврат и обработку ошибок.
  • Документацию по новой функциональности.

Сроки — от 0.5 до 3 дней под ключ. Оценим ваш проект бесплатно. Закажите настройку возврата под ключ.

Как корректно сформировать чек возврата?

Если касса подключена — без чека возврата API отклонит запрос. Чек зеркально повторяет оригинальный. Подробнее о требованиях 54-ФЗ.

function buildRefundReceipt(Bitrix\Sale\Order $order): array
{
    $receipt = ['customer' => ['email' => getBuyerEmail($order)], 'items' => []];

    foreach ($order->getBasket() as $item) {
        $receipt['items'][] = [
            'description' => $item->getField('NAME'),
            'quantity' => $item->getQuantity(),
            'amount' => [
                'value' => number_format($item->getPrice(), 2, '.', ''),
                'currency' => 'RUB',
            ],
            'vat_code' => getItemVatCode($item),
            'payment_subject' => 'commodity',
            'payment_mode' => 'full_payment',
        ];
    }

    // Доставка как отдельная позиция
    $deliveryPrice = $order->getDeliveryPrice();
    if ($deliveryPrice > 0) {
        $receipt['items'][] = [
            'description' => 'Доставка',
            'quantity' => 1,
            'amount' => ['value' => number_format($deliveryPrice, 2, '.', ''), 'currency' => 'RUB'],
            'vat_code' => 1,
            'payment_subject' => 'service',
            'payment_mode' => 'full_payment',
        ];
    }

    return $receipt;
}

Частичный возврат и обработка ошибок

Частичный возврат — частая потребность при отмене нескольких позиций. Для ЮКассы это штатная возможность: в поле amount передаётся сумма возврата. Для Тинькофф — только полный возврат подтверждённого платежа. При частичном возврате важно проверять лимиты и корректировать остаток суммы. Обработка ошибок: каждый API возвращает разные коды. В нашей функции мы логируем каждый ответ и в случае неудачи отправляем оповещение администратору. Кэширование запросов к API по ключу платежа предотвращает повторные списания. Также добавляем проверку на существующий возврат, чтобы избежать двойных операций.

Интерфейс для менеджера

Стандартный интерфейс Битрикс позволяет инициировать возврат через карточку заказа. Если нет — добавляем кнопку «Вернуть оплату» через кастомное действие в административной части:

// local/templates/admin/sale_order_detail/refund_button.php
if ($order->isPaid() && $order->getField('STATUS_ID') !== 'RF') {
    echo '<a href="/local/admin/refund.php?order_id=' . $order->getId() . '
         class="adm-btn adm-btn-red">Вернуть оплату</a>';
}

Сроки настройки

Задача Срок
Полный возврат без фискализации 0.5–1 день
Полный возврат + чек возврата (54-ФЗ) 1–3 дня
Интерфейс в административной панели 0.5–1 день

Автоматизация возврата через API в 10 раз быстрее ручного ввода данных в личном кабинете банка. Свяжитесь с нами, чтобы обсудить настройку возвратов для вашего проекта. Получите консультацию по интеграции эквайеров с автоматической фискализацией. Наш опыт — более 10 лет работы с Битриксом и более 50 интеграций с платёжными системами. Мы гарантируем соблюдение 54-ФЗ и полную автоматизацию процесса. Закажите настройку автоматического возврата для вашего Битрикс-проекта. Наши инженеры интегрируют любой эквайер с полной фискализацией.

Как настроить возврат товаров на 1С-Битрикс?

Типичная картина: менеджер открывает заказ в /bitrix/admin/sale_order_view.php, вручную меняет статус, звонит на склад, потом лезет в 1С формировать документ «Возврат товаров от покупателя». На один возврат — 20–30 минут. При 15 возвратах в день один человек занят только этим. Наш подход ускоряет цикл в 8 раз: от кнопки «Оформить возврат» в личном кабинете до проводки в 1С и чека возврата по 54-ФЗ.

Почему стандартный процесс возврата неэффективен?

В Битриксе из коробки нет отдельной сущности «возврат». Есть статусы заказа в b_sale_status, есть отмена через CSaleOrder::CancelOrder(), но полноценного workflow с частичными возвратами, обменами и обратной логистикой — нет. Приходится строить.

  • Частичный возврат — клиент хочет вернуть 2 из 5 позиций. Стандартный CancelOrder отменяет заказ целиком. Нужна кастомная логика через CSaleBasket и пересчёт CSaleOrder::Update.
  • Остатки разъезжаются — товар приехал на склад, но в b_catalog_store_product его нет, потому что менеджер забыл оприходовать. На сайте — «Нет в наличии», хотя коробка стоит на полке.
  • Возврат денег — ЮKassa, CloudPayments, Тинькофф — у каждого свой метод рефанда, свои таймауты, своя обработка ошибок. Ручной рефанд через личный кабинет платёжки — рутина.
  • 54-ФЗ — чек возврата с признаком расчёта ВОЗВРАТ ПРИХОДА должен уйти на ОФД. Без автоматизации менеджер формирует его вручную в кассовом ПО.

Что мы строим

Личный кабинет покупателя — self-service возврат

Кастомный раздел в /personal/returns/, интегрированный с sale.personal.order.list. Покупатель делает всё сам:

  • выбирает заказ из b_sale_order, видит список позиций из b_sale_basket;
  • отмечает конкретные товары, указывает причину из справочника (свойство инфоблока RETURN_REASONS) или пишет свободный текст;
  • загружает фото через CFile::SaveFile() — брак, повреждения при доставке;
  • выбирает способ возврата: курьер (СДЭК API), ПВЗ, Почта России;
  • указывает куда вернуть деньги: на карту (рефанд через платёжку), на внутренний счёт (CSaleUserAccount), обмен на другой товар;
  • видит статус заявки в реальном времени — через кастомные статусы в b_sale_status_lang.

Админка менеджера — без лишних кликов

Отдельный раздел на базе \Bitrix\Main\Engine\Controller:

  • очередь заявок с фильтрами: статус, сумма, причина, дата, менеджер. Грид на CAdminList или кастомный React-компонент;
  • вся информация по заявке на одном экране: заказ, клиент, история переписки, фото, документы;
  • действия в один клик: одобрить, отклонить, запросить фото, передать на согласование;
  • маршрутизация: возврат свыше порога (настраивается в b_option) уходит руководителю через бизнес-процесс модуля bizproc;
  • автогенерация акта возврата и возвратной накладной — PDF через mPDF или TCPDF.

Автоматизация — минимум ручных операций

  • Возврат до настраиваемого порога (например, 3000 ₽) — автоодобрение через обработчик события OnSaleOrderSaved.
  • Чек возврата 54-ФЗ: вызов \Bitrix\Sale\Cashbox\Manager::addChecks() с типом Check::RETURN_TYPE. Уходит на ОФД автоматически.
  • Цепочка уведомлений: email через CEvent::Send(), SMS через SMS-шлюз, push.
  • После приёмки на складе — автоматическое оприходование через CCatalogStoreDocsBarcode и обновление b_catalog_store_product.
  • Синхронизация с 1С: документ «Возврат товаров от покупателя» создаётся автоматически при обмене через \Bitrix\Sale\Exchange.
  • Бонусные баллы, начисленные за покупку — списание через CSaleUserAccount::UpdateAccount() с отрицательной суммой.
  • Агенты обрабатывают очередь заявок, эпилог шаблона подгружает статусы в личный кабинет в реальном времени.

Как настроить интеграцию с платежными системами без ошибок?

Каждая платёжка — свой API рефанда, свои ограничения по срокам, свои коды ошибок. Опыт сертифицированных разработчиков Битрикс позволяет обработать все сценарии:

  • ЮKassaPOST /v3/refunds, полный и частичный рефанд. Важно: рефанд возможен только в течение 365 дней после платежа. Автоматический чек возврата через receipt API.
  • CloudPayments — метод refund по TransactionId. Рефанд на карту за 1-5 рабочих дней. Если 3DS-платёж — рефанд может занять до 30 дней на стороне банка.
  • Тинькофф ЭквайрингCancel по PaymentId. Если оплата в рассрочку — рефанд пересчитывает график, и это отдельная логика в обработчике sale.paysystem.handler.
  • Apple Pay / Google Pay — рефанд идёт через тот же эквайринг, токен привязан к транзакции.
  • Наложенный платёж — рефанд невозможен через платёжку, нужны банковские реквизиты покупателя. Отдельная форма в ЛК.
  • Внутренний счётCSaleUserAccount::Pay() с зачислением суммы. Мотивируем повышенным коэффициентом (x1.1) — 10% бонус за выбор возврата на баланс вместо карты.

Гарантируем корректную обработку каждого кода ошибки через кастомные обработчики sale.paysystem.handler.

Соответствие законодательству — без вариантов

  • ЗоЗПП, ст. 26.1 — дистанционная продажа: отказ в любой момент до получения, 7 дней после. Система контролирует сроки автоматически и предупреждает менеджера о приближении дедлайна. Подробнее о законе — статья 26.1 ЗоЗПП.
  • 14 дней — возврат товара надлежащего качества. Проверка: date_insert заказа + дата доставки из трекинга + 14 дней. Если просрочено — заявка отклоняется с пояснением.
  • 54-ФЗ — чек возврата обязателен. Федеральный закон №54-ФЗ.
  • Документооборот — акт возврата, заявление покупателя, акт приёмки — шаблоны в системе, заполняются автоматически из данных заказа.

Аналитика возвратов — данные для принятия решений

Кастомный дашборд в админке, данные из b_sale_order + кастомная таблица возвратов:

  • процент возвратов по категориям, брендам, менеджерам, периодам;
  • топ причин возврата. Если «Не соответствует описанию» в топ-3 — проблема в карточках товара, а не в клиентах;
  • финансовый срез: сумма возвратов, средний чек возврата, соотношение рефанд/обмен/баланс;
  • алерты: если процент возвратов по конкретному SKU превысил 15% — уведомление категорийному менеджеру.

Обмен и замена — сохраняем продажу

Не каждый возврат — потерянная выручка. Обмен через CSaleOrder::Update с пересчётом корзины:

  • замена на тот же товар другого размера/цвета — новая позиция в b_sale_basket, старая — на возврат;
  • обмен на другой товар с доплатой — автоматический расчёт разницы, допплата через тот же платёжный метод;
  • генерация накладной на отправку обменного товара через API службы доставки.

Обратная логистика — интеграции

  • СДЭКPOST /v2/orders с type: 2 (возврат). Автоматическая заявка на забор, трекинг через webhook.
  • Boxberry — API парсельшопов для выбора ПВЗ возврата.
  • Почта России — формирование обратной накладной через API отправлений.
  • Трекинг обратной посылки в личном кабинете — статусы подтягиваются через агента на cron.

Как проходит настройка под ключ

  1. Аудит текущего процесса — анализируем бизнес-логику, фиксируем статусы и интеграции.
  2. Проектирование workflow — схема статусов, правила автоодобрения, маршрутизация.
  3. Разработка ЛК покупателя и админки — компоненты, гриды, формы, REST-контроллеры.
  4. Интеграция с платёжками и 1С — настройка каждого обработчика, тест рефандов.
  5. Автоматизация 54-ФЗ и уведомлений — подключение ОФД, шаблонов писем, SMS.
  6. Интеграция служб доставки — СДЭК, Boxberry, Почта России.
  7. Тестирование — полный цикл: заказ → возврат → рефанд → чек → 1С.
  8. Обучение сотрудников и передача документации.

Результаты внедрения

Блок Что получаете
Документация Техническое задание, описание workflow, схему интеграций
Код и конфигурация Готовые компоненты, настройки инфоблоков, HL-блоков, статусов, прав
Интеграция с платежками Подключение ЮKassa, CloudPayments, Тинькофф, Apple Pay/Google Pay
Обмен с 1С Настройка CommerceML, документ возврата в 1С
Автоматизация 54-ФЗ Чек возврата через ОФД, фискализация
Обучение Видеоинструкции для менеджеров и администраторов
Поддержка 1 месяц гарантийного сопровождения после внедрения

Чек-лист проверки перед запуском

  • Проверен рефанд через каждую платёжку (частичный и полный).
  • Тест 54-ФЗ: чек возврата корректен, уходит в ОФД.
  • Обмен с 1С: документ «Возврат товаров от покупателя» создаётся без ошибок.
  • ЛК покупателя: все поля, загрузка фото, выбор способа возврата.
  • Автоодобрение до порога срабатывает.
  • Уведомления (email/SMS/push) приходят.
  • Остатки после приёмки обновляются.
  • Аналитика считает метрики корректно.

Сроки внедрения

Компонент Сроки
ЛК покупателя (форма + статусы) 3-5 дней
Админка менеджера (грид + действия) 3-5 дней
Интеграция с платёжными системами 2-3 дня
Обмен с 1С (документ возврата) 3-5 дней
Автоматизация (54-ФЗ, уведомления, остатки) 2-3 дня
Обратная логистика (СДЭК, Boxberry) 2-3 дня
Итого 2-4 недели

Почему это окупается за месяц?

Сравните: ручная обработка возврата занимает 25 минут, после автоматизации — 3 минуты. Это в 8 раз быстрее. При 15 возвратах в день высвобождается целая ставка менеджера. Экономия на зарплате — до 1.2 млн рублей в год. Плюс рост повторных покупок: клиент, которому легко вернуть товар, приходит снова.

Закажите настройку возвратов под ключ в вашем Битриксе. Свяжитесь с нами — получите бесплатную оценку проекта и коммерческое предложение в течение дня.