Ana içeriğe atla
ÖğrenKılavuzlarAI ajanınıza ödemeler ekleyin
KILAVUZ

AI ajanınıza ödeme eklemek için.

10 minutes
KISA CEVAP

createClient'i @blockchain0x/node'dan (veya Python istemcisinden) kullanarak bir ajan oluşturun, payments.create ile bir USDC ödemesi gönderin ve imzalı webhook'u webhooks.verify ile doğrulayın. Harcama kontrolleri kontrol panelinde ayarlanır ve API üzerinden yalnızca okunur. Ajan asla özel anahtarlara doğrudan dokunmaz. Kaydolmaktan Base üzerinde ilk USDC ödemenize kadar on dakikadan az, TypeScript veya Python ile.

ÖN KOŞULLAR

Başlamadan önce.

  • Bir Blockchain0x hesabı (ücretsiz kayıt).
  • Kontrol panelinden bir API anahtarı (bu kılavuz için sk_test_ anahtarını kullanın; daha sonra sk_live_ anahtarına geçeceksiniz).
  • Node.js 20+ veya Python 3.11+ ajan çalışma zamanınızda.
  • Herhangi bir çerçeve üzerinde inşa edilmiş bir ajan - LangChain, CrewAI, AutoGen, LlamaIndex, OpenAI Agents SDK, MCP veya düz SDK kodu. Talimatlar çerçeve bağımsızdır.
  • Webhook almak için genel internetten erişilebilen bir HTTPS uç noktası (ngrok veya bir dağıtım önizlemesi geliştirme için uygundur).
ADIM 1 / 5

Ajan profilini oluştur.

Ajan profili, ajanınızın gönderdiği veya aldığı her ödemenin adreslenebilir kimliğidir. Cüzdan adresini, kamu sayfasını, doğrulama rozetlerini ve (sonrasında) harcama politikasını taşır. Her mantıksal ajan için bir tane oluşturun.

TypeScript
import { createClient } from "@blockchain0x/node";

const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); // sk_test_ / sk_live_

const agent = await client.agents.create({ name: "research-bot" });

console.log(agent.id); // "agt_..."
// Public page: https://wallet.blockchain0x.com/a/{slug}
Python
from blockchain0x import Client

client = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

agent = client.agents.create(body={"name": "research-bot"})

print(agent["id"])  # "agt_..."
# Public page: https://wallet.blockchain0x.com/a/{slug}

After this call, the agent has a public page at https://wallet.blockchain0x.com/a/<slug> that any counterparty (human or agent) can hover for verification info. See the agent payment identity glossary entry for what that page exposes.

ADIM 2 / 5

Bir ödeme gönderin.

payments.create sends USDC from the agent wallet. amountWei is base units (USDC has 6 decimals), so 0.01 USDC is the string "10000". The SDK auto-stamps an Idempotency-Key, and the call can return 503 until the chain adapter is wired for your network. To RECEIVE instead, settle an invoice you created in the dashboard with paymentRequests.settle - see the payment API page.

TypeScript
// Send a USDC payment from the agent wallet. amountWei is base units
// (USDC has 6 decimals): "10000" is 0.01 USDC. payments.create auto-stamps an
// Idempotency-Key and can return 503 until the chain adapter is wired.
const tx = await client.payments.create({
  agentId: agent.id,
  to: "0xRecipient",
  amountWei: "10000",
});

console.log(tx); // the submitted transfer
Python
# amountWei is USDC base units (6 decimals): "10000" is 0.01 USDC.
tx = client.payments.create(body={
    "agentId": agent["id"],
    "to": "0xRecipient",
    "amountWei": "10000",
})

print(tx)  # the submitted transfer
ADIM 3 / 5

Webhook'u yönetin.

Webhook'lar, bir ödemenin yerleştiğini nasıl öğrenirsiniz. Node'da, @blockchain0x/node'dan webhooks.verify HMAC kontrolünü yapar ve ayrımlı bir birleşim döndürür; diğer dillerde, ham gövde üzerinde aynı HMAC'ı hesaplayın. Olay türüne göre (gelen için payment.received) ayrılın, hızlı bir şekilde 2xx yanıt verin ve teslimatın zaman aşımına uğramaması için daha ağır olan her şeyi 2xx'in arkasında sıraya alın.

TypeScript (Express)
import express from "express";
import { webhooks } from "@blockchain0x/node";

const app = express();
// Capture the RAW body. The HMAC is over the exact bytes on the wire.
app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/payment", (req, res) => {
  const result = webhooks.verify({
    headers: req.headers,
    rawBody: req.body, // Buffer, raw bytes
    secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
  });
  if (!result.ok) return res.status(400).json({ code: result.code });

  if (result.eventType === "payment.received") {
    // USDC landed - deliver the work, fulfil the order, etc.
    void deliver(result.eventId);
  }
  res.status(200).send("ok");
});
Python (Flask)
import hmac, hashlib, os, time
from flask import Flask, request, abort

app = Flask(__name__)
SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode()

@app.post("/webhooks/payment")
def webhook():
    raw = request.get_data()  # RAW bytes - do not parse first
    sig = request.headers.get("X-Blockchain0x-Signature", "")
    ts = request.headers.get("X-Blockchain0x-Timestamp", "")
    parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p)
    t, v1 = parts.get("t", ts), parts.get("v1", sig)
    want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300:
        abort(401)
    if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received":
        deliver(request.get_json())  # USDC landed
    return ("ok", 200)
ADIM 4 / 5

Gösterge panelinde harcama kontrolleri belirleyin.

