Kiểm tra thanh toán của tác nhân mà không cần tiền thật.
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.
Trước khi bạn bắt đầu.
- Một tích hợp hoạt động trên trực tiếp (hoặc ít nhất là có hình dạng trực tiếp) - xem thêm-thanh-toán-cho-đại-lý.
- Một khóa API
sk_test_và bí mật ký thử nghiệm tương ứng từ bảng điều khiển. - ngrok (hoặc bất kỳ đường hầm HTTPS nào) để giao hàng webhook trong thời gian phát triển.
- Một môi trường phát triển riêng biệt - các biến môi trường khác nhau, cơ sở dữ liệu khác nhau (hoặc ít nhất là các bảng khác nhau), URL webhook khác nhau.
- Sự thoải mái với hướng dẫn mẫu webhook - hướng dẫn này giả định rằng bạn có một trình xử lý để thử nghiệm.
Chuyển sang khóa thử nghiệm.
Một khóa sk_test_ giao dịch trên Base Sepolia; một khóa sk_live_ giao dịch trên Base mainnet. Tiền tố chọn mạng - không có biến môi trường mạng riêng biệt, và một khóa thử nghiệm không thể di chuyển các quỹ mainnet. Vì vậy, tất cả những gì bạn thay đổi cho một môi trường phát triển là khóa (và bí mật webhook thử nghiệm).
# .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 dashboardCấp vốn cho ví của tác nhân từ vòi.
Test USDC không có giá trị tiền tệ nhưng hành xử giống như USDC thực: cùng hình dạng phản hồi, cùng theo dõi số dư. Không có cuộc gọi SDK nào tạo ra nó - bạn cấp vốn cho địa chỉ ví của tác nhân từ vòi nước USDC công cộng Base Sepolia. Tìm địa chỉ trong bảng điều khiển hoặc trên trang công khai của tác nhân (hoặc đọc tác nhân với SDK), sau đó dán nó vào vòi nước.
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"])Thực hiện một khoản thanh toán thử nghiệm thực sự.
Khi wallet đã được nạp, hãy gọi payments.create bằng khóa sk_test_ của bạn. Đây là một giao dịch thật trên Base Sepolia bằng tiền thử, và nó kích hoạt webhook payment.received đúng như trên mainnet - vì vậy bạn đang kiểm tra luồng mã thực tế, không phải mô phỏng. Hãy theo dõi sự kiện đến handler được tunnel của bạn.
// 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 webhookBa kịch bản để thực hiện tối thiểu: một khoản thanh toán được thực hiện (đường đi hạnh phúc, payment.received), một khoản thanh toán không bao giờ được thực hiện (chỉ định webhook đến một URL chết và xác nhận rằng việc đối chiếu của bạn bắt được công việc bị kẹt - con đường mà hầu hết các đội bỏ qua), và một lần thử lại webhook (ép buộc 500 lần đầu tiên và 200 lần thứ hai, sau đó xác minh rằng tính bất biến của bạn đã bỏ qua công việc trùng lặp).
Đường hầm webhooks đến trình xử lý cục bộ của bạn.
Các khoản thanh toán thử nghiệm gửi các webhook thực đến bất kỳ URL nào bạn đã cấu hình cho webhook thử nghiệm. Đối với phát triển cục bộ, hãy cung cấp một đường hầm HTTPS đến máy tính xách tay của bạn. ngrok là tùy chọn đơn giản nhất; bất kỳ công cụ đường hầm ngược nào cũng hoạt động.
# 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.Thử nghiệm và sử dụng trực tiếp các khóa riêng biệt và cấu hình webhook riêng biệt, vì vậy bạn có thể để sản xuất chỉ vào điểm cuối thực của bạn trong khi đường hầm địa phương của bạn xử lý các sự kiện thử nghiệm.
Thất bại nhanh chóng với các khóa cấu hình sai.
Sự cố sản xuất phổ biến nhất xung quanh các khóa thử nghiệm/trực tiếp là im lặng: một triển khai xảy ra với một khóa thử nghiệm, không có thanh toán nào được thực hiện, cảnh báo chỉ được kích hoạt sau ngày làm việc tiếp theo. Chặn điều này khi khởi động: từ chối khởi động nếu biến môi trường và tiền tố khóa không khớp.
// 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.")Năm sai lầm trong kiểm tra mà sau này sẽ gây khó khăn.
Quên rằng Base Sepolia là một chuỗi riêng
Một khóa sk_test_ giao dịch trên Base Sepolia, không phải Base mainnet. Các trình khám phá khối, địa chỉ ví và token gas đều tách biệt. Một sự nhầm lẫn phổ biến là sao chép một địa chỉ Base thực vào một bài kiểm tra, xem nó thất bại và nghĩ rằng API bị hỏng. Tài trợ cho địa chỉ ví của đại lý từ vòi USDC Base Sepolia và thanh toán cho các địa chỉ tồn tại trên chuỗi đó.
Không kiểm tra các con đường thất bại
Hầu hết các đội kiểm tra con đường hạnh phúc - một khoản thanh toán kích hoạt payment.received - sau đó giao hàng và phát hiện sau đó rằng con đường không thanh toán của họ bị hỏng. Thực hiện nó: chỉ định webhook đến một URL chết và xác nhận rằng quy trình hòa giải của bạn bắt được công việc bị kẹt, ép một 500 từ trình xử lý của bạn và xác minh rằng việc thử lại là idempotent, và kiểm tra rằng 503 của payments.create (bộ điều hợp chuỗi không được kết nối) được xử lý. Môi trường thử nghiệm rẻ; gỡ lỗi sản xuất đắt tiền.
URL webhook vẫn trỏ đến ngrok trong môi trường sản xuất
Chuyển đổi tiền tố khóa dễ nhớ; cập nhật URL webhook dễ quên. Nếu bạn đưa vào hoạt động với URL vẫn chỉ vào đường hầm ngrok từ máy tính xách tay của bạn, khoản thanh toán sản xuất đầu tiên sẽ kích hoạt một webhook vào khoảng không. Hãy coi việc thay đổi URL webhook như một phần của danh sách kiểm tra triển khai, không phải là một cài đặt một lần.
Tin tưởng vào thời gian testnet như một đại diện cho thời gian thực
Base Sepolia không hoạt động giống hệt như Base mainnet - thời gian khối và tắc nghẽn khác nhau. Đừng sử dụng testnet để kiểm tra tải băng thông mainnet, và đừng giả định độ trễ testnet của bạn là những gì bạn sẽ thấy trong sản xuất. Khi bạn cần số liệu thực, hãy chạy một bài kiểm tra khói mainnet với số tiền nhỏ bằng khóa sk_live_.
Để lại các công cụ thử nghiệm trong các cơ sở dữ liệu chia sẻ
Nếu môi trường phát triển và sản xuất của bạn chia sẻ một cơ sở dữ liệu (không nên), các sự kiện thử nghiệm sẽ nằm trong cùng một bảng với các sự kiện trực tiếp và làm hỏng việc loại bỏ trùng lặp idempotency của bạn (tiền tố ID sự kiện khác nhau nhưng hàng là thật). Tối thiểu, hãy cách ly bảng webhook_events theo môi trường. Tốt hơn: tách biệt hoàn toàn các cơ sở dữ liệu. Đây là một trong những quy tắc có vẻ quá mức cho đến khi nó gây hại một lần.
Khi vòng lặp thử nghiệm nằm trong chu trình phát triển của bạn.
Khi đã có vòng kiểm thử ổn định, phần việc còn lại chủ yếu là củng cố: xử lý webhook đáng tin cậy khi tải cao, danh sách kiểm tra bảo mật cuối cùng, và di chuyển từ bất kỳ nhà cung cấp thanh toán nào trước đó mà bạn có thể đang chạy song song.
Các mẫu webhook mà các nhà phát triển thường hỏi nhất
Bảo mật ví agent của bạn trước khi ra mắt
Chuyển từ Stripe sang Blockchain0x để truy cập API do tác nhân điều khiển
Tài liệu tham khảo đầy đủ tại docs.blockchain0x.com. Chi tiết Testnet: Thuật ngữ chuỗi cơ sở. Bề mặt sản phẩm: API Thanh toán.