Salta al contenuto principale
ImparaGuideTesta i pagamenti degli agenti senza denaro reale
GUIDA

Testa i pagamenti degli agenti senza denaro reale.

12 minuti
RISPOSTA BREVE

Swap your API key for a sk_test_ key - that alone puts you on Base Sepolia. Fund the agent's wallet from the public Base Sepolia USDC faucet, make a real test payment with payments.create (test funds, no real money), and tunnel your local webhook through ngrok. The response shapes match live, so a flow that passes in test passes in production. Exercise the failure paths, not just the happy one.

PREREQUISITI

Prima di iniziare.

  • Un'integrazione funzionante in live (o almeno simile a live) - vedi aggiungi pagamenti all'agente.
  • Una chiave API sk_test_ e un segreto di firma di test corrispondente dal dashboard.
  • ngrok (o qualsiasi tunnel HTTPS) per la consegna dei webhook in fase di sviluppo.
  • Un ambiente di sviluppo separato - variabili d'ambiente distinte, database distinti (o almeno tabelle distinte), URL webhook distinti.
  • Comfort con la guida ai modelli di webhook - questa guida presuppone che tu abbia un gestore da testare.
PASSO 1 DI 5

Passa a una chiave di test.

Una chiave sk_test_ transaziona su Base Sepolia; una chiave sk_live_ transaziona su Base mainnet. Il prefisso sceglie la rete - non c'è una variabile di ambiente di rete separata, e una chiave di test non può muovere fondi mainnet. Quindi tutto ciò che cambi per un ambiente di sviluppo è la chiave (e il segreto del webhook di test).

# .env.development
# A sk_test_ key picks Base Sepolia automatically - there is no network env var.
BLOCKCHAIN0X_API_KEY=sk_test_01J9...
BLOCKCHAIN0X_WEBHOOK_SECRET=...   # the test webhook's secret, from the dashboard
PASSO 2 DI 5

Finanzia il portafoglio dell'agente dal rubinetto.

L'USDC di test non ha valore monetario ma si comporta come l'USDC reale: stesse forme di risposta, stesso tracciamento del saldo. Non esiste una chiamata SDK che lo genera - finanzi l'indirizzo wallet dell'agente dal rubinetto pubblico USDC di Base Sepolia. Trova l'indirizzo nel dashboard o nella pagina pubblica dell'agente (o leggi l'agente con l'SDK), quindi incollalo nel rubinetto.

TypeScript
import { createClient } from "@blockchain0x/node";

const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); // sk_test_

// Look up the agent; its wallet address is shown in the dashboard and on the
// agent's public page. Fund THAT address from the Base Sepolia USDC faucet -
// there is no SDK call that mints test funds.
const agent = await client.agents.get("agt_123");
console.log(agent.id);
Python
from blockchain0x import Client

client = Client()  # reads BLOCKCHAIN0X_API_KEY (sk_test_)

# The agent's wallet address is in the dashboard / on its public page.
# Paste it into the public Base Sepolia USDC faucet to fund it.
agent = client.agents.get("agt_123")
print(agent["id"])
PASSO 3 DI 5

Effettua un pagamento di prova reale.

Con il wallet finanziato, chiama payments.create sulla tua chiave sk_test_. È un trasferimento reale su Base Sepolia utilizzando fondi di test, e attiva il webhook payment.received esattamente come farebbe mainnet - così eserciti il percorso del codice reale, non una simulazione. Guarda l'evento arrivare al tuo gestore tunnelato.

TypeScript
// On a sk_test_ key this is a REAL transfer on Base Sepolia (test funds, no
// real money). It fires the payment.received webhook just like mainnet does.
const tx = await client.payments.create({
  agentId: "agt_123",
  to: "0xRecipientOnSepolia",
  amountWei: "10000", // 0.01 USDC
});

console.log(tx); // watch payment.received arrive at your webhook
Python
tx = client.payments.create(body={
    "agentId": "agt_123",
    "to": "0xRecipientOnSepolia",
    "amountWei": "10000",  # 0.01 USDC
})

print(tx)  # watch payment.received arrive at your webhook

Tre scenari da esercitare come minimo: un pagamento che arriva (il percorso felice, payment.received), un pagamento che non arriva mai (punta il webhook a un URL morto e conferma che la tua pulizia di riconciliazione cattura il lavoro bloccato - il percorso che la maggior parte dei team ignora), e un retry del webhook (forza un 500 la prima volta e 200 la seconda, quindi verifica che la tua idempotenza abbia saltato il lavoro duplicato).

PASSO 4 DI 5

Tunnelizza i webhook al tuo gestore locale.

I pagamenti di test inviano webhook reali a qualsiasi URL tu abbia configurato per il webhook di test. Per lo sviluppo locale, forniscigli un tunnel HTTPS al tuo laptop. ngrok è l'opzione più semplice; qualsiasi strumento di tunnel inverso funziona.

