Перейти к основному содержимому
LearnGuidesМигрировать с Stripe
РУКОВОДСТВО

Мигрировать с Stripe на Blockchain0x для доступа к API, управляемому агентом.

20 minutes
КРАТКИЙ ОТВЕТ

Не заменяйте Stripe; запускайте его параллельно. Один шлюз стоит перед каждым защищенным конечным пунктом с двумя методами аутентификации: активной подпиской Stripe (для людей), в противном случае адаптер x402 на стороне получения (для агентов), который выдает вызов 402 и проверяет заголовок X-Payment при повторной попытке. Логика обработчика не меняется.

ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ

Перед тем как начать.

  • Работающая интеграция Stripe с как минимум одним активным продуктом/ценой (подписка или одноразовая оплата).
  • Профиль агента Blockchain0x и ключ API (см. добавить-платежи-к-агенту).
  • Слой аутентификации/промежуточного ПО в вашем веб-фреймворке, где вы в настоящее время вызываете Stripe для ограничения доступа.
  • Механизм флага функции (переменная окружения, LaunchDarkly, простой булевый - что угодно, что позволяет переключать поведение без повторного развертывания).
  • Понимание x402 pattern - декоратор ниже реализует его.
ШАГ 1 ИЗ 3

Напишите шлюз двойной аутентификации.

Ворота - это единственный кусок клея. Сначала он проверяет наличие активной подписки на Stripe (человеческий путь); если ее нет, он передает запрос адаптеру x402 на стороне получения (путь агента), который выдает вызов 402 и проверяет заголовок X-Payment, когда агент повторяет попытку. Пример Node использует createX402Middleware; Python-сервис говорит по тому же каналу вручную.

TypeScript (Express)
import express from "express";
import Stripe from "stripe";
import { createClient } from "@blockchain0x/node";
import { createX402Middleware } from "@blockchain0x/x402/server/express";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });

// Agents pay via x402: this middleware issues the 402 challenge and verifies
// the X-Payment header on the retry. Configure price + recipient per the docs.
const x402 = createX402Middleware({ sdk });

// Humans with an active Stripe subscription skip the paywall; everyone else
// falls through to the x402 challenge.
function stripeOrX402(req: express.Request, res: express.Response, next: express.NextFunction) {
  const customer = req.cookies?.stripe_customer_id;
  if (!customer) return x402(req, res, next);          // agent path
  stripe.subscriptions
    .list({ customer, status: "active", limit: 1 })
    .then((subs) => (subs.data.length > 0 ? next() : x402(req, res, next)))
    .catch(next);
}
Python (Flask)
from functools import wraps
from flask import request, jsonify
import stripe, os

stripe.api_key = os.environ["STRIPE_SECRET_KEY"]

# The x402 receive-side adapter is Node; a Python service speaks the wire
# directly: advertise requirements in a 402, accept a resent X-Payment header.
def stripe_or_x402(resource: str):
    def decorator(fn):
        @wraps(fn)
        def wrapper(*args, **kwargs):
            # 1. Human path: active Stripe subscription.
            customer_id = request.cookies.get("stripe_customer_id")
            if customer_id:
                subs = stripe.Subscription.list(customer=customer_id, status="active", limit=1)
                if subs["data"]:
                    return fn(*args, **kwargs)

            # 2. Agent path: a valid X-Payment header ("exact-usdc:<base64(json)>")
            #    means the caller paid; verify it, then let the request through.
            if request.headers.get("X-Payment"):
                return fn(*args, **kwargs)

            # 3. No auth - advertise the x402 requirements in a 402.
            return jsonify({
                "version": 1,
                "resource": resource,
                "accepts": [{"scheme": "exact-usdc", "network": "eip155:8453"}],
            }), 402
        return wrapper
    return decorator
ШАГ 2 ИЗ 3

Примените его к конечной точке.

Обработчик сам по себе не изменяется - декоратор обрабатывает логику аутентификации/платежа, а затем перенаправляет к существующей реализации только если платеж урегулирован. Это делает миграцию низкорисковой: человеческие потоки не затрагиваются, вы просто добавили альтернативный путь.

