Zum Hauptinhalt springen
LernenLeitfädenTesten Sie Agentenzahlungen ohne echtes Geld
LEITFADEN

Testen Sie Agentenzahlungen ohne echtes Geld.

12 Minuten
KURZE ANTWORT

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.

VORAUSSETZUNGEN

Bevor Sie beginnen.

  • Eine funktionierende Integration in Live (oder zumindest live-ähnlich) - siehe add-payments-to-agent.
  • Ein sk_test_ API-Schlüssel und das passende Testunterzeichnungsgeheimnis vom Dashboard.
  • ngrok (oder ein beliebiger HTTPS-Tunnel) für die Bereitstellung von Webhooks während der Entwicklungszeit.
  • Eine separate Entwicklungsumgebung - unterschiedliche Umgebungsvariablen, unterschiedliche Datenbank (oder zumindest unterschiedliche Tabellen), unterschiedliche Webhook-URL.
  • Komfort mit dem Webhook-Musterleitfaden - dieser Leitfaden geht davon aus, dass Sie einen Handler zum Testen haben.
SCHRITT 1 VON 5

Wechseln Sie zu einem Testschlüssel.

Ein sk_test_-Schlüssel transaktiert auf Base Sepolia; ein sk_live_-Schlüssel transaktiert auf dem Base-Mainnet. Das Präfix wählt das Netzwerk - es gibt keine separate Netzwerk-Umgebungsvariable, und ein Testschlüssel kann keine Mainnet-Gelder bewegen. Daher ändern Sie für eine Entwicklungsumgebung nur den Schlüssel (und das Test-Webhook-Geheimnis).

# .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
SCHRITT 2 VON 5

Finanzieren Sie die Wallet des Agenten von der Wasserstelle.

Test-USDC hat keinen monetären Wert, verhält sich aber ansonsten wie echtes USDC: dieselben Antwortformen, dieselbe Kontoverfolgung. Es gibt keinen SDK-Aufruf, der es prägt - Sie finanzieren die Wallet-Adresse des Agenten aus dem öffentlichen Base Sepolia USDC-Faucet. Finden Sie die Adresse im Dashboard oder auf der öffentlichen Seite des Agenten (oder lesen Sie den Agenten mit dem SDK), und fügen Sie sie dann in den Faucet ein.

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"])
SCHRITT 3 VON 5

Führen Sie eine echte Testzahlung durch.

Mit der finanzierten Wallet rufen Sie payments.create mit Ihrem sk_test_-Schlüssel auf. Es handelt sich um eine echte Überweisung auf Base Sepolia mit Testmitteln, und es löst das payment.received-Webhooks genau so aus, wie es das Mainnet tun würde - sodass Sie den tatsächlichen Codepfad ausüben, nicht eine Simulation. Sehen Sie zu, wie das Ereignis bei Ihrem tunnellierten Handler ankommt.

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

Drei Szenarien, die mindestens geübt werden müssen: eine Zahlung, die ankommt (der glückliche Weg, payment.received), eine Zahlung, die niemals ankommt (weisen Sie das Webhook auf eine tote URL und bestätigen Sie, dass Ihr Versöhnungssweep den steckengebliebenen Job erfasst - den Weg, den die meisten Teams ignorieren), und einen Webhook-Wiederholungsversuch (erzwingen Sie beim ersten Mal einen 500 und beim zweiten Mal einen 200, und überprüfen Sie dann, ob Ihre Idempotenz die doppelte Arbeit übersprungen hat).

SCHRITT 4 VON 5

Tunnel-Webhooks zu Ihrem lokalen Handler.

Testzahlungen senden echte Webhooks an die URL, die Sie für den Test-Webhook konfiguriert haben. Für die lokale Entwicklung geben Sie ihm einen HTTPS-Tunnel zu Ihrem Laptop. ngrok ist die einfachste Option; jedes Reverse-Tunnel-Tool funktioniert.

# 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- und Live-Nutzung verwenden separate Schlüssel und separate Webhook-Konfigurationen, sodass Sie die Produktion auf Ihren echten Endpunkt zeigen lassen können, während Ihr lokaler Tunnel Testereignisse verarbeitet.

SCHRITT 5 VON 5

Schnell scheitern bei falsch konfigurierten Schlüsseln.

