Chuyển đến nội dung chính

Tổng quan

Webhook cung cấp thông báo sự kiện thời gian thực đến ứng dụng của bạn qua các yêu cầu HTTP POST. Sử dụng chúng để phản ứng với thanh toán, vi phạm chính sách, thay đổi trạng thái tác nhân và sự kiện phiên x402.

Thiết lập Webhook

Qua SDK

const webhook = await aw.webhooks.create({
  url: "https://your-app.com/webhooks/agentwallex",
  events: [
    "payment.completed",
    "payment.failed",
    "agent.frozen",
    "policy.violated",
  ],
  secret: "whsec_your_signing_secret",
});

Qua API

curl -X POST https://api.agentwallex.com/api/v1/webhooks \
  -H "X-API-Key: awx_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/webhooks/agentwallex",
    "events": ["payment.completed", "payment.failed", "agent.frozen", "policy.violated"],
    "secret": "whsec_your_signing_secret"
  }'

Các Loại Sự kiện

Sự kiệnMô tả
payment.completedGiao dịch đã được xác nhận on-chain
payment.failedGiao dịch thất bại hoặc bị hoàn ngược
payment.pendingGiao dịch đã gửi, đang chờ xác nhận
agent.frozenVí tác nhân đã bị đóng băng
agent.unfrozenVí tác nhân đã được mở đóng băng
policy.violatedGiao dịch bị từ chối bởi công cụ chính sách
x402.session.expiredNgân sách hoặc TTL phiên x402 đã hết
approval.requestedGiao dịch giá trị cao đang chờ phê duyệt con người

Payload Webhook

Mỗi lần gửi webhook bao gồm payload JSON với cấu trúc sau:
{
  "id": "evt_abc123",
  "type": "payment.completed",
  "created_at": "2025-06-15T14:30:00Z",
  "data": {
    "transaction_id": "tx_xyz789",
    "agent_id": "agent_abc123",
    "amount": "50.00",
    "token": "USDC",
    "chain": "eip155:8453",
    "hash": "0xabc...def",
    "status": "confirmed"
  }
}

Xác minh Chữ ký

Mỗi lần gửi webhook đều bao gồm header chữ ký để xác minh. Luôn xác minh chữ ký trước khi xử lý sự kiện webhook.

Cách hoạt động

AgentWallex ký mỗi payload webhook bằng bí mật bạn cung cấp khi đăng ký. Chữ ký được gửi trong header X-AgentWallex-Signature.

Ví dụ Xác minh

import crypto from "crypto";

function verifyWebhookSignature(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(payload)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// In your webhook handler
app.post("/webhooks/agentwallex", (req, res) => {
  const signature = req.headers["x-agentwallex-signature"] as string;
  const isValid = verifyWebhookSignature(
    JSON.stringify(req.body),
    signature,
    "whsec_your_signing_secret"
  );

  if (!isValid) {
    return res.status(401).send("Invalid signature");
  }

  // Process the event
  const event = req.body;
  console.log(`Received ${event.type} event`);
  res.status(200).send("OK");
});
Luôn sử dụng so sánh thời gian không đổi (ví dụ: timingSafeEqual hoặc hmac.compare_digest) khi xác minh chữ ký để ngăn chặn tấn công thời gian.

Kiểm tra Webhook

Gửi sự kiện thử nghiệm đến endpoint webhook của bạn:
curl -X POST https://api.agentwallex.com/api/v1/webhooks/whk_abc123/test \
  -H "X-API-Key: awx_your_api_key"

Xem lịch sử Giao hàng

Kiểm tra lịch sử giao hàng cho webhook:
curl -X GET https://api.agentwallex.com/api/v1/webhooks/whk_abc123/deliveries \
  -H "X-API-Key: awx_your_api_key"

Quản lý Webhook

# List all webhooks
GET /webhooks

# Get a specific webhook
GET /webhooks/:id

# Update a webhook
PUT /webhooks/:id

# Delete a webhook
DELETE /webhooks/:id

Các phương pháp tốt nhất

Phản hồi giao hàng webhook với mã trạng thái 2xx trong vòng 5 giây. Nếu trình xử lý cần thực hiện xử lý nặng, hãy xác nhận webhook ngay lập tức và xử lý bất đồng bộ.
  • Luôn xác minh chữ ký trước khi xử lý sự kiện.
  • Xử lý trùng lặp — Giao hàng webhook có thể được thử lại. Sử dụng trường id cho tính idempotent.
  • Trả về 200 nhanh chóng — Xác nhận nhận trước khi thực hiện xử lý nặng.
  • Giám sát lỗi giao hàng — Kiểm tra endpoint giao hàng cho các giao hàng thất bại.
  • Sử dụng bộ lọc sự kiện cụ thể — Chỉ đăng ký các sự kiện bạn cần thay vì nhận tất cả sự kiện.