Migra da Stripe a Blockchain0x per l'accesso all'API guidato dagli agenti.
Non sostituire Stripe; eseguilo insieme. Un'unica porta si trova davanti a ciascun endpoint protetto con due metodi di autenticazione: un abbonamento Stripe attivo (per umani), altrimenti l'adattatore x402 per la ricezione (per agenti), che emette una sfida 402 e verifica l'intestazione X-Payment al secondo tentativo. La logica del gestore non cambia.
Prima di iniziare.
- Un'integrazione Stripe funzionante con almeno un prodotto/prezzo attivo (abbonamento o singolo).
- Un profilo agente Blockchain0x e una chiave API (vedi aggiungi pagamenti all'agente).
- Uno strato di autenticazione/middleware nel tuo framework web dove attualmente chiami Stripe per limitare l'accesso.
- Un meccanismo di flag delle funzionalità (variabile d'ambiente, LaunchDarkly, booleano semplice - qualsiasi cosa che ti consenta di attivare o disattivare il comportamento senza ridistribuire).
- Comprensione del x402 pattern - il decoratore qui sotto lo implementa.
Scrivi il gate di autenticazione duale.
Il gate è l'unico pezzo di collante. Controlla prima un abbonamento Stripe attivo (il percorso umano); se non ce n'è, passa la richiesta all'adattatore ricevente x402 (il percorso dell'agente), che emette la sfida 402 e verifica l'intestazione X-Payment quando l'agente riprova. L'esempio Node utilizza createX402Middleware; un servizio Python comunica sulla stessa linea a mano.
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);
}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 decoratorApplicalo all'endpoint.
Il gestore stesso non cambia - il decoratore gestisce la logica di autenticazione/pagamento, quindi inoltra all'implementazione esistente solo se il pagamento è stato regolato. Questo è ciò che rende la migrazione a basso rischio: i flussi umani rimangono intatti, hai solo aggiunto un percorso alternativo.
// 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);
},
);@app.get("/api/premium-feature")
@stripe_or_x402("/api/premium-feature")
def premium_feature():
return run_premium_feature()Rilascio in shadow, poi in modalità abilitata.
Non attivare entrambi i percorsi contemporaneamente per tutti. Il modello di rollout sicuro prevede quattro fasi - shadow, silent agent enablement, public agent enablement, observe. Il flusso Stripe resta invariato per tutto il tempo; il traffico degli agenti cresce gradualmente.
# 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.Quattro errori che rendono il dual-rail doloroso.
Cercando di sostituire Stripe piuttosto che aumentarlo
Stripe è corretto per i checkout umani una tantum e per gli abbonamenti umani. Cercare di forzare il traffico degli agenti attraverso Stripe (fatture per chiamata, prezzi dinamici) infrange i minimi delle reti di carte e le strutture delle commissioni. Il modello di successo è l'augmentazione: mantieni Stripe a fare ciò in cui è bravo (umani che pagano con carte) e aggiungi x402 / pagamenti per agenti per il traffico per cui Stripe non è mai stato progettato. Non scegliere uno o l'altro.
Restituzione di 401 agli agenti invece di 402
La maggior parte degli endpoint esistenti restituisce 401 Non autorizzato quando non c'è una sessione Stripe. Gli agenti non sanno cosa fare con il 401 - comprendono solo 402 Pagamento richiesto come segnale 'paga per procedere'. Il gate deve distinguere: 'questo chiamante non è autorizzato e non può pagare' (vero 401, restituisci 401) rispetto a 'questo chiamante non è autenticato ma può pagare' (restituisci la sfida x402 402).
Consentire agli agenti di bypassare i prezzi di Stripe
Se il tuo abbonamento Stripe è di $20/mese per chiamate illimitate e il tuo preventivo x402 è di $0,01/chiamata, un agente può tecnicamente pagare $0,01 una volta e ottenere una chiamata in cui un umano paga $20 per molte. Va bene per il traffico degli agenti a uso occasionale e non funziona per il traffico degli agenti ad alto volume. Imposta il prezzo per chiamata in modo che un agente pesante raggiunga naturalmente la soglia di abbonamento - quindi offri loro l'opzione di passare.
Non registrare quale percorso è stato preso
Una richiesta di debug arriva: 'questo cliente dice di aver pagato ma non abbiamo consegnato'. Se non hai registrato quale percorso di autenticazione ha approvato la chiamata, non sai se guardare i registri di Stripe o di Blockchain0x. Registra sempre la decisione: quale ramo ha corrisposto, il customer_id o il riferimento X-Payment / transazione, e un ID di correlazione. Senza di esso, ogni incidente a doppio binario richiede il doppio del tempo per essere triage.
Una volta che il dual-rail è attivo.
Con l'architettura in atto, il resto è operativo. La robustezza del webhook gestisce sia i flussi di eventi di Stripe che quelli di Blockchain0x. I controlli di spesa proteggono qualsiasi agente tu gestisca. La revisione della sicurezza pre-lancio si applica proprio come un'integrazione a singola rotaia.
I modelli di webhook di cui i programmatori chiedono di più
Imposta controlli di spesa per l'agente che sopravvivono all'iniezione di prompt
Metti in sicurezza il tuo portafoglio agente prima di andare live
Riferimento completo su docs.blockchain0x.com. Superficie di prodotto correlata: Payment API. Quadro di confronto: Confronti.