Przejdź do głównej treści

Przegląd

Dostawa dynamiczna pozwala programowo obsługiwać realizację produktów poprzez implementację endpointu webhook, który odbiera informacje o zamówieniu i zwraca treść dostawy. Idealne do dostarczania produktów cyfrowych, kluczy licencyjnych, kodów gier lub integracji z zewnętrznymi systemami realizacji. Gdy klient kupuje produkt z włączoną dostawą dynamiczną, Komerza natychmiast wysyła żądanie POST do skonfigurowanego URL webhooka ze szczegółami zamówienia, a Twój endpoint odpowiada treścią do dostarczenia klientowi.
Dostawa dynamiczna jest konfigurowana dla każdego wariantu produktu w ustawieniach produktu w sekcji metod dostawy.

Przypadki użycia

Produkty cyfrowe

Dostarczaj klucze licencyjne, linki do pobierania lub kody dostępu w czasie rzeczywistym

Integracja zewnętrzna

Połącz się z zewnętrznymi systemami realizacji lub zarządzania magazynem

Niestandardowa logika

Implementuj złożone reguły dostawy bazujące na danych klienta, produktu lub zamówienia

Kody do gier

Automatycznie dostarczaj klucze do gier, kody aktywacyjne lub przedmioty w grze

Jak to działa

  1. Klient kupuje - Klient finalizuje zakup produktu z włączoną dostawą dynamiczną
  2. Webhook wyzwolony - Komerza wysyła żądanie POST do skonfigurowanego URL webhooka
  3. Twoja odpowiedź - Twój endpoint przetwarza żądanie i zwraca treść dostawy
  4. Klient otrzymuje - Zwrócona treść jest dostarczana klientowi jako zwykły tekst

Konfiguracja

Konfigurowanie dostawy dynamicznej

  1. Przejdź do swojego produktu w panelu Komerza
  2. Wybierz wariant, który chcesz skonfigurować
  3. Wybierz Dostawa dynamiczna jako metodę dostawy
  4. Wprowadź URL swojego endpointu webhooka
  5. Wygeneruj i zapisz swój sekret webhooka
Chroń swój sekret webhooka. Służy do weryfikacji, że żądania pochodzą rzeczywiście od Komerza.

Żądanie webhook

Nagłówki żądania

Content-Type: application/json
Accept: application/json
User-Agent: Komerza/1.0
X-Signature: <HMAC-SHA256-SIGNATURE>

Weryfikacja podpisu

Wszystkie żądania webhook zawierają nagłówek X-Signature z podpisem HMAC SHA256. Powinieneś zweryfikować ten podpis, aby upewnić się, że żądanie pochodzi od Komerza. Obliczanie podpisu:
HMAC-SHA256(secret, request_body) -> kodowany HEX
const crypto = require("crypto");

function verifySignature(secret, body, signature) {
  const calculatedSignature = crypto
    .createHmac("sha256", secret)
    .update(body)
    .digest("hex")
    .toUpperCase();

  return calculatedSignature === signature.toUpperCase();
}

app.use("/webhook", express.raw({ type: "application/json" }));

app.post("/webhook", (req, res) => {
  const signature = req.headers["x-signature"];
  const body = req.body.toString("utf8");

  if (!verifySignature(process.env.WEBHOOK_SECRET, body, signature)) {
    return res.status(401).send("Nieprawidłowy podpis");
  }

  // Przetwórz webhook...
});

Struktura payload

Webhook otrzymuje ładunek JSON o następującej strukturze:
{
  "storeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "customerId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "lineItemId": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
  "productId": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
  "variantId": "8f7e6d5c-4b3a-2918-7654-3210fedcba98",
  "quantity": 1,
  "order": {
    "id": "5f3a8b2c-1d4e-5f6a-7b8c-9d0e1f2a3b4c",
    "totalPrice": 29.99,
    "currency": "USD",
    "customer": {
      "email": "klient@przyklad.pl",
      "name": "Jan Kowalski"
    }
  }
}

Odpowiedź webhook

Format odpowiedzi

Twój endpoint musi odpowiedzieć zwykłym tekstem (text/plain) zawierającym treść dostawy. Zostanie ona wyświetlona klientowi dokładnie tak, jak zostanie zwrócona.
HTTP/1.1 200 OK
Content-Type: text/plain

KLUCZ-LICENCYJNY-ABC123-XYZ789-PREMIUM
Pobieranie: https://przyklad.pl/download/abc123
Ważny do: 2026-11-27