Как создать автоматический отчёт по платежам в WordPress с помощью вебхуков

В современном мире автоматизация бизнес-процессов крайне важна, особенно когда речь идёт о платежах на сайте WordPress. Один из эффективных способов — использование вебхуков для автоматического сбора и обработки информации о платежах, что позволяет создавать отчёты без вашего постоянного участия. В этой статье подробно разберём, как реализовать такой функционал с примерами кода и рекомендациями.

Что такое вебхуки и зачем они нужны для отчётов по платежам

Вебхук — это механизм, с помощью которого внешние сервисы (платёжные системы, CRM и т. д.) уведомляют ваш сайт о событиях в режиме реального времени. Вместо периодических запросов к API, вебхук автоматически отправляет данные на ваш сервер, когда происходит определённое событие, например, успешная оплата.

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

Пример использования вебхуков:

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

Как настроить приём вебхуков в WordPress

Для начала нужно создать endpoint — специальный URL, который будет принимать POST-запросы от платёжной системы. В WordPress для этого можно использовать REST API или добавить собственный обработчик.

Рассмотрим простой пример добавления обработчика вебхуков через REST API. Создадим функцию wppay_handle_webhook, которая будет принимать данные и сохранять их в базу.

add_action('rest_api_init', function () {
    register_rest_route('wppay/v1', '/webhook', [
        'methods' => 'POST',
        'callback' => 'wppay_handle_webhook',
        'permission_callback' => '__return_true',
    ]);
});

function wppay_handle_webhook(WP_REST_Request $request) {
    $data = $request->get_json_params();
    if (empty($data['payment_id']) || empty($data['status'])) {
        return new WP_REST_Response(['error' => 'Invalid data'], 400);
    }
    global $wpdb;
    $table = $wpdb->prefix . 'wppay_payments';
    $wpdb->insert($table, [
        'payment_id' => sanitize_text_field($data['payment_id']),
        'status' => sanitize_text_field($data['status']),
        'amount' => floatval($data['amount']),
        'created_at' => current_time('mysql'),
    ]);
    return new WP_REST_Response(['success' => true], 200);
}

Этот код создаёт REST endpoint /wp-json/wppay/v1/webhook, который принимает данные платежа в формате JSON и сохраняет их в таблицу wp_wppay_payments. Таблицу нужно создать заранее, например, с помощью функции активации плагина.

Создание таблицы для хранения платежей в базе данных

Для хранения информации о платежах создадим таблицу с необходимыми полями. В идеале, делать это при активации плагина:

function wppay_create_db_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wppay_payments';
    $charset_collate = $wpdb->get_charset_collate();
    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      payment_id varchar(100) NOT NULL,
      status varchar(20) NOT NULL,
      amount decimal(10,2) NOT NULL,
      created_at datetime NOT NULL,
      PRIMARY KEY  (id),
      UNIQUE KEY payment_id (payment_id)
    ) $charset_collate;";
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wppay_create_db_table');

Эта таблица позволит хранить уникальные платежи с их статусом и суммой. Уникальный индекс по payment_id предотвратит дублирование записей при повторных уведомлениях.

Формирование отчёта по платежам из базы

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

function wppay_get_payments_report($from_date, $to_date) {
    global $wpdb;
    $table = $wpdb->prefix . 'wppay_payments';
    $query = $wpdb->prepare(
        "SELECT status, COUNT(*) as count, SUM(amount) as total FROM $table WHERE created_at BETWEEN %s AND %s GROUP BY status",
        $from_date, $to_date
    );
    return $wpdb->get_results($query);
}

Эта функция вернёт агрегированные данные по статусам платежей, количеству и общей сумме за выбранный период.

Для вывода отчёта в админке можно добавить меню и страницу с формой выбора дат.

Пример создания страницы отчёта в админке WordPress

Добавим пункт меню и страницу с отчётом:

add_action('admin_menu', function() {
    add_menu_page('Отчёт по платежам', 'Отчёт по платежам', 'manage_options', 'wppay-report', 'wppay_render_report_page');
});

function wppay_render_report_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }
    $from = isset($_POST['from']) ? sanitize_text_field($_POST['from']) : date('Y-m-01');
    $to = isset($_POST['to']) ? sanitize_text_field($_POST['to']) : date('Y-m-d');
    $report = wppay_get_payments_report($from, $to);
    echo '<h1>Отчёт по платежам с ' . esc_html($from) . ' по ' . esc_html($to) . '</h1>';
    echo '<form method="post">';
    echo '<label>С: <input type="date" name="from" value="' . esc_attr($from) . '"></label> ';
    echo '<label>По: <input type="date" name="to" value="' . esc_attr($to) . '"></label> ';
    echo '<input type="submit" value="Показать"></form>';
    if ($report) {
        echo '<table class="wp-list-table widefat fixed striped"><thead><tr><th>Статус</th><th>Количество</th><th>Общая сумма</th></tr></thead><tbody>';
        foreach ($report as $row) {
            echo '<tr><td>' . esc_html($row->status) . '</td><td>' . intval($row->count) . '</td><td>' . number_format($row->total, 2, ',', ' ') . '</td></tr>';
        }
        echo '</tbody></table>';
    } else {
        echo '<p>Данных за выбранный период нет.</p>';
    }
}

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

Рекомендации по безопасности и надёжности

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

Также рекомендуем регистрировать все ошибки и успешные приёмы данных в логах для отладки. Это поможет быстро выявлять проблемы с интеграцией.

Если вы используете плагины, например, Clearfy Pro, можно дополнительно защитить REST API и ускорить работу сайта.

Заключение по практике использования вебхуков для отчётов

Вебхуки — мощный инструмент для автоматизации работы с платежами в WordPress. Правильная настройка приёма данных, сохранение в базе и формирование удобных отчётов позволяют значительно упростить работу с финансовой статистикой.

Используйте описанные методы и примеры кода для реализации надёжной системы отчётности, адаптируя под свои платёжные сервисы и бизнес-процессы.

Как избежать проблем с дублированием платежей в WordPress
19.01.2026
WooCommerce: как настроить автопродление подписок через вебхуки
07.05.2026
Использование OTP (одноразового пароля) для подтверждения платежей в WordPress
15.04.2026
Как сделать автоматическую проверку платежей в WordPress через CRON
11.04.2026
Как установить лимит на платежи в WordPress по суммам и пользователям
14.03.2026