WooCommerce: как реализовать авторизацию платежей через REST API для собственных приложений

Диагностика задачи: зачем нужна авторизация платежей через REST API

При интеграции WooCommerce с внешними сервисами или мобильными приложениями часто возникает необходимость авторизовать платежи программно — проверить статус платежа, подтвердить оплату, инициировать заказ или отменить транзакцию. Стандартные платежные шлюзы WooCommerce обычно работают через фронтенд и плагины, но для кастомных решений нужно использовать REST API.

Основная проблема — отсутствие встроенного функционала авторизации платежей «из коробки» через REST API WooCommerce. Этот функционал нужно реализовать самостоятельно, учитывая безопасность и целостность данных.

Пошаговое решение: реализация авторизации платежей через REST API

1. Регистрация пользовательского REST API эндпоинта

Создайте свой эндпоинт для авторизации платежей, используя хук rest_api_init. Например:

add_action('rest_api_init', function () {
    register_rest_route('custom-payments/v1', '/authorize', [
        'methods' => 'POST',
        'callback' => 'custom_authorize_payment',
        'permission_callback' => function () {
            return current_user_can('manage_woocommerce');
        }
    ]);
});

2. Функция обратного вызова для проверки и авторизации платежа

В этой функции примите идентификатор заказа и данные платежа, проверьте их, и если всё корректно — измените статус заказа:

function custom_authorize_payment(WP_REST_Request $request) {
    $order_id = $request->get_param('order_id');
    $payment_token = $request->get_param('payment_token');

    if (empty($order_id) || empty($payment_token)) {
        return new WP_Error('missing_params', 'Order ID or payment token missing', ['status' => 400]);
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return new WP_Error('invalid_order', 'Invalid order ID', ['status' => 404]);
    }

    // Здесь проверьте валидность платежного токена, например через внешний API платежной системы
    $is_valid_payment = custom_validate_payment_token($payment_token, $order);

    if (!$is_valid_payment) {
        return new WP_Error('payment_failed', 'Payment authorization failed', ['status' => 403]);
    }

    // Авторизация платежа — обновляем статус заказа
    $order->payment_complete();
    return ['success' => true, 'order_id' => $order_id, 'message' => 'Payment authorized'];
}

function custom_validate_payment_token($token, $order) {
    // Реализуйте логику проверки токена с платежным провайдером
    // Для примера просто возвращаем true
    return true;
}

3. Безопасность: аутентификация запросов к API

Для безопасности используйте аутентификацию по ключам WooCommerce REST API или OAuth 1.0a. Пример передачи ключей:

curl -X POST https://example.com/wp-json/custom-payments/v1/authorize \
-H 'Authorization: Basic '$(echo -n 'consumer_key:consumer_secret' | base64) \
-d 'order_id=123&payment_token=abc123'

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

  • Получите HTTP 200 с JSON-ответом {"success":true,...} при корректных данных.
  • Проверьте, что статус заказа изменился на processing или completed через админку WooCommerce.
  • Попробуйте запрос с неправильными параметрами — должны возвращаться ошибки с HTTP кодами 400 или 403.

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

  • Ошибка 403 Forbidden — чаще всего из-за некорректных прав доступа или отсутствия аутентификации. Проверьте permission_callback и правильность ключей.
  • Заказ не найден — неверный order_id. Убедитесь, что заказ существует и ID правильный.
  • Отсутствие проверки платежного токена — приводит к авторизации любых платежей. Обязательно реализуйте проверку через API платежного провайдера.

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

  • Используйте HTTPS для всех API запросов.
  • Ограничьте права доступа к эндпоинтам минимально необходимыми ролями.
  • Кэшируйте результаты проверки платежного токена, если API провайдера позволяет, чтобы снизить нагрузку.
  • Логируйте попытки авторизации для аудита и выявления подозрительной активности.

Сравнение вариантов реализации авторизации платежей

МетодПлюсыМинусы
Встроенные платежные плагины WooCommerceПростота использования, поддержка 3D SecureМалый контроль, нет API для кастомных приложений
Кастомный REST API эндпоинт (как в статье)Полный контроль, интеграция с любыми приложениямиТребуется ручная реализация безопасности и логики
Вебхуки платежных систем + обработка в WordPressАвтоматизация без ручных запросовМожет быть сложно отлаживать, зависит от провайдера
Как установить ограничения на платежи в WordPress по суммам и пользователям
11.03.2026
Как создать собственный платежный шорткод в WordPress
09.11.2025
Как избежать проблем с задержкой платежей в WordPress
30.03.2026
Как создать автоматическую отчетность по платежам в WordPress
26.12.2025
Как создать настраиваемый платежный плагин для WordPress
26.01.2026