실제 돈 없이 에이전트 결제를 테스트하세요.
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.
시작하기 전에.
- 실시간(또는 최소한 실시간 형태)의 작동 통합 - add-payments-to-agent를 참조하세요.
- 대시보드에서
sk_test_API 키와 일치하는 테스트 서명 비밀. - 개발 시간 웹훅 전달을 위한 ngrok(또는 기타 HTTPS 터널).
- 별도의 개발 환경 - 고유한 환경 변수, 고유한 데이터베이스(또는 최소한 고유한 테이블), 고유한 웹후크 URL.
- 웹훅 패턴 가이드에 대한 편안함 - 이 가이드는 테스트할 핸들러가 있다고 가정합니다.
테스트 키로 전환하십시오.
sk_test_ 키는 Base Sepolia에서 거래되며; sk_live_ 키는 Base 메인넷에서 거래됩니다. 접두사가 네트워크를 선택합니다 - 별도의 네트워크 환경 변수가 없으며, 테스트 키는 메인넷 자금을 이동할 수 없습니다. 따라서 개발 환경에서 변경하는 것은 키(및 테스트 웹훅 비밀)뿐입니다.
# .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수도꼭지에서 에이전트의 지갑에 자금을 지원합니다.
테스트 USDC는 금전적 가치는 없지만 실제 USDC처럼 작동합니다: 동일한 응답 형식, 동일한 잔액 추적. 이를 발행하는 SDK 호출은 없습니다 - 공개 Base Sepolia USDC 수도에서 에이전트의 지갑 주소에 자금을 지원합니다. 대시보드나 에이전트의 공개 페이지에서 주소를 찾은 후 수도에 붙여넣으십시오.
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);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"])실제 테스트 결제를 하세요.
지갑에 자금이 충전되면 sk_test_ 키에서 payments.create를 호출하세요. 이는 테스트 자금을 사용하여 Base Sepolia에서 실제 전송이며, 메인넷과 동일하게 payment.received 웹훅이 발사됩니다 - 따라서 실제 코드 경로를 실행하는 것이지, 시뮬레이션이 아닙니다. 이벤트가 터널링된 핸들러에 도착하는 것을 지켜보세요.
// 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 webhooktx = client.payments.create(body={
"agentId": "agt_123",
"to": "0xRecipientOnSepolia",
"amountWei": "10000", # 0.01 USDC
})
print(tx) # watch payment.received arrive at your webhook최소한 연습할 세 가지 시나리오: 결제가 이루어지는 경우(행복한 경로, payment.received), 결제가 이루어지지 않는 경우(웹훅을 죽은 URL로 지정하고 조정 스윕이 멈춘 작업을 잡는지 확인 - 대부분의 팀이 무시하는 경로), 그리고 웹훅 재시도(첫 번째에는 500을 강제로, 두 번째에는 200을 강제로, 그런 다음 idempotency가 중복 작업을 건너뛰었는지 확인).
웹훅을 로컬 핸들러로 터널링합니다.
테스트 결제는 테스트 웹훅을 위해 구성한 URL로 실제 웹훅을 보냅니다. 로컬 개발을 위해 노트북에 HTTPS 터널을 제공하십시오. ngrok이 가장 간단한 옵션이며, 어떤 리버스 터널 도구도 작동합니다.
# 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.테스트와 라이브는 별도의 키와 별도의 웹훅 구성을 사용하므로 실제 엔드포인트를 가리키는 프로덕션을 두고 로컬 터널이 테스트 이벤트를 처리할 수 있습니다.
잘못 구성된 키에서 빠르게 실패하세요.
테스트/실시간 키와 관련된 가장 일반적인 프로덕션 사건은 조용합니다: 배포가 테스트 키로 이루어지고, 결제가 들어오지 않으며, 알림은 다음 영업일 이후에만 발생합니다. 부팅 시 이를 차단하십시오: env와 키 접두사가 일치하지 않으면 시작을 거부합니다.
// 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.");
}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.")나중에 문제를 일으키는 다섯 가지 테스트 실수.
Base Sepolia가 자체 체인이라는 것을 잊지 마세요.
sk_test_ 키는 Base Sepolia에서 거래되며, Base 메인넷이 아닙니다. 블록 탐색기, 지갑 주소 및 가스 토큰은 모두 별개입니다. 일반적인 혼동은 실제 Base 주소를 테스트에 복사하여 실패하는 것을 보고 API가 고장났다고 생각하는 것입니다. Base Sepolia USDC 수조에서 에이전트의 지갑 주소에 자금을 조달하고 해당 체인에 존재하는 주소에 지불하세요.
실패 경로 테스트하지 않음
대부분의 팀은 행복한 경로를 테스트합니다 - payment.received를 발생시키는 결제 - 그런 다음 배포하고 나중에 결제되지 않은 경로가 깨졌음을 발견합니다. 이를 실행해보세요: 웹훅을 죽은 URL에 지정하고 조정 스윕이 막힌 작업을 잡는지 확인하고, 핸들러에서 500을 강제로 발생시켜 재시도가 멱등성을 유지하는지 확인하고, payments.create의 503 (체인 어댑터가 연결되지 않음)이 처리되는지 확인하세요. 테스트 환경은 저렴하지만, 프로덕션 디버깅은 비쌉니다.
웹후크 URL이 여전히 프로덕션에서 ngrok을 가리키고 있습니다
키 접두사를 전환하는 것은 기억하기 쉽지만, 웹후크 URL을 업데이트하는 것은 잊기 쉽습니다. URL이 여전히 노트북의 ngrok 터널을 가리키고 있는 상태에서 라이브로 전환하면 첫 번째 프로덕션 결제가 웹후크를 공허로 발사합니다. 웹후크 URL 변경을 일회성 설정이 아닌 배포 체크리스트의 일부로 취급하세요.
테스트넷 타이밍을 실시간 타이밍의 대리로 신뢰
Base Sepolia는 Base 메인넷과 동일하게 작동하지 않습니다 - 블록 타이밍과 혼잡이 다릅니다. 테스트넷을 사용하여 메인넷 처리량을 부하 테스트하지 말고, 테스트넷 대기 시간이 프로덕션에서 보게 될 것이라고 가정하지 마십시오. 실제 숫자가 필요할 때는 sk_live_ 키로 소액 메인넷 스모크 테스트를 실행하십시오.
공유 데이터베이스에 테스트 픽스처 남기기
개발 및 프로덕션 환경이 데이터베이스를 공유한다면 (공유하지 마세요), 테스트 이벤트가 실시간 이벤트와 동일한 테이블에 놓여져 아이템포턴시 중복 제거를 깨뜨립니다 (이벤트 ID 접두사는 다르지만 행은 실제입니다). 최소한 환경별로 webhook_events 테이블을 분리하세요. 더 나은 방법은 DB를 완전히 분리하는 것입니다. 이는 한 번 물어보기 전까지는 과도하게 보이는 규칙 중 하나입니다.
테스트 루프가 개발 주기에 포함되면.
건전한 테스트 루프가 마련되면 남은 작업은 대부분 강화 작업입니다: 부하 하에서의 신뢰할 수 있는 웹훅 처리, 최종 보안 체크리스트, 그리고 이전에 사용하던 결제 제공업체에서의 마이그레이션입니다.
개발자들이 가장 많이 묻는 웹훅 패턴
라이브로 전환하기 전에 에이전트 지갑을 안전하게 보호하세요
에이전트 주도의 API 접근을 위해 Stripe에서 Blockchain0x로 마이그레이션
docs.blockchain0x.com에서 전체 참조를 확인하세요. 테스트넷 세부정보: Base 체인 용어집. 제품 표면: 결제 API.