Saltar al contenido principal
AprenderGuíasPruebe los pagos de agentes sin dinero real
GUÍA

Prueba pagos de agentes sin dinero real.

12 minutos
RESPUESTA CORTA

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.

REQUISITOS PREVIOS

Antes de comenzar.

  • Una integración funcional en vivo (o al menos con forma de vivo) - consulta agregar pagos al agente.
  • Una clave API sk_test_ y un secreto de firma de prueba correspondiente desde el panel.
  • ngrok (o cualquier túnel HTTPS) para la entrega de webhook en tiempo de desarrollo.
  • Un entorno de desarrollo separado - variables de entorno distintas, base de datos distinta (o al menos tablas distintas), URL de webhook distinta.
  • Comodidad con la guía de patrones de webhook - esta guía asume que tienes un controlador para probar.
PASO 1 DE 5

Cambia a una clave de prueba.

Una clave sk_test_ transacciona en Base Sepolia; una clave sk_live_ transacciona en la mainnet de Base. El prefijo elige la red - no hay una variable de entorno de red separada, y una clave de prueba no puede mover fondos de la mainnet. Así que todo lo que cambias para un entorno de desarrollo es la clave (y el secreto del webhook de prueba).

# .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
PASO 2 DE 5

Financia la billetera del agente desde el grifo.

El USDC de prueba no tiene valor monetario pero se comporta como un USDC real: mismas formas de respuesta, mismo seguimiento de saldo. No hay llamada SDK que lo acuñe - financias la dirección de la billetera del agente desde el grifo público de USDC de Base Sepolia. Encuentra la dirección en el panel o en la página pública del agente (o lee el agente con el SDK), luego pégala en el grifo.

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"])
PASO 3 DE 5

Realiza un pago de prueba real.

Con la billetera financiada, llama a payments.create en tu clave sk_test_. Es una transferencia real en Base Sepolia utilizando fondos de prueba, y activa el webhook payment.received exactamente como lo haría mainnet - así que ejercitas la ruta de código real, no una simulación. Observa cómo el evento llega a tu manejador tunelado.

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

Tres escenarios para ejercitar como mínimo: un pago que llega (el camino feliz, payment.received), un pago que nunca llega (apunta el webhook a una URL muerta y confirma que tu barrido de reconciliación captura el trabajo atascado - el camino que la mayoría de los equipos ignoran), y un reintento de webhook (fuerza un 500 la primera vez y 200 la segunda, luego verifica que tu idempotencia omitió el trabajo duplicado).

PASO 4 DE 5

Túnel de webhooks a su controlador local.

Los pagos de prueba envían webhooks reales a cualquier URL que hayas configurado para el webhook de prueba. Para el desarrollo local, dale un túnel HTTPS a tu laptop. ngrok es la opción más sencilla; cualquier herramienta de túnel inverso funciona.

# 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.

Las pruebas y el uso en vivo utilizan claves separadas y configuración de webhook separada, por lo que puedes dejar la producción apuntando a tu verdadero punto final mientras tu túnel local maneja eventos de prueba.

PASO 5 DE 5

Fallar rápido en claves mal configuradas.

El incidente de producción más común relacionado con claves de prueba/vivas es silencioso: un despliegue llega con una clave de prueba, no llegan pagos, las alertas solo se activan después del siguiente día hábil. Bloquea esto al inicio: rechaza iniciar si las variables de entorno y el prefijo de la clave no coinciden.

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.")
ERRORES COMUNES

Cinco errores de prueba que duelen después.

Olvidando que Base Sepolia es su propia cadena

Una clave sk_test_ transacciona en Base Sepolia, no en la mainnet de Base. Los exploradores de bloques, las direcciones de billetera y los tokens de gas son todos separados. Una confusión común es copiar una dirección real de Base en una prueba, ver que falla y pensar que la API está rota. Financia la dirección de la billetera del agente desde el grifo de USDC de Base Sepolia y paga direcciones que existen en esa cadena.

No probando los caminos de fallo

La mayoría de los equipos prueban el camino feliz - un pago que activa payment.received - luego envían y descubren más tarde que su camino no pagado está roto. Ejercítalo: apunta el webhook a una URL muerta y confirma que tu barrido de conciliación captura el trabajo atascado, fuerza un 500 desde tu controlador y verifica que el reintento sea idempotente, y verifica que el 503 de payments.create (adaptador de cadena no conectado) se maneje. Los entornos de prueba son baratos; la depuración en producción es costosa.

URL de webhook aún apuntando a ngrok en producción

Cambiar los prefijos de clave es fácil de recordar; actualizar la URL del webhook es fácil de olvidar. Si vas en vivo con la URL aún apuntando al túnel ngrok desde tu computadora portátil, el primer pago de producción dispara un webhook en el vacío. Trata el cambio de URL del webhook como parte de la lista de verificación de implementación, no como un ajuste único.

Confiando en el tiempo de testnet como un proxy para el tiempo en vivo

Base Sepolia no se comporta de manera idéntica a la red principal de Base - el tiempo de bloque y la congestión difieren. No utilices testnet para probar la capacidad de la red principal, y no asumas que la latencia de tu testnet es lo que verás en producción. Cuando necesites números reales, ejecuta una prueba de humo de red principal de pequeña cantidad con una clave sk_live_.

Dejando elementos de prueba en bases de datos compartidas

Si tus entornos de desarrollo y producción comparten una base de datos (no lo hagan), los eventos de prueba aterrizan en la misma tabla que los eventos en vivo y rompen tu deduplicación de idempotencia (el prefijo del ID de evento es diferente pero la fila es real). Como mínimo, aísla la tabla webhook_events por entorno. Mejor: bases de datos completamente separadas. Esta es una de esas reglas que parece excesiva hasta que muerde una vez.

PRÓXIMOS PASOS

Una vez que el bucle de prueba esté en tu ciclo de desarrollo.

Con un bucle de prueba saludable en su lugar, el trabajo restante es principalmente endurecimiento: manejo confiable de webhooks bajo carga, una lista de verificación de seguridad final y migraciones de cualquier proveedor de pago anterior que puedas estar utilizando.

Referencia completa en docs.blockchain0x.com. Detalles de Testnet: glosario de la cadena Base. Superficie del producto: API de Pago.

Última revisión: 2026-05-15. Publicado bajo CC BY 4.0.

Pruébalo antes de enviarlo.

Sandbox completo: claves de prueba, Base Sepolia, ciclo de vida simulable. Gratis.