Stripe + FazerCards: автоматизируем продажи подарочных карт
Большинство реселлеров проводят первые месяцы за работой, которую должен выполнять скрипт: подтвердить оплату, войти в панель поставщика, разместить заказ, скопировать код, отправить его покупателю. Каждый шаг — ручная работа и ограничение пропускной способности. Stripe Checkout и REST API FazerCards созданы именно для того, чтобы устранить это: один принимает и обрабатывает платёж, другой выполняет заказ за секунды. Свяжите их вместе — и покупатель получит код подарочной карты ещё до того, как дочитает страницу подтверждения.
Что нужно перед началом
Вам понадобится активный аккаунт FazerCards с API-ключом из личного кабинета. Бесплатный 5-дневный пробный период Gold открывает полный доступ к API и живому каталогу — без привязки карты, с реальными заказами с первой минуты. На стороне Stripe проверьте допустимость вашего бизнеса до того, как писать код. Список ограниченных видов бизнеса Stripe относит подарочные карты сторонних эмитентов, предоплаченные карты и продажу игровой валюты к разделу «Nonfiat currency and stored value» — это категории, требующие дополнительной проверки, и Stripe может отказать. При подаче заявки точно опишите, что вы продаёте, и дождитесь письменного подтверждения до запуска: обработка платежей ограниченной категории без одобрения ставит под угрозу аккаунт и деньги на нём. После одобрения для интеграции достаточно стандартного аккаунта с включёнными вебхуками.
Определите заранее, какой тип продуктов вы продаёте. FazerCards использует отдельные каталоги и эндпоинты заказов для подарочных карт, пополнений и ключей игр. В этом руководстве подарочные карты разбираются от начала до конца — с POST /giftcards/order — но логика идемпотентности и обработки вебхуков переносится на POST /topups/order и POST /gamekeys/order без изменений.
API FazerCards можно вызывать из любого языка с HTTP-клиентом. Официальные пакеты доступны для Python (пакет fazercards, устанавливается через pip) и для Node (пакет fazercards, устанавливается через npm).
Шаг 1: привяжите подарочные карты к продуктам Stripe
В панели Stripe создайте один Product для каждой категории подарочных карт, которые вы собираетесь продавать: PlayStation, Google Play, Roblox и так далее. Под каждым Product создайте один Price для каждого диапазона номиналов. В объект metadata каждого Price сохраните соответствующие category_id и card_id из FazerCards. При завершении оплаты Stripe передаёт эти метаданные в обработчик вебхука, так что код выдачи всегда знает, что именно заказать.
Перед активацией любого Price проверьте поле stock в ответе GET /giftcards/cards с нужным category_id в качестве параметра запроса. Карточка с нулевым остатком в витрине создаёт давление на возвраты и портит опыт покупателя. Запускайте эту проверку по расписанию и автоматически деактивируйте Stripe Prices, у которых card_id показывает нулевой остаток.
Шаг 2: создайте Checkout Session
Когда покупатель выбирает номинал на вашем сайте, сервер вызывает Stripe API для создания checkout-сессии. Два параметра требуют особого внимания:
- Установите client_reference_id в UUID, который вы генерируете для каждой транзакции. Это значение станет ключом идемпотентности при обращении к FazerCards и гарантирует, что повторные вебхуки Stripe не создадут дублирующих заказов.
- Передайте email покупателя через customer_email или Stripe Customer ID — он понадобится при доставке.
Перенаправьте покупателя на URL сессии, который возвращает Stripe. Stripe берёт на себя приём карточных данных, 3-D Secure и региональные методы оплаты — вы не касаетесь карточных данных.
Шаг 3: верифицируйте входящий вебхук Stripe
Настройте вебхук Stripe на эндпоинт /webhooks/stripe вашего сервера и подпишитесь на событие checkout.session.completed. Когда Stripe отправляет запрос, первым действием должна быть верификация: проверьте заголовок Stripe-Signature по секрету подписи вебхука. Любой запрос, не прошедший проверку, немедленно отклоняйте. Поддельное событие, обошедшее эту проверку, инициирует реальный заказ в FazerCards за реальные деньги.
После верификации извлечите позиции заказа из сессии (используйте Stripe expand или отдельный API-запрос). Metadata из шага 1 даст вам category_id и card_id. client_reference_id из шага 2 — ваш ключ идемпотентности.
Шаг 4: разместите заказ в FazerCards
Вызовите API FazerCards запросом POST /giftcards/order. Аутентификация — заголовок X-Api-Key; добавьте заголовок Idempotency-Key со значением client_reference_id из шага 3. FazerCards хранит ключи идемпотентности семь дней — дольше, чем окно повторных попыток Stripe — поэтому повторный вызов с тем же ключом вернёт исходный заказ и не спишет средства снова.
Возможны два исхода. Если продукт доставляется мгновенно, ответ придёт со статусом completed, а коды уже будут в поле cards заказа — дополнительных запросов не нужно. Если статус processing, код ещё не назначен; он придёт через вебхук FazerCards с событием order.status_changed по завершении заказа. После этого события получите код запросом GET /orders/:orderId.
Шаг 5: доставьте код покупателю
Получив код, доставьте его. Email — самый надёжный канал: отправьте транзакционное письмо с кодом, идентификатором заказа и инструкцией по активации. Если архитектура магазина позволяет, отобразите код и на странице успешной оплаты.
Логируйте каждую доставку с указанием order_id из FazerCards и payment_intent из Stripe рядом. Это ваш журнал доказательств: если покупатель сообщает о нерабочем коде, откройте обращение в поддержку FazerCards с указанием order_id. Подтверждённые случаи ошибки активации получают замену или кредит на баланс.
Шаг 6: обрабатывайте неудачные заказы
Когда заказ в FazerCards возвращается со статусом failed, у вас два очевидных варианта: оформить новый заказ с новым Idempotency-Key — старый ключ просто вернёт тот же неудачный заказ — или программно оформить возврат через Stripe. Не оставляйте покупателя без рабочего кода или возврата.
В спорных ситуациях — покупатель получил код, но он не активируется у эмитента — схема та же: покупатель обращается к вам, вы обращаетесь в FazerCards с order_id, подтверждённые случаи получают замену или кредит. Опишите этот процесс в разделе поддержки вашего магазина. Ясные ожидания снижают количество чарджбэков и формируют доверие.
Подробности о расписании повторных попыток доставки вебхука FazerCards — три попытки через 1, 5 и 30 минут — в справочнике по API.
Итог
Покупатель заходит на страницу вашего продукта, выбирает номинал, оплачивает через hosted checkout Stripe и получает рабочий код подарочной карты — как правило, в течение нескольких секунд после подтверждения оплаты. Вы не обрабатываете карточные данные, не размещаете заказы вручную и ведёте полный журнал аудита от платежа Stripe до order_id FazerCards и временной метки доставки. Цепочка масштабируется от десятков транзакций в день до тысяч без дополнительных ручных операций.
Изучите полный каталог подарочных карт, сравните тарифные планы и начните с бесплатного 5-дневного пробного периода Gold — полный доступ к API, без привязки карты.
FAQ
Работает ли этот подход для пополнений, а не только для подарочных карт?
Да. Замените POST /giftcards/order на POST /topups/order — он принимает category_id, offer_id и объект fields с идентификатором игрока, например player_id. Получите этот идентификатор от покупателя при оформлении заказа через Stripe custom fields. Верификация вебхука, ключ идемпотентности и логика доставки идентичны варианту с подарочными картами. Учтите, что список ограничений Stripe распространяется и на игровую валюту, поэтому убедитесь, что пополнения входят в одобренное Stripe.
Что будет, если сервер был недоступен и пропустил вебхук Stripe?
Stripe повторяет недоставленные вебхуки до 72 часов. Поскольку каждый заказ FazerCards содержит Idempotency-Key, равный client_reference_id сессии Stripe, любой повтор, достигший восстановленного сервера, не создаст дубликат. Для дополнительной надёжности сохраняйте входящие вебхук-события в локальную таблицу базы данных сразу по получении и обрабатывайте оттуда — после любого простоя сервер сможет повторно обработать очередь без риска дубликации.
Можно ли протестировать интеграцию до запуска?
Тестовый режим Stripe отправляет реальные вебхук-события с тестовыми номерами карт, так что вы можете отработать полный поток — checkout, получение вебхука, размещение заказа — без реальных платежей покупателей. На это время направьте обработчик на заглушку или ограничьте его одним недорогим товаром: любой заказ, который он отправит в FazerCards, — настоящий. На стороне FazerCards API работает в едином боевом окружении: каждый заказ реален и списывается с баланса. Воспользуйтесь бесплатным 5-дневным пробным периодом, разместите несколько небольших реальных заказов и убедитесь в корректности полного цикла перед переключением Stripe в production-режим.