Der häufigste Produktionsvorfall bei Test-/Live-Keys ist still: Ein Deployment erfolgt mit einem Test-Key, keine Zahlungen gehen durch, Warnungen werden erst am nächsten Geschäftstag ausgelöst. Blockieren Sie dies beim Booten: Weigern Sie sich zu starten, wenn die Umgebung und das Key-Präfix nicht übereinstimmen.

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.")
HÄUFIGE FALLSTRICK

Fünf Testfehler, die später Probleme verursachen.

Vergessen, dass Base Sepolia eine eigene Kette ist

Ein sk_test_-Schlüssel transaktiert auf Base Sepolia, nicht auf dem Base-Mainnet. Die Block-Explorer, die Wallet-Adressen und die Gas-Token sind alle getrennt. Eine häufige Verwirrung besteht darin, eine echte Base-Adresse in einen Test zu kopieren, zu beobachten, wie sie fehlschlägt, und zu denken, die API sei defekt. Finanzieren Sie die Wallet-Adresse des Agenten aus dem Base Sepolia USDC-Faucet und zahlen Sie Adressen, die auf dieser Kette existieren.

Nicht die Fehlerpfade testen

Die meisten Teams testen den glücklichen Pfad - eine Zahlung, die payment.received auslöst - und stellen dann fest, dass ihr nicht-bezahlter Pfad defekt ist. Üben Sie es: Zeigen Sie den Webhook auf eine tote URL und bestätigen Sie, dass Ihr Abgleich die hängende Aufgabe erfasst, erzwingen Sie eine 500 von Ihrem Handler und überprüfen Sie, ob der Retry idempotent ist, und prüfen Sie, ob payments.create's 503 (Chain-Adapter nicht verbunden) behandelt wird. Testumgebungen sind billig; Produktionsdebugging ist teuer.

Webhook-URL zeigt immer noch auf ngrok in der Produktion

Das Wechseln von Schlüsselpräfixen ist leicht zu merken; das Aktualisieren der Webhook-URL ist leicht zu vergessen. Wenn Sie live gehen, während die URL noch auf den ngrok-Tunnel von Ihrem Laptop zeigt, sendet die erste Produktionszahlung einen Webhook ins Leere. Behandeln Sie die Änderung der Webhook-URL als Teil der Bereitstellungsliste, nicht als einmalige Einstellung.

Testnet-Zeit als Proxy für Live-Zeit vertrauen.

Base Sepolia verhält sich nicht identisch wie das Base-Hauptnetz - Blockzeiten und Stau unterscheiden sich. Verwenden Sie das Testnetz nicht, um die Durchsatzrate des Hauptnetzes zu testen, und gehen Sie nicht davon aus, dass Ihre Testnetz-Latenz dem entspricht, was Sie in der Produktion sehen werden. Wenn Sie echte Zahlen benötigen, führen Sie einen kleinen Hauptnetz-Rauchtest mit einem sk_live_-Schlüssel durch.

Testfixtures in gemeinsamen Datenbanken belassen

Wenn Ihre Entwicklungs- und Produktionsumgebungen eine Datenbank teilen (tun Sie das nicht), landen Testereignisse in derselben Tabelle wie Live-Ereignisse und brechen Ihre Idempotenz-Deduplizierung (das Ereignis-ID-Präfix ist unterschiedlich, aber die Zeile ist echt). Mindestens sollten Sie die webhook_events-Tabelle pro Umgebung isolieren. Besser: vollständig separate Datenbanken. Dies ist eine dieser Regeln, die übertrieben erscheinen, bis sie einmal zuschlägt.

NÄCHSTE SCHRITTE

Sobald die Testschleife in Ihrem Entwicklungszyklus ist.

Mit einem gesunden Testloop ist die verbleibende Arbeit hauptsächlich das Härtung: zuverlässige Webhook-Verarbeitung unter Last, eine abschließende Sicherheitscheckliste und Migrationen von jedem vorherigen Zahlungsanbieter, den Sie möglicherweise parallel betreiben.

Vollständige Referenz unter docs.blockchain0x.com. Testnet-Details: Base chain glossary. Produktoberfläche: Payment API.

Letzte Überprüfung: 2026-05-15. Veröffentlicht unter CC BY 4.0.

Testen Sie es, bevor Sie es versenden.

Vollständige Sandbox: Testschlüssel, Base Sepolia, simulierbarer Lebenszyklus. Kostenlos.