Автоматическая проверка платежей — важный этап в построении надежной платежной системы на сайте WordPress. Она позволяет своевременно подтверждать статус транзакций, предотвращать мошенничество и обеспечивать корректное обновление данных в базе. В этой статье подробно разберем, как реализовать автоматическую проверку платежей с помощью вебхуков, API платежных систем и собственного кода.
Почему важна автоматическая проверка платежей в WordPress
При интеграции платежных систем в WordPress часто возникают ситуации, когда статус платежа может не обновиться вовремя из-за ошибок соединения, задержек от провайдера или даже попыток мошенничества. Ручная проверка или ожидание ответа клиента не всегда надежны, поэтому автоматизация — ключ к стабильной работе.
Автоматическая проверка позволяет:
- Подтверждать успешные транзакции в режиме реального времени;
- Обрабатывать отмены и возвраты автоматически;
- Снижать нагрузку на поддержку за счет уменьшения ошибок;
- Повышать доверие пользователей к сайту.
Для этого чаще всего используют вебхуки от платежных систем или периодические запросы к API.
Использование вебхуков для автоматической проверки платежей
Вебхуки — это HTTP-запросы от платежного сервиса к вашему сайту при изменении статуса платежа. Они позволяют получать уведомления в реальном времени и обрабатывать их автоматически.
Пример работы с вебхуками:
add_action('wp_ajax_wppay_handle_webhook', 'wppay_handle_webhook');
add_action('wp_ajax_nopriv_wppay_handle_webhook', 'wppay_handle_webhook');
function wppay_handle_webhook() {
// Получаем входящие данные
$input = file_get_contents('php://input');
$event = json_decode($input, true);
if (!$event) {
wp_send_json_error('Invalid data');
exit;
}
// Проверяем подпись (пример для Stripe)
$signature = $_SERVER['HTTP_STRIPE_SIGNATURE'] ?? '';
if (!wppay_verify_signature($input, $signature)) {
wp_send_json_error('Invalid signature');
exit;
}
// Обрабатываем событие
switch ($event['type']) {
case 'payment_intent.succeeded':
$payment_id = $event['data']['object']['id'];
wppay_update_payment_status($payment_id, 'completed');
break;
case 'payment_intent.payment_failed':
$payment_id = $event['data']['object']['id'];
wppay_update_payment_status($payment_id, 'failed');
break;
// другие события
}
wp_send_json_success('Webhook processed');
exit;
}
function wppay_verify_signature($payload, $signature) {
$secret = 'your_webhook_secret';
$expected = hash_hmac('sha256', $payload, $secret);
return hash_equals($expected, $signature);
}
function wppay_update_payment_status($payment_id, $status) {
// Логика обновления статуса платежа в базе WordPress
global $wpdb;
$wpdb->update(
$wpdb->prefix . 'payments',
['status' => $status],
['payment_id' => $payment_id]
);
}Этот пример демонстрирует базовую структуру обработки вебхуков с проверкой подписи и обновлением статуса платежа в базе данных.
Настройка URL для вебхуков
Чтобы прием вебхуков работал, необходимо указать в платежной системе URL, по которому будут приходить уведомления. Он должен вести на обработчик, например, https://yourdomain.com/wp-admin/admin-ajax.php?action=wppay_handle_webhook.
Для безопасности рекомендуется использовать проверку подписи, как в примере выше, или другой механизм аутентификации.
Периодическая проверка статуса платежей через API
В некоторых случаях вебхуки недоступны или ненадежны. Тогда можно использовать периодические запросы к API платежного сервиса для обновления статусов.
Для этого создадим WP Cron задачу, которая будет запускаться, например, раз в час и проверять все платежи со статусом «ожидает».
function wppay_schedule_check_payments() {
if (!wp_next_scheduled('wppay_cron_check_payments')) {
wp_schedule_event(time(), 'hourly', 'wppay_cron_check_payments');
}
}
add_action('wp', 'wppay_schedule_check_payments');
add_action('wppay_cron_check_payments', 'wppay_check_pending_payments');
function wppay_check_pending_payments() {
global $wpdb;
$payments = $wpdb->get_results("SELECT payment_id FROM {$wpdb->prefix}payments WHERE status = 'pending'");
foreach ($payments as $payment) {
$status = wppay_get_payment_status_from_api($payment->payment_id);
if ($status && $status !== 'pending') {
wppay_update_payment_status($payment->payment_id, $status);
}
}
}
function wppay_get_payment_status_from_api($payment_id) {
// Пример запроса к API платежной системы
$api_url = "https://api.example.com/payments/" . $payment_id;
$response = wp_remote_get($api_url, [
'headers' => [
'Authorization' => 'Bearer your_api_token',
'Accept' => 'application/json',
],
]);
if (is_wp_error($response)) {
return false;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
return $data['status'] ?? false;
}Этот код регистрирует задачу, которая будет проверять платежи с неопределенным статусом и обновлять их в базе данных.
Преимущества и недостатки периодической проверки
Плюсы:
- Независимость от уведомлений платежной системы;
- Возможность исправить пропущенные события;
- Гибкая настройка интервалов.
Минусы:
- Нагрузка на сервер и API при большом количестве платежей;
- Задержка в обновлении статуса;
- Необходимость контроля ошибок запросов.
Рекомендуемые плагины для автоматической проверки платежей в WordPress
Для упрощения интеграции можно использовать готовые решения с поддержкой вебхуков и проверок:
- WPPay — плагин для приема и обработки платежей с поддержкой вебхуков и расширенной логикой проверки.
- Clearfy Pro — оптимизирует работу сайта и повышает безопасность, помогает избежать сбоев при обработке платежей.
- ABC Pagination — удобен для отображения большого списка платежей с фильтрацией и сортировкой.
Использование этих плагинов позволит быстрее внедрить надежную систему проверки платежей и снизить риски ошибок.
Советы по безопасности и надежности проверок платежей
Для минимизации ошибок и мошенничества рекомендуем:
- Использовать HTTPS для всех запросов и вебхуков;
- Проверять подписи и токены в уведомлениях;
- Логировать все операции для последующего аудита;
- Настроить повторные попытки обработки при временных ошибках;
- Проводить тестирование в тестовом режиме платежной системы;
- Регулярно обновлять плагины и ядро WordPress.
Это поможет обеспечить корректную работу и безопасность ваших платежных процессов.
Заключение
Автоматическая проверка платежей — важный элемент платежной системы на WordPress. Используя вебхуки и API, вы можете добиться своевременного обновления статусов и повысить надежность сайта. Приведенные примеры кода и советы помогут вам быстро реализовать такую систему с минимальными трудозатратами.
Для удобства и безопасности рекомендуем обратить внимание на плагины, например, WPPay, которые интегрируют множество полезных функций и облегчают работу с платежами.