Eğer ajanınız sadece alıyorsa, bunu atlayabilirsiniz. Eğer aynı zamanda ödüyorsa, kontrol panelinde bir harcama izni ayarlayın - bir dönem için bir harçlık ve her işlem için bir üst sınır. Bu, her ödemede arka uç tarafından uygulanır, bu nedenle ajan tarafı kurallarının asla yapamayacağı bir şekilde istemci enjeksiyonuna dayanır. İzni değiştiren hiçbir API veya SDK çağrısı yoktur (ajanın kendi anahtarı limitini genişletemez); API yalnızca okunabilir, bu nedenle kodunuz mevcut değerleri görüntülemek veya planlamak için alabilir.

Oku (curl)
curl https://api.blockchain0x.com/v1/agents/agt_123/spend-permissions \
  -H "Authorization: Bearer $BLOCKCHAIN0X_API_KEY"
Yanıt
{
  "allowance_wei": "5000000",
  "per_tx_wei": "1000000",
  "period_seconds": 86400,
  "revoked_at": null
}
ADIM 5 / 5

Tüm akışı Base Sepolia'da test edin.

Canlı sk_live_ anahtarlarına geçmeden önce, sk_test_ ile tam yolu baştan sona çalıştırın. Bir test anahtarı, her şeyi Base Sepolia'da tutar, burada cüzdanı kamu musluğundan finanse edersiniz ve yanıt şekilleri canlı ile eşleşir. Anahtar ön eki, ağı seçer, bu nedenle bir test anahtarı ana ağ fonlarını taşıyamaz.

Üç senaryoyu deneyin: payment.received tetikleyen bir sorunsuz ödeme, kaçırılan bir teslimat (webhook'u ölü bir URL'ye yönlendirin, ardından işlemi transactions.get ile alarak uzlaştırın) ve bir webhook tekrar denemesi (ilk seferde 500 döndürün, ikinci seferde 200, ve işleyicinizin idempotent olduğunu doğrulayın). Üçü de testten geçtiğinde, anahtarı değiştirin ve gönderin.

YAYGIN TUZAKLAR

Takımlara bir haftaya mal olan beş hata.

Webhook imza doğrulamasını atlıyorsunuz

Eğer /webhooks/payment adresine gelen herhangi bir POST'u yetkili olarak kabul ederseniz, bir saldırgan sahte ödeme olayları oluşturabilir ve ajanınızı ücretsiz iş teslim etmeye kandırabilir. Her zaman webhook sırrıyla HMAC doğrulaması yapın, sabit zamanlı karşılaştırma kullanarak. İlk ihlal genellikle kaybolan doğrulamadır.

Ayrı bir onay olayı varsayarak

Gönderilen olaylar payment.received, payment.sent, wallet.deployed ve webhook.test'tir - ayrı bir onay olayı yoktur. payment.received, transfer bir blokta olduğunda tetiklenir. Çoğu iş için, bu teslimat için sinyalinizdir. Pahalı veya geri alınamaz bir şey için, işlemi transactions.get ile sorgulayın ve harekete geçmeden önce kendi onay eşiğinizi uygulayın; var olmayan bir olayı beklemeyin.

Webhook işleyicilerinde idempotency yok

Webhook'lar 2xx dışı yanıtlar üzerinde yeniden dener ve aynı olay yük altında birden çok kez gelir. İşleyiciniz idempotent olmalıdır: zaten işlediğiniz olay kimliklerinin küçük bir tablosunu tutun ve tekrarları atlayın. Aksi takdirde, geçici bir dalgalanma aynı işi iki kez teslim eder ve saatlerce çift yerine getirmeleri hata ayıklamakla geçirebilirsiniz.

Test ve canlı API anahtarlarını karıştırma

Test anahtarları (sk_test_) sandbox'a ulaşır ve Base Sepolia'yı kullanır; canlı anahtarlar (sk_live_) üretime ulaşır ve Base mainnet'i kullanır. Ortam yapılandırmalarında karıştırmak, çoğu 'geliştirirken çalışıyor, üretimde başarısız oluyor' biletinin sebebidir. Çalışma ortamınız ve anahtar öneki eşleşmiyorsa başlangıçta sert hata verin.

Eksik bir webhook'u başarısız bir ödeme olarak değerlendirmek

Başarısızlık olayı yoktur ve bir webhook atlanabilir (uç noktanız kapalıydı, bir teslimat düştü). Ajansı 'fonları bekliyor' döngüsünde bırakmayın. Uzlaştırın: gerçek durumu öğrenmek için işlemi transactions.get ile alın ve bekleyen herhangi bir akışta bir zaman aşımı koyun, böylece terkedilmiş bir ödeme tutulan kaynakları serbest bırakır, sonsuza kadar askıda kalmaz.

SONRAKİ ADIMLAR

İlk ödemenizi aldığınızda.

Temel ödemeler çalışırken, en çok fayda sağlayan sonraki adımlar spend controls'dur (agent bütçeyle kontrolden çıkmasın diye), webhook robustness'tır (ödemeler yük altında sessizce düşmesin diye) ve identity verification'dır (karşı taraflar agent'ın public page'ine güvensin diye).

Tam API referansı docs.blockchain0x.com'da bulunmaktadır. Aynı API'ler için ürün yüzeyi: Ödeme API'si.

Son gözden geçirme: 2026-05-15. CC BY 4.0 altında yayımlanmıştır.

Bir POST ve ajanın ödeme alıyor.

Başlamak için ücretsiz. Test anahtarları dahil. İlk ödeme on dakikadan kısa sürede onaylandı.