Решение проблемы неудачного возврата платежа WooCommerce в LearnPress

Диагностика проблемы возврата платежа в LearnPress с WooCommerce

Проблема: при возврате платежа через WooCommerce статус заказа обновляется, но в LearnPress статус курса ученика не меняется, что приводит к путанице в доступах и ошибкам отчетности.

Для начала проверьте, правильно ли связаны статусы заказов между WooCommerce и LearnPress. Основная причина — отсутствие обработки события возврата платежа в LearnPress, поскольку стандартная интеграция WooCommerce с LearnPress не всегда учитывает возвраты.

Проверьте логи WooCommerce (WooCommerce > Статус > Логи) на наличие ошибок при выполнении возврата. Также проверьте, вызывается ли хук woocommerce_order_refunded при возврате платежа.

Пошаговое решение: синхронизация статусов возврата платежей

1. Добавление обработки возврата через хук WooCommerce

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин, чтобы LearnPress получал уведомления о возвратах и корректно обновлял статусы курса:

add_action('woocommerce_order_refunded', 'lp_handle_refund_update_course_access', 10, 2);
function lp_handle_refund_update_course_access($order_id, $refund_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Получаем ID пользователя
    $user_id = $order->get_user_id();
    if (!$user_id) return;

    // Получаем все курсы из заказа
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        // Проверяем, что продукт связан с курсом LearnPress
        if (!lp_is_course($product_id)) continue;

        // Отзываем доступ к курсу пользователю
        lp_remove_user_course($user_id, $product_id);
    }
}

// Вспомогательная функция для проверки, является ли продукт курсом LearnPress
function lp_is_course($product_id) {
    $course = learn_press_get_course($product_id);
    return $course && $course->exists();
}

// Функция удаления доступа пользователя к курсу
function lp_remove_user_course($user_id, $course_id) {
    global $wpdb;
    $table = $wpdb->prefix . 'learnpress_user_courses';
    $wpdb->delete($table, array(
        'user_id' => $user_id,
        'course_id' => $course_id
    ));
}

2. Проверка корректности работы кода

Для проверки сделайте возврат платежа в WooCommerce тестовым заказом с курсом LearnPress, затем:

  • Перейдите в панель администратора LearnPress > Студенты и проверьте, что у пользователя отозван доступ к курсу.
  • Проверьте таблицу базы данных wp_learnpress_user_courses на отсутствие записей с данным пользователем и курсом.
  • Убедитесь, что больше не доступны уроки курса для этого пользователя.

Частые ошибки и их исправление

  • Хук не срабатывает: Проверьте, что в WooCommerce включено логирование и что возврат платежа происходит через стандартный механизм, вызывающий woocommerce_order_refunded.
  • Курс не удаляется из LearnPress: Убедитесь, что функция lp_is_course корректно определяет курсы. Проверьте, что ID продукта совпадает с ID курса LearnPress.
  • Ошибка базы данных при удалении: Проверьте префикс таблиц в базе данных и права пользователя базы данных.
  • Доступ к курсу остается, но статус заказа в WooCommerce изменился: Возможно, у вас кастомные роли или плагины, которые блокируют удаление доступа. Проверьте конфликты с другими плагинами.

Практические советы по безопасности и производительности

  • Добавляйте проверку nonce и прав пользователя, если расширяете функционал с фронтенда.
  • Оптимизируйте запросы к базе данных, избегайте лишних циклов.
  • Резервно храните данные пользователя LearnPress перед удалением доступа для возможности восстановления.
  • Регулярно обновляйте WooCommerce и LearnPress, чтобы использовать актуальные хуки и методы.

Таблица сравнения подходов решения проблемы возврата платежей

МетодОписаниеПлюсыМинусы
Кодовое решение через хукОбработка woocommerce_order_refunded, удаление доступа вручнуюГибкость, контроль, бесплатноНужно тестировать, зависит от правильности кода
Плагины интеграции WooCommerce и LearnPressГотовые решения с поддержкой возвратовПростота установки, поддержкаМожет быть платным, ограниченная кастомизация
Ручное управление доступомАдминистратор вручную меняет доступ после возвратаНет необходимости в кодеРучной труд, ошибки, задержки

Проверка результата после внедрения

Для проверки результата выполните следующие шаги:

  1. Создайте тестовый заказ курса с оплатой через WooCommerce.
  2. Выполните возврат платежа в WooCommerce (через админку или тестовые платежные шлюзы).
  3. Проверьте, что у пользователя в LearnPress отозван доступ к курсу.
  4. Проверьте, что статус заказа в WooCommerce изменился на «Возврат» или аналогичный.
  5. Убедитесь, что пользователь не может получить доступ к урокам курса.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить неиспользуемые курсы в LearnPress без потери данных
17.02.2026
Как сделать автосохранение прогресса курса в LearnPress на WordPress
31.01.2026
Как отладить проблемы с просмотром видео в LearnPress на WordPress
23.01.2026
Как добавить предварительный просмотр урока в LearnPress: практическое руководство с примерами кода
13.02.2026
Как использовать REST API в LearnPress для автоматизации
22.11.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее