Gå til indholdet

Webhooks og ERP: undgå dobbelte ordrer

Skeln mellem hændelse og ordre. Et gennemarbejdet eksempel viser gentagelser, samtidige leveringer og et mistet ERP-svar.

Tobias Krüger2 min. læsetid
Klokke ved et webhook-symbol med en buet blå gentagelsespil.

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

Skrevet af

  • Tobias KrügerRedaktør for systemintegrationTobias Krüger beskæftiger sig hos ASES med samspillet mellem forskellige softwaresystemer. I sine artikler forklarer han integrationen af ERP, CRM og webshops samt håndteringen af fejl i dataudvekslingen.

Følg ASES

Læs videre

Alle artikler

Snitflader & integration med ASES

ERP, CRM og webshop forbundet ordentligt