Приём платежей FastSpring: 5 частей шлюза
Продавать софт из Украины с оплатой картой и через PayPal значит работать через merchant of record, а это значит, что оформление заказа не ваше. Приём платежей FastSpring в WooCommerce принимает это и оставляет магазин местом, где живут заказы.
Код: woocommerce-fastspring-gateway, лицензия GPL-2.0-or-later.
WordPress 6.4, WooCommerce 8.0, PHP 8.1 и один плагин, который уводит на размещённую страницу оплаты и слушает вебхук, который возвращается.
Часть 1: сессия вместо формы карты
Шлюз не собирает данные карты. Он создаёт сессию FastSpring через API и отправляет клиента на размещённую страницу, где FastSpring закрывает карты, PayPal, Amazon Pay и налоговые правила страны покупателя.
Для магазина это короткий разговор про соответствие требованиям. Данные карты не касаются сервера, область PCI сжимается до редиректа, а merchant of record владеет счётом, который клиент скачивает.
Часть 2: заказ приходит вебхуком
Заказ становится оплаченным по вебхуку, а не по адресу возврата. Клиент, который закрыл вкладку после оплаты, всё равно получает оплаченный заказ, а клиент, который вернулся без оплаты, не получает.
Обрабатываются двенадцать событий: четыре по заказам, одно по возврату и семь по жизненному циклу подписки и списаниям. Шлюз, который слушает только order.completed, оставляет каждое продление невидимым.
Часть 3: подпись обязательна
Каждый вебхук проверяется подписью HMAC SHA256 и сравнивается через hash_equals, запрос без валидной подписи отклоняется. Необязательный фильтр по IP сужает дополнительно.
Альтернатива, доверять POST потому, что он похож на вебхук, это способ получить заказ, помеченный оплаченным, от любого, кто прочитал исходник плагина. README прямо пишет, что проверка обязательна, и это та фраза, которую стоит искать в любом платёжном плагине.
Часть 4: подписки это отдельная задача
Регулярные платежи добавляют продления, триалы, взносы за регистрацию, паузы и отмены. Плагин переводит каждое в статус WooCommerce: subscription.activated сохраняет идентификатор, paused ставит заказ на удержание, uncanceled возвращает в обработку.
Магазин, который продаёт месячный план и реализовал только первый платёж, узнаёт о пробеле на втором месяце, когда списание приходит, а приземлиться ему некуда.
Часть 5: сопоставление товаров
FastSpring продаёт свои пути товаров, у WooCommerce свои товары, и что-то должно их соединить. Поле метаданных продукта хранит путь FastSpring, а SKU работает запасным вариантом.
Решение мелкое, последствие крупное. Пропущенное сопоставление это оформление, которое открывает FastSpring с пустой корзиной, и обращение в поддержку «кнопка ничего не делает».
Чего плагин не решает
Политику возврата, регистрацию налогов, формулировки в счёте и юридическое лицо продавца определяет магазин. Merchant of record собирает и перечисляет, но что и на каких условиях продаётся, решает магазин.
Совместимость с HPOS и с блоками объявлена, и в 2026 году это разница между плагином, который ставится, и плагином, который ломает оформление после обновления.
Что проверить после первого платежа
Сделайте один настоящий платёж на минимальную сумму и пройдите по нему целиком: статус заказа, заметка, письмо, счёт в кабинете FastSpring, возврат обратно. Тестовая карта доказывает, что код работает, настоящий платёж доказывает, что налоги и учёт настроены.
Потом сломайте нарочно: закройте браузер до возврата и убедитесь, что вебхук всё равно пометил заказ оплаченным. Эта проверка ловит большую часть интеграций, которые выглядят исправными на демо.
Отдельно стоит проверить тестовую витрину: другой домен, другие ключи, отдельный адрес вебхука. Один магазин на два режима это инцидент, назначенный на пятницу.
Сколько это стоит
День настройки для простого магазина, неделя, если есть подписки и тестовая витрина. Остальное время уходит на сопоставление: товары, налоги, письма и путь возврата, которым будет пользоваться поддержка.
Рядом: разработка на WooCommerce о том, как считается объём магазина, и разработка на PHP о работе вокруг плагина.
