Ir para o conteúdo principal
AprenderGuiasTeste pagamentos de agentes sem dinheiro real
GUIA

Teste pagamentos de agentes sem dinheiro real.

12 minutos
RESPOSTA CURTA

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.

PRÉ-REQUISITOS

Antes de você começar.

  • Uma integração funcional ao vivo (ou pelo menos com formato ao vivo) - veja adicionar pagamentos ao agente.
  • Uma chave de API sk_test_ e um segredo de assinatura de teste correspondente do painel.
  • ngrok (ou qualquer túnel HTTPS) para entrega de webhook em tempo de desenvolvimento.
  • Um ambiente de desenvolvimento separado - variáveis de ambiente distintas, banco de dados distinto (ou pelo menos tabelas distintas), URL de webhook distinta.
  • Conforto com o guia de padrões de webhook - este guia assume que você tem um manipulador para testar.
PASSO 1 DE 5

Mude para uma chave de teste.

Uma chave sk_test_ transaciona na Base Sepolia; uma chave sk_live_ transaciona na mainnet da Base. O prefixo escolhe a rede - não há variável de ambiente de rede separada, e uma chave de teste não pode mover fundos da mainnet. Portanto, tudo o que você muda para um ambiente de desenvolvimento é a chave (e o segredo do webhook de teste).

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

Financie a carteira do agente a partir da torneira.

O USDC de teste não tem valor monetário, mas se comporta como USDC ao vivo: mesmas formas de resposta, mesmo rastreamento de saldo. Não há chamada SDK que o gera - você financia o endereço da carteira do agente a partir da torneira pública USDC Base Sepolia. Encontre o endereço no painel ou na página pública do agente (ou leia o agente com o SDK), depois cole na torneira.

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 DE 5

Faça um pagamento de teste real.

Com a carteira financiada, chame payments.create na sua chave sk_test_. É uma transferência real no Base Sepolia usando fundos de teste, e dispara o webhook payment.received exatamente como a mainnet faria - então você exercita o caminho de código real, não uma simulação. Observe o evento chegar ao seu manipulador 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

Três cenários para exercitar no mínimo: um pagamento que chega (o caminho feliz, payment.received), um pagamento que nunca chega (aponte o webhook para uma URL morta e confirme que sua varredura de reconciliação captura o trabalho preso - o caminho que a maioria das equipes ignora) e uma nova tentativa de webhook (force um 500 na primeira vez e 200 na segunda, então verifique se sua idempotência pulou o trabalho duplicado).

PASSO 4 DE 5

Tunelize webhooks para seu manipulador local.

Pagamentos de teste enviam webhooks reais para qualquer URL que você configurou para o webhook de teste. Para desenvolvimento local, forneça um túnel HTTPS para seu laptop. ngrok é a opção mais simples; qualquer ferramenta de túnel reverso 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.

Teste e uso ao vivo utilizam chaves separadas e configuração de webhook separada, para que você possa deixar a produção apontada para seu endpoint real enquanto seu túnel local lida com eventos de teste.

PASSO 5 DE 5

Falhe rapidamente em chaves mal configuradas.

O incidente de produção mais comum em torno de chaves de teste/produção é silencioso: uma implementação chega com uma chave de teste, nenhum pagamento passa, alertas só disparam após o próximo dia útil. Bloqueie isso na inicialização: recuse-se a iniciar se as variáveis de ambiente e o prefixo da chave não corresponderem.

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.")
ARMADILHAS COMUNS

Cinco erros de teste que doem depois.

Esquecendo que a Base Sepolia é sua própria cadeia

Uma chave sk_test_ transaciona na Base Sepolia, não na mainnet da Base. Os exploradores de blocos, os endereços das carteiras e os tokens de gás são todos separados. Uma confusão comum é copiar um endereço real da Base para um teste, ver falhar e pensar que a API está quebrada. Financie o endereço da carteira do agente a partir da torneira de USDC da Base Sepolia e pague endereços que existem nessa cadeia.

Não testando os caminhos de falha

A maioria das equipes testa o caminho feliz - um pagamento que dispara payment.received - depois envia e descobre mais tarde que seu caminho não pago está quebrado. Exercite-o: aponte o webhook para uma URL inativa e confirme que sua varredura de reconciliação captura o trabalho preso, force um 500 do seu manipulador e verifique se a nova tentativa é idempotente, e verifique se o 503 de payments.create (adaptador de cadeia não conectado) é tratado. Ambientes de teste são baratos; depuração em produção é cara.

URL do webhook ainda apontando para ngrok em produção

Mudar os prefixos das chaves é fácil de lembrar; atualizar a URL do webhook é fácil de esquecer. Se você entrar em produção com a URL ainda apontando para o túnel ngrok do seu laptop, o primeiro pagamento de produção dispara um webhook no vazio. Trate a mudança da URL do webhook como parte da lista de verificação de implantação, não como uma configuração única.

Confiando no tempo da testnet como um proxy para o tempo real

Base Sepolia não se comporta de forma idêntica à mainnet Base - o tempo de bloco e a congestão diferem. Não use testnet para testar a capacidade da mainnet, e não assuma que sua latência de testnet é o que você verá em produção. Quando precisar de números reais, execute um teste de fumaça de pequena quantia na mainnet com uma chave sk_live_.

Deixando fixtures de teste em bancos de dados compartilhados

Se seus ambientes de desenvolvimento e produção compartilharem um banco de dados (não compartilhe), eventos de teste cairão na mesma tabela que eventos ao vivo e quebrarão sua deduplicação de idempotência (o prefixo do ID do evento é diferente, mas a linha é real). No mínimo, isole a tabela webhook_events por ambiente. Melhor: bancos de dados separados completamente. Esta é uma daquelas regras que parecem excessivas até que causem problemas uma vez.

PRÓXIMOS PASSOS

Uma vez que o loop de teste está no seu ciclo de desenvolvimento.

Com um loop de teste saudável em funcionamento, o trabalho restante é principalmente de fortalecimento: manipulação confiável de webhook sob carga, uma lista de verificação de segurança final e migrações de qualquer provedor de pagamento anterior que você possa estar usando.

Referência completa em docs.blockchain0x.com. Detalhes da Testnet: Glossário da cadeia Base. Superfície do produto: API de Pagamento.

Última revisão: 2026-05-15. Publicado sob CC BY 4.0.

Teste antes de enviar.

Sandbox completa: chaves de teste, Base Sepolia, ciclo de vida simulável. Gratuito.