В современных интернет-магазинах и сервисах на WordPress важная задача — гарантировать корректность и безопасность платежей. Валидация платежных данных и проверка статуса транзакций помогают избежать мошенничества, ошибок и потерь для бизнеса. В этой статье подробно разберём, как реализовать проверку и валидацию платежей в WordPress с примерами кода и рекомендациями по плагинам.
Почему важна проверка и валидация платежей в WordPress
Основная причина внедрять проверку платежей — обеспечить целостность данных и безопасность пользователей. Без проверки можно столкнуться с:
- Ошибочным проведением платежей;
- Дублированием заказов;
- Мошенническими операциями;
- Проблемами с синхронизацией статусов транзакций между сайтом и платёжной системой.
Проверка и валидация позволяют своевременно обрабатывать ошибки, обновлять статусы заказов и уведомлять клиента о проблемах.
Основные этапы проверки платежей в WordPress
Для надёжной валидации рекомендую выделить следующие этапы:
- Получение уведомления от платёжной системы (например, через вебхук или callback);
- Проверка подписи или токена, чтобы убедиться в подлинности запроса;
- Проверка статуса транзакции через API платёжного шлюза;
- Обновление статуса заказа в базе WordPress;
- Отправка уведомления клиенту и администратору.
Рассмотрим подробнее техническую реализацию.
Создание обработчика вебхуков для проверки платежей в WordPress
Вебхуки — самый надёжный способ получать информацию о статусах платежей. Ниже пример кода, который создаёт endpoint для приёма уведомлений и выполняет базовую валидацию.
add_action('rest_api_init', function() {
register_rest_route('wppay/v1', '/payment-validate', array(
'methods' => 'POST',
'callback' => 'wppay_payment_validate_callback',
'permission_callback' => '__return_true',
));
});
function wppay_payment_validate_callback(WP_REST_Request $request) {
$data = $request->get_json_params();
// Проверяем обязательные параметры
if (empty($data['order_id']) || empty($data['status']) || empty($data['signature'])) {
return new WP_REST_Response(['error' => 'Missing parameters'], 400);
}
// Проверяем подпись
$secret_key = 'ваш_секретный_ключ';
$signature_check = hash_hmac('sha256', $data['order_id'] . $data['status'], $secret_key);
if (!hash_equals($signature_check, $data['signature'])) {
return new WP_REST_Response(['error' => 'Invalid signature'], 403);
}
// Обновляем статус заказа
$order_id = intval($data['order_id']);
$status = sanitize_text_field($data['status']);
$order = wc_get_order($order_id); // Если вы используете WooCommerce
if (!$order) {
return new WP_REST_Response(['error' => 'Order not found'], 404);
}
if ($status === 'paid') {
$order->payment_complete();
$order->add_order_note('Платёж подтверждён через вебхук.');
} elseif ($status === 'failed') {
$order->update_status('failed', 'Платёж не прошёл.');
}
return new WP_REST_Response(['success' => true], 200);
}Этот код регистрирует REST API endpoint /wp-json/wppay/v1/payment-validate для приёма POST-запросов с данными платежа. Он проверяет подпись и обновляет статус заказа.
Использование плагинов для валидации платежей
Если не хотите писать весь код с нуля, рекомендую обратить внимание на следующие плагины, которые облегчают интеграцию и проверку платежей:
- Clearfy Pro — помогает оптимизировать работу сайта и содержит функции безопасности, включая защиту от подделки запросов;
- WPGPT — расширение с искусственным интеллектом, которое можно использовать для автоматического анализа платежных данных и выявления подозрительных транзакций;
- Плагины WooCommerce для обработки платежей с поддержкой вебхуков и API (например, Stripe, PayPal).
Они позволяют автоматизировать проверку и упростить разработку кастомных решений.
Проверка статуса платежа через API платёжного шлюза
Иногда платёжные уведомления могут прийти некорректными или отсутствовать. В таких случаях полезно реализовать периодическую проверку статусов заказов через API платёжной системы.
Пример функции для проверки статуса платежа у вымышленного провайдера:
function wppay_check_payment_status($order_id, $transaction_id) {
$api_url = 'https://api.paymentprovider.com/status';
$api_key = 'ваш_api_ключ';
$response = wp_remote_post($api_url, array(
'body' => json_encode(array('transaction_id' => $transaction_id)),
'headers' => array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key
)
));
if (is_wp_error($response)) {
return false;
}
$body = json_decode(wp_remote_retrieve_body($response), true);
if (empty($body) || !isset($body['status'])) {
return false;
}
$order = wc_get_order($order_id);
if (!$order) {
return false;
}
if ($body['status'] === 'paid') {
$order->payment_complete();
$order->add_order_note('Статус платежа подтверждён через API.');
return true;
}
return false;
}Такую функцию можно запускать по расписанию через WP-Cron, чтобы гарантировать актуальность статусов.
Обработка ошибок и защита от повторных платежей
При валидации важно предусмотреть обработку ошибок — например, если запрос пришёл повторно, чтобы не обновлять статус дважды и не создавать дубликаты.
Рекомендации:
- Используйте уникальные идентификаторы транзакций и проверяйте, был ли уже обработан этот платеж;
- Логируйте все запросы для последующего аудита;
- Уведомляйте администраторов о подозрительных операциях;
- Используйте nonce и подписи для проверки подлинности запросов.
Заключение
Создание надёжной проверки и валидации платежей — ключевой момент для стабильной работы сайтов на WordPress с платёжными системами. Используйте вебхуки, API, проверяйте подписи и статусы, а также применяйте готовые плагины для упрощения задач. Приведённые примеры и рекомендации помогут реализовать эффективную систему без лишних затрат времени и сил.