Webhook-uri
flowSCMC trimite POST JSON către URL-ul dvs. când apar evenimente. Cookbook: HMAC, retry, 4xx/5xx.
Configurare în aplicație
Autentificați-vă → Administrare → Webhook-uri: creați un webhook cu URL HTTPS și evenimentele dorite.
Format cerere
- Metodă: POST ·
Content-Type: application/json X-Webhook-Event- tipul evenimentuluiUser-Agent- 3PL-WMS-Webhook/1.0- Opțional:
X-Webhook-Signature(HMAC),AuthorizationBearer/Basic sau header personalizat
{
"event": "article.created",
"timestamp": "2026-02-12T14:30:00+00:00",
"data": { }
}
Tipuri autentificare
| Tip | Descriere |
|---|---|
none | Fără autentificare pe request-ul outbound |
hmac | Header X-Webhook-Signature = HMAC-SHA256 al corpului JSON |
bearer | Authorization: Bearer <token> |
basic | Authorization: Basic … |
custom | Header personalizat (nume + valoare) |
Verificați semnătura HMAC pe serverul dvs. înainte de a procesa evenimentul. Retry-urile și dead-letter sunt gestionate în aplicație (Administrare → Webhook-uri → livrări).
Evenimente
- Articole:
article.created,article.updated - SO:
sales_order.created|updated|status_changed - PO / recepții:
purchase_order.*,reception.* - Retururi, stoc, ambalaje:
return.*,stock.updated,stock.low,packaging.movement_recorded
Gestionare abonamente REST:
/api/webhooks/api/webhooks/api/webhooks/{id}/api/webhooks/{id}Cookbook: integrare end-to-end
- În aplicație: Administrare → Webhook-uri → creați URL HTTPS + evenimente (ex.
sales_order.created). - Setați autentificare
hmac(sau signing secret) - primiți headerX-Webhook-Signature: sha256=…. - Endpoint-ul dvs. citește corpul brut, verifică semnătura, apoi răspunde 2xx rapid (< câteva secunde).
- Procesați asincron (coadă) după ACK - nu blocați HTTP-ul pe ERP lent.
- Testați din playground-ul de mai jos sau din Administrare → Test / livrări.
Verificare HMAC
Semnătura = HMAC-SHA256 pe corpul JSON exact (byte-cu-byte), prefix sha256=. Secretul e cel configurat pe webhook.
# PHP
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $raw, $secret);
if (!hash_equals($expected, $sig)) { http_response_code(401); exit; }
// Node.js
const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) {
return res.status(401).end();
}
Retry, timeout, erori
| Parametru | Implicit | Semnificație |
|---|---|---|
| Încercări | 5 | Livrări înainte de eșec final |
| Backoff | 30s, 2min, 8min, 32min | Pauze între retry-uri |
| Timeout HTTP | 10s | Timp maxim de așteptare răspuns |
- 2xx - livrare reușită, fără retry.
- 5xx / timeout / rețea - se reîncearcă după backoff.
- 4xx (ex. 401 semnătură, 404 URL greșit) - eșec de livrare; corectați endpoint-ul / secretul și retrimiteți din istoric.
- Istoricul: Administrare → Webhook-uri → livrări (status, răspuns, retry).
event + id din data; logați X-Webhook-Event; doar HTTPS.Playground webhook
Generați un payload de test și trimiteți-l la URL-ul dvs. (doar HTTPS; limită pe server).
Integrările de intrare partenere (eTSM, MDM) folosesc un token Bearer dedicat - vezi documentația eTSM.