Как сделать Автоматический возврат средств?
Добрый день. Есть мысли сделать Автоматический возврат денег за весовой товар на сайте 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 нет.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Автоматический возврат средств в 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()); } }
Ключевой параметр здесь
refund_payment. Если онtrue, WooCommerce попробует отправить возврат в платёжный шлюз. Но это сработает только при поддержке методаprocess_refundв активном gateway.Не запускайте такие возвраты без жёстких условий: проверяйте статус заказа, сумму, валюту, срок, роль пользователя и не был ли возврат уже создан. Для автологики лучше писать отдельный небольшой плагин и логировать результат, потому что ошибка в таком коде напрямую влияет на деньги.