Приймання платежів 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 про роботу навколо плагіна.
