Přeskočit na hlavní obsah

Webhook o objednání dopravy

O
Autor: Ondřej Průša
Aktualizováno před více než týdnem

Webhook shipping.ordered umožňuje integraci dopravy ve vašem systému s Retinem. Tento webhook je vyvolán vždy při úspěšném objednání dopravy v systému Retino a poskytuje vám kompletní informace o objednané dopravě.

Poznámka: Webhooky jsou prémiová funkcionalita, která je součástí rozšíření "API & Webhooky". Pokud máte toto rozšíření aktivní, naleznete nastavení webhooků v Nastavení > Webhooky.

Aktivace webhook události

  1. Připravte na vašem serveru URL endpoint pro příjem webhooků (např. vas-eshop.cz/webhook-retino-shipping )

  2. Přejděte do Nastavení > Webhooky v Retinu

  3. Klikněte na "Vytvořit webhook"

  4. Zadejte URL adresu vašeho endpointu

  5. Vyberte událost shipping.ordered

  6. Uložte nastavení

Zabezpečení

Každý webhook obsahuje v hlavičce požadavku autentifikační token pro ověření, že požadavek skutečně pochází z Retina:

X-Retino-Secret: <token>

Tento token naleznete v nastavení jednotlivých webhooků. Při příjmu webhooků byste měli vždy ověřit, že hlavička obsahuje správný token, který odpovídá vašemu webhooku.

Vzorová data

Webhook shipping.ordered odesílá data ve formátu JSON s následujícími informacemi:

{
  "event_type": "shipping.ordered",
  "created_at": "2023-01-23T10:28:10.010Z",
  "shipping": {
    "id": "2b20e85f-2201-494a-b3f9-85d89721174e",
    "client_reference": "20210001",
    "option_name": "Zásilkovna - Na výdejní místo",
    "tracking_number": "Z3824826667",
    "tracking_url": "https://www.zasilkovna.cz/vyhledavani?number=Z3824826667",
    "customer_payment_details": [
      {
        "amount": "99.00",
        "currency": "CZK",
        "invoice_url": "https://example.com/invoice/123456.pdf"
      }
    ]
  }
}

Popis datové struktury

Pole

Popis

Typ

event_type

Typ události webhooku

String

created_at

Čas vytvoření události

ISO 8601 DateTime

shipping.id

Unikátní identifikátor dopravy v systému Retino

UUID

shipping.client_reference

Kód případu, ke kterému se doprava vztahuje

String

shipping.option_name

Název dopravní služby

String

shipping.tracking_number

Sledovací číslo zásilky

String

shipping.tracking_url

URL adresa pro sledování zásilky

URL

shipping.customer_payment_details

Údaje o platbě zákazníka za dopravu

Array

shipping.customer_payment_details[].amount

Částka, kterou zákazník platí za dopravu

Decimal

shipping.customer_payment_details[].currency

Měna platby

String (ISO 4217)

shipping.customer_payment_details[].invoice_url

URL adresa faktury za dopravu

URL

Využití dat z webhooku

Data z webhook události shipping.ordered můžete využít například k:

  • Aktualizaci informací o odeslané zásilce ve vašem systému

  • Automatickému odeslání e-mailu zákazníkovi s informacemi o sledování zásilky

  • Zaznamenání nákladů na dopravu pro účetní a analytické účely

  • Synchronizaci stavu objednávky mezi Retinem a vaším e-shopem

Implementace na straně příjemce

Pro správné přijímání a zpracování webhooků doporučujeme:

  1. Implementovat ověření X-Retino-Secret hlavičky pro zabezpečení

  2. Zajistit, že váš server odpoví do 10 sekund (i když zpracování dat bude probíhat asynchronně)

  3. Implementovat idempotentní zpracování webhooků (stejný webhook může být doručen vícekrát)

Ukázka implementace v PHP

// Získání dat z webhoku
$payload = file_get_contents('php://input');
$data = json_decode($payload, true);
$secretToken = $_SERVER['HTTP_X_RETINO_SECRET'] ?? null;// Ověření tajného tokenu
$expectedToken = 'váš_tajný_token'; // Získáte z nastavení webhooku v Retinu
if ($secretToken !== $expectedToken) {
    http_response_code(401);
    exit('Unauthorized');
}// Rychlá odpověď a asynchronní zpracování
http_response_code(200);
header('Content-Type: application/json');
echo json_encode(['status' => 'accepted']);// Uvolnění spojení pro zpracování na pozadí
if (function_exists('fastcgi_finish_request')) {
    fastcgi_finish_request();
}// Zpracování dat o dopravě
if ($data['event_type'] === 'shipping.ordered') {
    $shipping = $data['shipping'];
    
    // Uložení dat o zásilce do vaší databáze
    saveShippingData(
        $shipping['id'],
        $shipping['client_reference'],
        $shipping['tracking_number'],
        $shipping['tracking_url']
    );
    
    // Odeslání e-mailu zákazníkovi s informacemi o sledování
    if (!empty($shipping['tracking_url']) && !empty($shipping['tracking_number'])) {
        sendTrackingEmail(
            $shipping['client_reference'],
            $shipping['tracking_number'],
            $shipping['tracking_url']
        );
    }
}

Monitorování a řešení problémů

Všechny odeslané webhooky a odpovědi jsou v Retinu dostupné v detailu konkrétního webhooku v Nastavení webhooků. Zde můžete:

  • Vidět historii odeslaných webhooků

  • Zobrazit detaily požadavků včetně payloadu

  • Zobrazit odpovědi vašeho serveru

  • Odeslat testovací událost pro ověření funkčnosti

Upozornění: Pokud váš server neodpoví do 10 sekund nebo odpoví chybovým stavovým kódem, doručení webhooku selže. Retino se bude snažit doručit takový webhook znovu po dobu 72 hodin s exponenciálním odstupem mezi pokusy (2 min, 4 min, 8 min, 16 min...) až do max. intervalu 1 hodiny.

Pokud bude doručování neúspěšné po dobu 72 hodin, endpoint bude automaticky deaktivován a administrátoři účtu budou informováni emailem.

Dostali jste odpověď na svou otázku?