# Tunnel your local webhook endpoint to a public HTTPS URL.
$ ngrok http 3000

# Forwarding   https://abc123.ngrok.app -> http://localhost:3000

# Paste the URL in the dashboard under Webhooks for your test
# environment - test and live keep separate webhook config.

Test e utilizzo in produzione richiedono chiavi separate e configurazioni webhook separate, quindi puoi lasciare la produzione puntata al tuo endpoint reale mentre il tuo tunnel locale gestisce gli eventi di test.

PASSO 5 DI 5

Fallisci rapidamente su chiavi configurate in modo errato.

L'incidente di produzione più comune riguardo le chiavi di test/live è silenzioso: un deploy arriva con una chiave di test, nessun pagamento passa, gli avvisi si attivano solo dopo il giorno lavorativo successivo. Blocca questo all'avvio: rifiuta di avviarsi se l'ambiente e il prefisso della chiave non corrispondono.

TypeScript
// Fail fast if test/live get mixed up.
const apiKey = process.env.BLOCKCHAIN0X_API_KEY!;
const env = process.env.NODE_ENV;

if (env === "production" && apiKey.startsWith("sk_test_")) {
  throw new Error("Test key in production environment - aborting boot.");
}
if (env !== "production" && apiKey.startsWith("sk_live_")) {
  throw new Error("Live key in non-production environment - aborting boot.");
}
Python
import os, sys

api_key = os.environ["BLOCKCHAIN0X_API_KEY"]
env = os.environ.get("ENV", "development")

if env == "production" and api_key.startswith("sk_test_"):
    sys.exit("Test key in production environment - aborting boot.")
if env != "production" and api_key.startswith("sk_live_"):
    sys.exit("Live key in non-production environment - aborting boot.")
ERRORI COMUNI

Cinque errori di test che mordono in seguito.

Dimenticare che Base Sepolia è la sua catena

Una chiave sk_test_ transaziona su Base Sepolia, non su Base mainnet. Gli esploratori di blocchi, gli indirizzi dei wallet e i token di gas sono tutti separati. Una confusione comune è copiare un vero indirizzo Base in un test, vederlo fallire e pensare che l'API sia rotta. Finanzia l'indirizzo del wallet dell'agente dal rubinetto USDC di Base Sepolia e paga indirizzi che esistono su quella catena.

Non testare i percorsi di errore

La maggior parte dei team testa il percorso felice - un pagamento che attiva payment.received - poi spedisce e scopre più tardi che il loro percorso non pagato è rotto. Esercitalo: punta il webhook a un URL morto e conferma che la tua riconciliazione cattura il lavoro bloccato, forza un 500 dal tuo gestore e verifica che il retry sia idempotente, e controlla che il 503 di payments.create (adattatore della catena non collegato) venga gestito. Gli ambienti di test sono economici; il debug in produzione è costoso.

URL del webhook ancora puntato a ngrok in produzione

Cambiare i prefissi delle chiavi è facile da ricordare; aggiornare l'URL del webhook è facile da dimenticare. Se vai live con l'URL ancora puntato al tunnel ngrok dal tuo laptop, il primo pagamento di produzione attiva un webhook nel vuoto. Tratta il cambiamento dell'URL del webhook come parte della checklist di distribuzione, non come un'impostazione una tantum.

Fidarsi del tempo del testnet come proxy per il tempo reale

Base Sepolia non si comporta in modo identico a Base mainnet - il timing dei blocchi e la congestione differiscono. Non utilizzare testnet per testare il throughput di mainnet, e non assumere che la latenza di testnet sia quella che vedrai in produzione. Quando hai bisogno di numeri reali, esegui un test di fumo su mainnet con un sk_live_ key di piccola entità.

Lasciare fixture di test in database condivisi

Se i tuoi ambienti di sviluppo e produzione condividono un database (non farlo), gli eventi di test atterrano nella stessa tabella degli eventi live e rompono la tua deduplica di idempotenza (il prefisso dell'ID evento è diverso ma la riga è reale). Al minimo, isola la tabella webhook_events per ambiente. Meglio: separa completamente i DB. Questa è una di quelle regole che sembrano eccessive finché non colpisce una volta.

PROSSIMI PASSI

Una volta che il ciclo di test è nel tuo ciclo di sviluppo.

Con un ciclo di test sano in atto, il lavoro rimanente è principalmente di indurimento: gestione affidabile dei webhook sotto carico, una checklist di sicurezza finale e migrazioni da qualsiasi fornitore di pagamento precedente che potresti avere in esecuzione.

Riferimento completo su docs.blockchain0x.com. Dettagli della testnet: Glossario della catena Base. Superficie del prodotto: API di pagamento.

Ultima revisione: 2026-05-15. Pubblicato sotto CC BY 4.0.

Testalo prima di spedirlo.

Sandbox completa: chiavi di test, Base Sepolia, ciclo di vita simulabile. Gratuito.