Как сделать автоматическую проверку платежей в WordPress через CRON

В этой статье разберёмся, как в WordPress реализовать автоматическую проверку платежей через CRON задачи. Это решение поможет вам своевременно получать статус платежей, уменьшить вероятность ошибок и улучшить пользовательский опыт. Мы подробно рассмотрим настройку WP-Cron, взаимодействие с API платежных систем, а также приведём примеры кода для создания собственной функции проверки.

Что такое WP-Cron и почему он нужен для проверки платежей

WP-Cron — это встроенный механизм WordPress для запуска запланированных задач. В отличие от системного cron, WP-Cron запускается при посещении сайта, что удобно, если вы не имеете доступа к серверному cron. Автоматическая проверка платежей — это задача, которая должна выполняться регулярно (например, каждые 5 минут), чтобы обновлять статусы транзакций.

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

WP-Cron позволяет запускать проверку в фоновом режиме, автоматически обновляя информацию по платежам с минимальными задержками.

Подключение к API платежной системы

Чтобы проверять статусы платежей, нужно обращаться к API используемой платежной системы (например, Stripe, PayPal, Яндекс.Касса). Каждый провайдер предоставляет методы для получения статусов транзакций по ID платежа или номеру заказа.

Важно внимательно изучить документацию API и обеспечить безопасность запросов. Часто для этого используют авторизационные ключи или токены, которые нужно хранить в wp-config.php или в настройках плагина.

Пример функции запроса статуса платежа к API (на примере гипотетического API):

function wppay_get_payment_status($payment_id) {
    $api_key = get_option('wppay_api_key');
    $response = wp_remote_get("https://api.paymentprovider.com/status/" . $payment_id, [
        'headers' => [
            'Authorization' => 'Bearer ' . $api_key,
            'Accept' => 'application/json'
        ]
    ]);

    if (is_wp_error($response)) {
        return false;
    }

    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (isset($data['status'])) {
        return $data['status'];
    }

    return false;
}

Настройка WP-Cron для автоматизации проверки платежей

Для запуска проверки по расписанию создадим новую задачу WP-Cron. Пример добавления задачи с интервалом в 5 минут:

add_filter('cron_schedules', 'wppay_add_cron_interval');
function wppay_add_cron_interval($schedules) {
    if (!isset($schedules['five_minutes'])) {
        $schedules['five_minutes'] = [
            'interval' => 300, // 300 секунд = 5 минут
            'display' => __('Every 5 Minutes')
        ];
    }
    return $schedules;
}

if (!wp_next_scheduled('wppay_check_payments_hook')) {
    wp_schedule_event(time(), 'five_minutes', 'wppay_check_payments_hook');
}

add_action('wppay_check_payments_hook', 'wppay_check_payments_function');

Теперь создадим основную функцию, которая будет запускаться по расписанию, проверять статусы платежей и обновлять базу данных.

Основная функция проверки платежей и обновления статусов

Предположим, что у вас есть таблица или тип записей с информацией о платежах. Мы будем получать список новых или незавершённых платежей и проверять их статус через API.

function wppay_check_payments_function() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wppay_payments';

    // Получаем платежи со статусом "ожидает"
    $payments = $wpdb->get_results("SELECT id, payment_id FROM {$table_name} WHERE status = 'pending'");

    if (empty($payments)) {
        return;
    }

    foreach ($payments as $payment) {
        $status = wppay_get_payment_status($payment->payment_id);

        if ($status === false) {
            // Ошибка запроса, можно добавить логирование
            continue;
        }

        if ($status !== 'pending') {
            // Обновляем статус в базе
            $wpdb->update(
                $table_name,
                ['status' => $status],
                ['id' => $payment->id]
            );
        }
    }
}

Данная функция перебирает все платежи в статусе "pending", запрашивает их текущий статус и обновляет запись в базе, если статус изменился. Это классический пример интеграции с внешним API для синхронизации данных.

Рекомендации по улучшению и отладке

1. Логирование: Добавьте запись логов для отладки ошибок API и обновлений статусов. Можно использовать плагины типа Clearfy Pro с функцией логирования.

2. Безопасность: Никогда не храните ключи API в открытом виде в коде. Используйте защищённые настройки или переменные окружения.

3. Обработка ошибок: Реализуйте повторные попытки запроса и уведомления администратора при критических сбоях.

4. Оптимизация: Если платежей много, разбивайте запросы на партии и используйте кэширование результатов, например, с помощью Redis (Clearfy Pro поддерживает интеграцию).

Пример интеграции с плагином для платежей

Если вы используете готовый платежный плагин, например WPCommunity или WPGPT, нужно адаптировать функцию проверки под их структуру данных. Обычно у плагинов есть собственные классы и методы для работы с платежами, которые можно расширить или переопределить, добавив проверку через CRON.

Например, у плагина может быть метод get_pending_payments() и update_payment_status($id, $status). Тогда функция проверки будет выглядеть так:

function wppay_check_payments_function() {
    $payments = MyPluginPayments::get_pending_payments();

    foreach ($payments as $payment) {
        $status = wppay_get_payment_status($payment->external_id);

        if ($status && $status !== $payment->status) {
            MyPluginPayments::update_payment_status($payment->id, $status);
        }
    }
}
Автоматизация управления возвратами в WordPress для платежных систем
26.01.2026
Как добавить платежные системы в WordPress
02.11.2025
Как отладить проблемы с платежными API в WordPress
04.03.2026
WooCommerce: как реализовать авторизацию платежей через REST API для собственных приложений
29.05.2026
Как изменить шаблон электронной почтовой рассылки в WordPress
29.11.2025