Как сделать Автоматический возврат средств?

Ссылка скопирована
1 ответ

Добрый день. Есть мысли сделать Автоматический возврат денег за весовой товар на сайте WooCommerce. Вся соль заключается в том, что есть весовой товар, точный вес товара мы не знаем пока на складе не отгрузят. Человек оформляет заказ на 5кг, по факту ему приходит 4.8кг. как реализовать возврат в деньгах этих 200гр? Это на стороне платежного сервиса должно же как-то быть по идее? Юкасса например может такое делать?

Дополнительно:

Вот даже интересно, что вы будете делать, если ваши жопоруки на складе насыплют 5,2 кг.

  • Больше не сделают
  • Дмитрий Сериков,

    Больше не сделают

    Великолепный план, надёжный, как швейцарские часы.

  • Ответы:

    В WP WooCommerce реализована возможность делать частичный возврат на холдированном платеже:
    https://yookassa.ru/docs/support/payments/onboardi...
    То есть платеж не автоматически зачисляется на счет магазина, а требует подтверждения или отклонения. Вот на этом этапе можно подтвердить платеж, но частично. Остаток вернется покупателю.
    У платежей есть срок холдирования от 6 часов до 7 дней, в зависимости от метода оплаты: https://yookassa.ru/developers/payment-acceptance/...
    Автоматического возврата в ЮKassa нет.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция Security Ответ

    Автоматический возврат средств в WooCommerce возможен только если платёжный шлюз поддерживает API refund. Сам WooCommerce умеет создать возврат в заказе, но деньги реально вернутся покупателю только через платёжную систему: Stripe, PayPal, ЮKassa, CloudPayments и т.п. Если шлюз не поддерживает возвраты через API, будет только ручная отметка возврата в заказе.

    Проверьте в заказе: WooCommerce → Заказы → нужный заказ → кнопка «Возврат». Если при возврате есть вариант «Вернуть через платёжный шлюз», значит автоматический возврат поддерживается. Если доступен только ручной возврат, нужно делать возврат в кабинете платёжной системы.

    Для программного возврата используется wc_create_refund():

    $order = wc_get_order($order_id);
     
    if ($order && $order->get_total() > 0) {
        $refund = wc_create_refund([
            'amount'         => $order->get_total(),
            'reason'         => 'Автоматический возврат по условию',
            'order_id'       => $order->get_id(),
            'refund_payment' => true,
            'restock_items'  => true,
        ]);
     
        if (is_wp_error($refund)) {
            error_log($refund->get_error_message());
        }
    }

    $order = wc_get_order($order_id); if ($order && $order->get_total() > 0) { $refund = wc_create_refund([ 'amount' => $order->get_total(), 'reason' => 'Автоматический возврат по условию', 'order_id' => $order->get_id(), 'refund_payment' => true, 'restock_items' => true, ]); if (is_wp_error($refund)) { error_log($refund->get_error_message()); } }

    Ключевой параметр здесь refund_payment. Если он true, WooCommerce попробует отправить возврат в платёжный шлюз. Но это сработает только при поддержке метода process_refund в активном gateway.

    Не запускайте такие возвраты без жёстких условий: проверяйте статус заказа, сумму, валюту, срок, роль пользователя и не был ли возврат уже создан. Для автологики лучше писать отдельный небольшой плагин и логировать результат, потому что ошибка в таком коде напрямую влияет на деньги.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно