Автоматизация возврата платежей — важная задача для любого интернет-магазина или сайта с платным доступом на WordPress. Это позволяет быстро и без ошибок вернуть деньги клиенту в случае отмены заказа, отказа от услуги или рекламации. В этой статье подробно рассмотрим, как реализовать автоматический возврат платежей в WordPress с помощью плагинов и собственного кода.
Почему важен автоматический возврат платежей в WordPress
Ручное управление возвратами не только занимает время, но и увеличивает риск ошибок. Автоматизация позволяет:
- Обрабатывать возвраты быстрее и без участия оператора.
- Снижать вероятность ошибок при формировании возвратной транзакции.
- Повысить доверие клиентов за счет прозрачных и своевременных возвратов.
- Интегрировать возвраты с бухгалтерией и CRM системами.
Для WordPress есть множество платежных плагинов, которые поддерживают частичный и полный возврат средств, но не всегда они предлагают удобную автоматизацию. Давайте рассмотрим, как это можно сделать на примере плагина WooCommerce и кастомного кода.
Использование плагина WooCommerce для автоматических возвратов
Настройка возвратов в WooCommerce
WooCommerce поддерживает возвраты через админку, но чтобы сделать их автоматическими, нужен дополнительный функционал. Для этого можно использовать плагин WooCommerce Advanced Refunds, который расширяет стандартные возможности возврата.
После установки и активации плагина можно настроить:
- Автоматическую генерацию возвратов при отмене заказа.
- Интеграцию с платежными шлюзами для мгновенного возврата средств.
- Уведомления клиентов о статусе возврата.
Пример настройки автоматического возврата при отмене заказа
Для автоматизации возврата можно использовать хук woocommerce_order_status_changed, который срабатывает при смене статуса заказа. Добавим следующий код в файл functions.php вашей темы или в кастомный плагин:
function wppay_woocommerce_auto_refund( $order_id, $old_status, $new_status ) {
if ( $new_status === 'cancelled' ) {
$order = wc_get_order( $order_id );
if ( ! $order ) return;
// Проверяем, есть ли оплаченный заказ
if ( ! $order->is_paid() ) return;
// Создаем возврат
$refund = wc_create_refund( array(
'amount' => $order->get_total(),
'reason' => 'Автоматический возврат при отмене заказа',
'order_id' => $order_id,
'refund_payment' => true,
) );
if ( is_wp_error( $refund ) ) {
error_log( 'Ошибка возврата: ' . $refund->get_error_message() );
}
}
}
add_action( 'woocommerce_order_status_changed', 'wppay_woocommerce_auto_refund', 10, 3 );Этот код автоматически создает полный возврат средств при смене статуса заказа на "cancelled". Функция wc_create_refund интегрирована с платежными шлюзами WooCommerce, и если они поддерживают возвраты через API, деньги вернутся клиенту автоматически.
Автоматизация возвратов с использованием вебхуков платежных систем
Многие платежные сервисы (например, Яндекс.Касса, Робокасса, Stripe) поддерживают вебхуки — уведомления о событиях платежа. Их можно использовать для автоматического запуска возврата при определенных условиях.
Для примера рассмотрим, как получить уведомление о возврате из Stripe через вебхук и обновить статус заказа в WordPress.
Пример обработки вебхука Stripe в WordPress
Создаем endpoint для приема вебхуков, например, в файле wp-content/plugins/wppay-webhook-handler/wppay-webhook-handler.php:
add_action( 'rest_api_init', function () {
register_rest_route( 'wppay/v1', '/stripe-webhook', array(
'methods' => 'POST',
'callback' => 'wppay_handle_stripe_webhook',
'permission_callback' => '__return_true',
) );
} );
function wppay_handle_stripe_webhook( WP_REST_Request $request ) {
$payload = $request->get_body();
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'] ?? '';
// Проверка подписи вебхука (используйте библиотеку Stripe для PHP)
// ...
$event = json_decode( $payload );
if ( ! $event ) {
return new WP_REST_Response( 'Invalid payload', 400 );
}
if ( $event->type === 'charge.refunded' ) {
$charge = $event->data->object;
$order_id = wppay_get_order_id_by_payment_intent( $charge->payment_intent );
if ( $order_id ) {
$order = wc_get_order( $order_id );
if ( $order ) {
$order->update_status( 'refunded', 'Автоматический возврат через Stripe' );
}
}
}
return new WP_REST_Response( 'Webhook handled', 200 );
}
function wppay_get_order_id_by_payment_intent( $payment_intent_id ) {
$args = array(
'limit' => 1,
'meta_key' => '_stripe_payment_intent_id',
'meta_value' => $payment_intent_id,
'return' => 'ids'
);
$orders = wc_get_orders( $args );
return !empty($orders) ? $orders[0] : false;
}В этом примере вебхук получает информацию о возврате платежа в Stripe и автоматически меняет статус заказа в WooCommerce на "refunded".
Другие полезные плагины для автоматизации возвратов в WordPress
Если вы используете не WooCommerce, а другую платежную систему, можно обратить внимание на следующие плагины:
- Easy Digital Downloads с расширением Refunds — поддержка возвратов для цифровых товаров.
- WP Simple Pay — плагин для Stripe с возможностью настройки автоматических возвратов через API.
- Clearfy Pro — содержит инструменты для оптимизации и безопасности, в том числе для управления транзакциями, с возможностью добавления кастомных функций.
Как настроить уведомления и логи для отслеживания возвратов
Автоматизация возвратов требует контроля. Рекомендуется настроить уведомления на почту или в админку, а также вести логи ошибок и успешных возвратов.
Пример добавления логирования в функцию возврата WooCommerce:
function wppay_woocommerce_auto_refund( $order_id, $old_status, $new_status ) {
if ( $new_status === 'cancelled' ) {
$order = wc_get_order( $order_id );
if ( ! $order ) return;
if ( ! $order->is_paid() ) return;
$refund = wc_create_refund( array(
'amount' => $order->get_total(),
'reason' => 'Автоматический возврат при отмене заказа',
'order_id' => $order_id,
'refund_payment' => true,
) );
if ( is_wp_error( $refund ) ) {
error_log( '[wppay] Ошибка возврата: ' . $refund->get_error_message() );
} else {
error_log( '[wppay] Успешный возврат заказа #' . $order_id );
}
}
}Можно также использовать плагины логирования, например, Clearfy Pro для расширенного управления логами и уведомлениями.