Перейти до вмісту

Приймання платежів FastSpring: 5 частин шлюзу

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