Webhooks og ERP: undgå dobbelte ordrer
Skeln mellem hændelse og ordre. Et gennemarbejdet eksempel viser gentagelser, samtidige leveringer og et mistet ERP-svar.

Planlæg gentagne beskeder som et normalt vilkår for din webshopintegration. En webhook er en HTTP-besked, som afsendersystemet starter. Udebliver bekræftelsen, kan beskeden komme igen. Det må ikke oprette en ekstra ERP-ordre.
Stripe beskriver gentagne hændelser og muligheden for særskilte hændelser om samme objekt. Kontrollér den faktiske afsenders regler. Eksemplet her er fiktivt og beskriver ikke Stripes API.
To identifikatorer med forskellige opgaver
Webshoppen shop-1 har ordren W-240. Hændelsen evt-17 melder dens oprettelse. ERP-systemet giver den koden E-901. Hændelsesidentifikationen genkender en gentagen levering; webshop og ordre identificerer tilsammen forretningshandlingen. En senere evt-18 kan melde en ændring til samme ordre.
Besked eller fejl | Forventet resultat |
|---|---|
Første evt-17 | Opret E-901 i ERP og knyt den til W-240. |
Gentaget evt-17 | Genkend den eksisterende handling; ingen ekstra ordre. |
To samtidige kopier af evt-17 | En entydighedsregel tillader kun én behandlingsopgave. |
evt-18 for W-240 | Knyt ændringen til den eksisterende ordre og vurder ændringsreglerne. |
ERP opretter ordren, men svaret går tabt | Udfaldet er i første omgang uklart; afstem med samme identifikation før ny oprettelse. |
Gem modtagelsen varigt
Kontrollér først beskedens ægthed med afsenderens metode. Gem derefter hændelsen varigt, før du bekræfter modtagelsen. En entydighedsregel for afsender og hændelse forhindrer separate opgaver ved samtidige kopier. En søgning før indsættelse alene er ikke nok ved samtidighed.
Den videre behandling skal pålideligt følge af den varige lagring. En baggrundsproces kan overtage gemte, åbne hændelser. Handlingen kan dermed stadig findes efter et nedbrud mellem modtagelse og behandling.
Et muligt svar efter lagringen:
{
"eventId": "evt-17",
"orderId": "W-240",
"status": "queued"
}Eksemplet bruger HTTP-status 202. Svaret bekræfter optagelse til behandling, ikke en ERP-ordrebekræftelse. Hvis varig modtagelse ikke kan sikres, må modtageren ikke melde succes.
Beskyt også ERP-kaldet mod gentagelse
Brug en stabil oprettelsesnøgle som shop-1:W-240:create, hvis målsystemet understøtter det. Behold nøglen ved et sikkert nyt forsøg. Stripe viser princippet for sin egen API; præcis betydning og opbevaring afhænger af målsystemet.
Uden denne funktion kræves en anden pålidelig kobling: eksempelvis en ekstern ordrekode med håndhævet entydighed i målsystemet og mulighed for at hente udfaldet. Er oprettelsen uklar efter timeout, skal handlingen afvente afstemning. En ny tilfældig kode ville få gentagelsen til at ligne en ny oprettelse.
Lagring af hændelsen og oprettelse i ERP på tværs af to systemer udgør ikke automatisk én transaktion. Hold modtagelse, behandling, uklart udfald og bekræftet afslutning adskilt. I eksemplet slutter oprettelsen først med bekræftet kobling til E-901.
Afprøv også fejltilfældene
Send evt-17 igen efter hinanden og samtidigt. Afbryd svaret efter vellykket ERP-oprettelse. Prøv derefter evt-18 som en reel ændring. Forvent én oprettelse, bevaret kobling og synlig afstemningsstatus ved ukendt udfald. Fastlæg også, hvor længe identifikatorerne skal gemmes for mulige gentagelser.
Kilder
Læs videre
Alle artikler




Snitflader & integration med ASES
ERP, CRM og webshop forbundet ordentligt

