İlk ay 59$Planlar
Tüm ücretsiz araçlar

Ücretsiz araç

Webhook alıcı başlangıç üretici

unlimitedcodex olayları için imza doğrulamasıyla Node veya Python web kancası işleyicileri oluşturun.

Araç stratejisi

Bu aracın verdiği çıktı

unlimitedcodex olayları için imza doğrulamasıyla Node veya Python web kancası işleyicileri oluşturun. Araç, ödeme işleminden önce kullanışlıdır çünkü alıcıların özel sırları paylaşmadan belirli bir OpenAI uyumlu API erişim kararı almasına yardımcı olur.

En uygun

Alıcının kullanılabilir bir yapılandırmaya, snippet'e, yüke, kapsam planına veya alıcı iskelesine ihtiyacı olduğunda uygulama hazırlığı.

Çıkış

Alıcının teslim edilen temel URL, API anahtarına ve model kimliklerine uyarlayabileceği kopyalanabilir bir başlangıç yapısı.

Sonraki adım

Oluşturulan yapıyı uygulayın, ilgili belgelerle doğrulayın ve ardından ücretli bir paket aracılığıyla kurulumun teslim edilmesini isteyin.

Araç atıf paketi

Amaç, girdiler ve çıktı kullanım alanları

OpenAI uyumlu parçacıklar, kapsamlar, istek yükleri, web kancası işleyicileri veya ortam dosyaları oluşturun. Özel araç: unlimitedcodex olayları içiçinde imza yapğrulamasıyla Node veya Python webhook işleyicileri oluşturun.

Arama niyeti

  • Webhook alıcı başlangıç üretici
  • ücretsiz web kancası oluşturucu
  • OpenAI uyumlu API için web kancası oluşturucu

Girdi sınırı

Yalnızca gizli olmayan planlama girdilerini kullanın. Ham API anahtarlarını, taşıyıcı jetonlarını, tam kimlik yapğrulama başlıklarını, özel günlükleri, müşteri verilerini veya faturalandırma ekran görüntülerini yapıştırmayın. Oluşturulan snippet'ler BASE_URL, API_KEY, model kimlikleri, webhook gizli dizileri ve ortam değişkenleri içiçinde yer tutucuları kullanmalıdır.

Sonuç kullanım alanları

  • Başlatıcı yapılandırması, istek, web kancası, kapsam veya geçiş yapıtları üretin.
  • Teslim edilen temel URL, API anahtarı ve model kimlikleriyle değiştirilebilecek yer tutucuları kullanın.
  • Özel kimlik bilgilerini açığa çıkarmadan uygulama ekiplerine somut bir sonraki adım verin.
// unlimitedcodex webhook receiver — Node.js / Next.js App Router
// Signature verification notes:
// - Header: x-ucx-signature (format: t=<unix>,v1=<hex>)
// - Signed payload: `${timestamp}.${rawBody}`
// - Secret env var: UCX_WEBHOOK_SECRET (whsec_ucx_*)
// - Reject timestamps outside a 300s tolerance window.

import { createHmac, timingSafeEqual } from "crypto";

const SIGNATURE_TOLERANCE_SECONDS = 300;

function verifyWebhookSignature(rawBody: string, signatureHeader: string, secret: string) {
  const parts = Object.fromEntries(
    signatureHeader.split(",").map((part) => {
      const [key, value] = part.split("=");
      return [key, value];
    })
  );
  const timestamp = Number(parts.t);
  const signature = parts.v1;

  if (!Number.isInteger(timestamp) || !signature) {
    return false;
  }

  if (Math.abs(Math.floor(Date.now() / 1000) - timestamp) > SIGNATURE_TOLERANCE_SECONDS) {
    return false;
  }

  const signedPayload = `${timestamp}.${rawBody}`;
  const expected = createHmac("sha256", secret).update(signedPayload).digest("hex");
  const left = Buffer.from(expected, "hex");
  const right = Buffer.from(signature, "hex");

  return left.length === right.length && timingSafeEqual(left, right);
}

async function recordWebhookEvent(eventId: string, eventType: string) {
  // Persist event.id before side effects so retries stay idempotent.
  // Return false when this delivery was already processed.
  return true;
}

export async function POST(request: Request) {
  const rawBody = await request.text();
  const signature = request.headers.get("x-ucx-signature") ?? "";
  const secret = process.env.UCX_WEBHOOK_SECRET;

  if (!secret || !verifyWebhookSignature(rawBody, signature, secret)) {
    return new Response("Invalid signature", { status: 400 });
  }

  const event = JSON.parse(rawBody) as {
    id: string;
    type: string;
    created: string;
    data: Record<string, unknown>;
  };

  const isNew = await recordWebhookEvent(event.id, event.type);
  if (!isNew) {
    return Response.json({ received: true, duplicate: true });
  }

  switch (event.type) {
    case "usage.threshold_reached": {
      // Pause expensive jobs, notify account owners, or refresh quota dashboards.
      await handleUsageThreshold(event.data);
      break;
    }
    case "subscription.updated": {
      // Refresh local entitlements, package slug, and billing period metadata.
      await syncSubscriptionState(event.data);
      break;
    }
    case "api_key.revoked": {
      // Invalidate cached credentials and alert the owning team.
      await revokeCachedApiKey(event.data);
      break;
    }
    default:
      // Ignore unselected event types safely.
      break;
  }

  return Response.json({ received: true });
}
  • Read raw istek gövde olarak text önce JSON parsing — signature verification must kullanım exact bytes teslim aldı.
  • Verify x-ucx-signature header kullanarak HMAC SHA-256 over `${timestamp}.${rawBody}` ile sizin whsec_ucx_* signing gizli bilgi.
  • Reject signatures older than 300 seconds to limit replay windows.
  • Karşılaştır v1 digest ile a constant-time equality check (timingSafeEqual içinde Node, hmac.compare_digest içinde Python).
  • Return 2xx yalnızca sonra persisting event.id — handlers must stay idempotent because deliveries olabilir repeat.
  • Store UCX_WEBHOOK_SECRET içinde a gizli bilgi manager; asla log gizli bilgi, API anahtarıs, veya tam customer yükler.

ChatGPT 5.5 Ultra ve Codex API erişimi için hazır mısınız?

Sınırsız Haftalık veya Sınırsız Aylık seçeneğini seçin, Stripe ödeme işlemini tamamlayın ve 10 dakika ile 5 saat arasında manuel kurulum alın. API anahtarının tamamı e-postayla gelir ve kontrol paneli teslimat ayrıntılarını güvenli bir şekilde gösterir.

Webhook alıcı başlangıç üretici | unlimitedcodex