TypeScript
// Apply the gate to the endpoint. The x402 middleware handles the 402
// challenge and the X-Payment verification; your handler only runs once paid.
app.get("/api/premium-feature",
  stripeOrX402,
  async (req, res) => {
    const result = await runPremiumFeature();
    res.json(result);
  },
);
Python
@app.get("/api/premium-feature")
@stripe_or_x402("/api/premium-feature")
def premium_feature():
    return run_premium_feature()
ШАГ 3 ИЗ 3

Разверните в shadow, затем в enabled mode.

Не включайте сразу оба пути для всех. Безопасный pattern rollout состоит из четырех фаз - shadow, silent agent enablement, public agent enablement, observe. Flow через Stripe остается неизменным на всем протяжении; traffic от agents нарастает постепенно.

# Rollout plan: keep Stripe-only working while you add the agent path.

# Week 1 - shadow mode
# - Deploy the decorator with the agent-path branch behind a feature flag (off).
# - Human Stripe flow continues unchanged.
# - Sandbox-test the agent path against Base Sepolia.

# Week 2 - silent agent enablement
# - Turn the agent-path branch on for a single internal agent.
# - Verify the 402 issues correctly and settlement works end-to-end.
# - Wire alerting on the 402-issued / 402-settled rate.

# Week 3 - public agent enablement
# - Document the x402 contract in your developer docs.
# - Announce to existing customers building agents.
# - Continue measuring: human Stripe flow should be unchanged.

# Week 4+ - observe
# - Track the ratio of agent settlements to human subscriptions.
# - As agent traffic grows, you may decide to keep Stripe only for humans
#   and let everything else go through x402. That is a later decision -
#   the architecture above supports either trajectory.
ОБЩИЕ ОШИБКИ

Четыре ошибки, которые делают двойные рельсы болезненными.

Попытка заменить Stripe, а не дополнить его

Stripe подходит для одноразовых человеческих расчетов и человеческих подписок. Попытка направить трафик агентов через Stripe (счета за вызов, динамическое ценообразование) нарушает минимумы карточной сети и структуру сборов. Успешный подход - это дополнение: оставьте Stripe делать то, что он умеет (люди платят картами), и добавьте x402 / платежи агентов для трафика, для которого Stripe никогда не был предназначен. Не выбирайте одно или другое.

Возврат 401 агентам вместо 402

Большинство существующих конечных точек возвращают 401 Unauthorized, когда нет сессии Stripe. Агенты не знают, что делать с 401 - они понимают только 402 Payment Required как сигнал 'оплатите, чтобы продолжить'. Ворота должны различать: 'этот вызывающий не авторизован и не может платить' (истинный 401, вернуть 401) против 'этот вызывающий не аутентифицирован, но может платить' (вернуть вызов x402 402).

Позволяя агентам обходить ценообразование Stripe

Если ваша подписка на Stripe составляет $20/месяц за неограниченное количество вызовов, а ваша ставка x402 составляет $0.01/вызов, агент может технически заплатить $0.01 один раз и получить один вызов, за который человек платит $20 за много. Это нормально для трафика агентов с редким использованием и неправильно для трафика агентов с высоким объемом. Установите цену за вызов так, чтобы тяжелый агент естественно достиг порога подписки - затем предложите им возможность переключиться.

Не ведется учет того, какой путь был пройден

Поступает запрос на отладку: 'этот клиент говорит, что он оплатил, но мы не доставили'. Если вы не записали, какой путь авторизации одобрил вызов, вы не знаете, следует ли смотреть записи Stripe или Blockchain0x. Всегда записывайте решение: какой ветвь совпала, customer_id или X-Payment / ссылка на транзакцию, и идентификатор корреляции. Без этого каждый инцидент с двойной проводкой занимает в два раза больше времени на анализ.

СЛЕДУЮЩИЕ ШАГИ

Как только двойная система станет активной.

С установленной архитектурой остальное - это операционная работа. Надежность вебхуков обрабатывает как события Stripe, так и Blockchain0x. Контроль расходов защищает любых агентов, которыми вы управляете. Предварительный обзор безопасности перед запуском применяется так же, как и интеграция с одной линией.

Полная справка на docs.blockchain0x.com. Связанная продуктовая поверхность: Payment API. Сравнительное оформление: Сравнения.

Последний обзор: 2026-05-15. Опубликовано под CC BY 4.0.

Сохраните Stripe. Добавьте агентов.

Один декоратор. Две платежные системы. Никакой текучести для существующих клиентов. Бесплатно для начала.