ทดสอบการชำระเงินของเอเจนต์โดยไม่ใช้เงินจริง.
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
- คีย์ API
sk_test_และความลับการลงนามทดสอบที่ตรงกันจากแดชบอร์ด - ngrok (หรืออุโมงค์ HTTPS ใดๆ) สำหรับการส่ง webhook ในช่วงการพัฒนา.
- สภาพแวดล้อมการพัฒนาที่แยกต่างหาก - ตัวแปร env ที่แตกต่างกัน ฐานข้อมูลที่แตกต่างกัน (หรืออย่างน้อยตารางที่แตกต่างกัน) URL เว็บฮุคที่แตกต่างกัน
- ความสะดวกสบายกับ คู่มือรูปแบบ webhook - คู่มือนี้สมมติว่าคุณมีตัวจัดการเพื่อทดสอบ
เปลี่ยนไปใช้กุญแจทดสอบ.
คีย์ sk_test_ ทำธุรกรรมบน Base Sepolia; คีย์ sk_live_ ทำธุรกรรมบน Base mainnet คำนำหน้าจะเลือกเครือข่าย - ไม่มีตัวแปรสภาพแวดล้อมเครือข่ายแยกต่างหาก และคีย์ทดสอบไม่สามารถย้ายเงินใน mainnet ได้ ดังนั้นสิ่งที่คุณเปลี่ยนสำหรับสภาพแวดล้อมการพัฒนาคือคีย์ (และความลับ webhook ทดสอบ).
# .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เติมเงินกระเป๋าเงินของเอเจนต์จาก faucet.
USDC ทดสอบไม่มีมูลค่าเงิน แต่ทำงานเหมือน USDC ที่ใช้งานอยู่: รูปแบบการตอบสนองเดียวกัน การติดตามยอดคงเหลือเดียวกัน ไม่มีการเรียก SDK ที่สร้างมัน - คุณเติมเงินที่อยู่กระเป๋าเงินของตัวแทนจากก๊อกน้ำ USDC สาธารณะ Base Sepolia ค้นหาที่อยู่ในแดชบอร์ดหรือในหน้าสาธารณะของตัวแทน (หรืออ่านตัวแทนด้วย SDK) จากนั้นวางลงในก๊อกน้ำ
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"])ทำการชำระเงินทดสอบจริง
เมื่อกระเป๋าเงินมีเงินทุนแล้ว ให้เรียก payments.create บนคีย์ sk_test_ ของคุณ มันเป็นการโอนจริงบน Base Sepolia โดยใช้เงินทดสอบ และมันจะส่ง webhook payment.received เช่นเดียวกับที่ mainnet จะทำ - ดังนั้นคุณจึงใช้เส้นทางโค้ดจริง ไม่ใช่การจำลอง ดูเหตุการณ์ที่เข้ามาที่ตัวจัดการที่อุโมงค์ของคุณ
// 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สามสถานการณ์ที่ต้องฝึกฝนอย่างน้อย: การชำระเงินที่ถึงที่หมาย (เส้นทางที่ดี การชำระเงินที่ได้รับ), การชำระเงินที่ไม่เคยถึงที่หมาย (ชี้ webhook ไปที่ URL ที่ตายและยืนยันว่าการทำความสะอาดการปรับยอดของคุณจับงานที่ติดอยู่ - เส้นทางที่ทีมส่วนใหญ่ละเลย), และการลองใหม่ของ webhook (บังคับให้เกิด 500 ครั้งแรกและ 200 ครั้งที่สอง จากนั้นตรวจสอบว่าคุณได้ข้ามงานที่ซ้ำซ้อนหรือไม่).
ส่งผ่าน webhook ไปยังตัวจัดการในท้องถิ่นของคุณ.
การชำระเงินทดสอบส่ง webhook จริงไปยัง URL ใดก็ตามที่คุณกำหนดไว้สำหรับ webhook ทดสอบ สำหรับการพัฒนาท้องถิ่น ให้มันมีอุโมงค์ 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.การทดสอบและการใช้งานจริงใช้กุญแจแยกและการกำหนดค่า webhook แยกกัน ดังนั้นคุณจึงสามารถปล่อยให้การผลิตชี้ไปที่จุดสิ้นสุดจริงของคุณในขณะที่อุโมงค์ในท้องถิ่นของคุณจัดการเหตุการณ์ทดสอบ
ล้มเหลวอย่างรวดเร็วเมื่อกุญแจถูกกำหนดค่าไม่ถูกต้อง
เหตุการณ์การผลิตที่พบบ่อยที่สุดเกี่ยวกับคีย์ทดสอบ/สดคือความเงียบ: การปรับใช้เกิดขึ้นด้วยคีย์ทดสอบ ไม่มีการชำระเงินเข้ามา การแจ้งเตือนจะถูกส่งออกหลังจากวันทำการถัดไป ปิดกั้นนี้ที่การบูต: ปฏิเสธที่จะเริ่มหาก 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 mainnet ผู้ตรวจสอบบล็อก ที่อยู่กระเป๋าเงิน และโทเค็นก๊าซทั้งหมดแยกจากกัน ความสับสนทั่วไปคือการคัดลอกที่อยู่ Base จริงไปยังการทดสอบ ดูว่ามันล้มเหลว และคิดว่า API เสีย Fund ที่อยู่กระเป๋าเงินของตัวแทนจากก๊อกน้ำ USDC ของ Base Sepolia และชำระเงินที่อยู่ที่มีอยู่บนเครือข่ายนั้น.
ไม่ทดสอบเส้นทางการล้มเหลว
ทีมส่วนใหญ่ทดสอบเส้นทางที่ดี - การชำระเงินที่ทำให้เกิด payment.received - จากนั้นส่งและพบภายหลังว่าทางที่ไม่ได้ชำระเงินของพวกเขาเสียหาย ทดสอบมัน: ชี้ webhook ไปที่ URL ที่ตายแล้วและยืนยันว่าการตรวจสอบของคุณจับงานที่ติดอยู่ได้ บังคับให้เกิด 500 จากตัวจัดการของคุณและตรวจสอบว่าการลองใหม่เป็น idempotent และตรวจสอบว่าการสร้าง payments.create's 503 (ตัวเชื่อมต่อเชนไม่ได้เชื่อมต่อ) ได้รับการจัดการ สภาพแวดล้อมการทดสอบมีราคาถูก; การดีบักในผลิตภัณฑ์มีราคาแพง
Webhook URL ยังคงชี้ไปที่ ngrok ในการผลิต
การเปลี่ยนพรีฟิกซ์คีย์นั้นจำง่าย; การอัปเดต URL ของ webhook นั้นลืมง่าย หากคุณไปใช้งานจริงโดยที่ URL ยังคงชี้ไปที่อุโมงค์ ngrok จากแล็ปท็อปของคุณ การชำระเงินผลิตภัณฑ์ครั้งแรกจะส่ง webhook ไปยังช่องว่าง ถือว่าการเปลี่ยน URL ของ webhook เป็นส่วนหนึ่งของรายการตรวจสอบการปรับใช้ ไม่ใช่การตั้งค่าเพียงครั้งเดียว
เชื่อถือเวลาทดสอบเป็นตัวแทนของเวลาจริง
Base Sepolia ไม่ทำงานเหมือนกับ Base mainnet - การตั้งเวลาและความแออัดของบล็อกแตกต่างกัน อย่าใช้ testnet เพื่อทดสอบความสามารถในการประมวลผลของ mainnet และอย่าสมมติว่าความล่าช้าของ testnet ของคุณคือสิ่งที่คุณจะเห็นในผลิตภัณฑ์ เมื่อคุณต้องการตัวเลขจริง ให้รันการทดสอบ mainnet ขนาดเล็กด้วยคีย์ sk_live_
ทิ้งอุปกรณ์ทดสอบในฐานข้อมูลที่แชร์
หากสภาพแวดล้อมการพัฒนาและการผลิตของคุณแชร์ฐานข้อมูล (อย่า), เหตุการณ์ทดสอบจะอยู่ในตารางเดียวกับเหตุการณ์จริงและทำให้การกำจัด idempotency ของคุณเสียหาย (พรีฟิก ID ของเหตุการณ์จะแตกต่างกันแต่แถวจริง) อย่างน้อยแยกตาราง webhook_events ต่อสภาพแวดล้อม ดีกว่า: แยกฐานข้อมูลโดยสิ้นเชิง นี่คือหนึ่งในกฎที่ดูเหมือนจะมากเกินไปจนกว่าจะมีปัญหา
เมื่อวงจรการทดสอบอยู่ในวงจรการพัฒนาของคุณ
เมื่อมีวงจรการทดสอบที่มีสุขภาพดีอยู่แล้ว งานที่เหลือส่วนใหญ่จะเป็นการเสริมความแข็งแกร่ง: การจัดการ webhook ที่เชื่อถือได้ภายใต้ภาระงาน, รายการตรวจสอบความปลอดภัยขั้นสุดท้าย, และการย้ายจากผู้ให้บริการการชำระเงินก่อนหน้าที่คุณอาจกำลังใช้งานอยู่
รูปแบบ webhook ที่นักพัฒนาถามบ่อยที่สุด
รักษาความปลอดภัยให้กับกระเป๋าเงินของตัวแทนก่อนที่จะเปิดใช้งาน
ย้ายจาก Stripe ไปยัง Blockchain0x สำหรับการเข้าถึง API ที่ขับเคลื่อนโดยตัวแทน
เอกสารอ้างอิงทั้งหมดที่ docs.blockchain0x.com. รายละเอียด Testnet: พจนานุกรมของ Base chain. พื้นผิวผลิตภัณฑ์: Payment API.