Dansk hosting fra Aalborg
100% CO₂-neutral hosting
24/7/365 dansk support
support@hostious.io
● Hostious viden · artikel

WooCommerce webhook virker ikke: status, signatur og leveringslog

Skrevet af , stifter af Hostious · Udgivet 28. august 2026 · Opdateret 30. august 2026
WooCommerce webhook virker ikke: status, signatur og leveringslog

Kort svar: Bekræft først, at webhooken er aktiv, har det rigtige topic og peger på den korrekte HTTPS-adresse. Udløs én testhændelse, og find dens delivery-ID i WooCommerce → Status → Logs under webhooks-delivery. HTTP-status og modtagersvar afgør næste trin. Del aldrig webhook-secret eller fulde payloads. Genafspil kun testen, hvis modtageren er idempotent og ikke kan oprette en ekstra ordre, betaling eller forsendelse.

Fagligt gennemgået: 28. august 2026

Kontrolgrundlag: WordPress 7.1, WooCommerce 11.0.1 og PHP 8.4.23 på isoleret staging samt aktuel produktdokumentation. Signatur og genafspilning skal valideres mod den konkrete modtagers implementering.

En webhook kan fejle fire steder: hændelsen bliver ikke udløst, WooCommerce sætter ikke leveringen i kø, HTTP-kaldet når ikke modtageren, eller modtageren afviser data/signatur. Fejlsøg i den rækkefølge. Ellers risikerer du at ændre secrets for en webhook, der aldrig blev trigget.

Headers, der forbinder de to systemers logs

Notér headernavne og de ufølsomme ID'er, som modtageren bruger til sporing: delivery-ID, topic, resource-ID og eventuelt webhook-ID. Signaturværdien, secret, authorization, cookies og hele payloaden er ikke publiceringsmateriale.

Modtageren bør logge delivery-ID, beregnet behandlingsresultat og egen request-ID. Så kan en WooCommerce-levering kobles til præcis én modtagerhændelse uden at gemme kundens komplette ordredata i fejlsøgningsloggen.

I WooCommerce 11.0.1 findes webhooklisten under WooCommerce → Indstillinger → Avanceret → Webhooks. Logvisningen ligger under WooCommerce → Status → Logs, hvor en relevant webhooks-delivery-kilde vælges. Menunavne kan ændre sig med admin-sprog og gateway-/loggingopsætning, så versionsnummeret skal følge screenshots og supportsag.

Deaktiveret syntetisk WooCommerce-webhook til et ugyldigt testdomæne
WooCommerce 11.0.1 med syntetisk og deaktiveret webhook oprettet 28. august 2026 på isoleret staging. Destinationen bruger .invalid; billedet er ikke bevis for en rigtig leveringsfejl.

Bekræft webhookens identitet

  1. Gå til WooCommerce → Indstillinger → Avanceret → Webhooks.
  2. Notér webhook-ID, navn, status, topic og destination. Secret må ikke kopieres.
  3. Kontroller, at det valgte topic svarer til testhændelsen. “Ordre oprettet” og “ordre opdateret” er ikke samme event.
  4. Udløs én ufarlig hændelse i et isoleret testsystem.
  5. Find leveringen under WooCommerce → Status → Logs → webhooks-delivery.
  6. Match delivery-ID, resource-ID og UTC-tid med modtagerens access-/applikationslog.

Diagnoseoversigt

FundSandsynlig årsagKontrolNæste skridt
Ingen delivery-logForkert topic, webhook paused/disabled eller køproblemStatus, testevent og Scheduled ActionsRet trigger/kø
2xx, men ingen behandlingModtageren kvitterer før intern fejl eller ignorerer eventModtagerlog med delivery-IDRet mapping/handler
301/302Destination omdirigererLocation-headerBrug endelig endpoint-URL
401/403Auth, signatur, WAF eller adgangsregelModtager-/WAF-logRet præcist krav
404Forkert sti eller deployDestination og routingOpdatér endpoint
429Rate limitRetry headers og volumenThrottle/batch efter integrationsdesign
5xx/timeoutModtagerfejl eller langsom handlerApplikationslog og responstidRet modtageren før replay
Webhook bliver automatisk disabledGentagne leveringsfejlSeneste leveringerRet årsagen, aktivér og test én gang

Løsning i sikker rækkefølge

1. Ret status, topic og endelig URL

En aktiv webhook sender et ping første gang, den gemmes aktiv. WooCommerce kan deaktivere den efter gentagne fejlleveringer. Ret ikke bare status til Aktiv igen; læs de seneste leveringer og ret 4xx/5xx-årsagen først.

Brug den endelige HTTPS-endpoint-URL uden redirect. Omdirigeringer kan ændre metode, headers eller body i nogle klient-/proxykæder og gør logafstemning sværere.

2. Match event og delivery-log

Vælg en hændelse med et unikt test-resource-ID. Gem delivery-ID, statuskode, forsøgsnummer og tidspunkt. Hvis samme event har flere deliveries, afgør om WooCommerce genforsøgte efter en fejl, eller om kilden faktisk udløste eventet flere gange.

3. Verificer signaturen korrekt

WooCommerce sender en HMAC-SHA256-signatur af den rå request body i webhook-headeren. Modtageren skal beregne signaturen over de nøjagtige bytes, før JSON normaliseres eller body genkodes, og sammenligne sikkert. Secret skal opbevares som hemmelighed og må ikke logges.

Hvis signaturen fejler, kontroller at begge systemer bruger samme secret, samme rå body og base64-format. Rotér secret via en plan, hvor gammel og ny modtager ikke skaber et leveringshul.

4. Ret HTTP-fejlen ved kilden

  • 401/403: Find om afvisningen kommer fra applikation, reverse proxy, WAF eller basic auth.
  • 404: Kontroller deploy, path og trailing slash.
  • 429: Respekter modtagerens rate limit og undgå ukontrollerede retries.
  • 5xx: Brug modtagerens request-ID og log; WooCommerce kan ikke rette en crashende receiver.
  • Timeout: Svar hurtigt efter validering og læg tung behandling i modtagerens egen kø, hvis integrationsdesignet tillader det.

Slå ikke firewall eller signaturkontrol globalt fra. Lav den smalleste dokumenterede regel.

5. Kontroller Action Scheduler

Webhooklevering kan indgå i baggrundskøen. Se Scheduled Actions efter relevante webhook-hooks, pending/failed-status og handlingslog. Kør ikke hele køen. Hvis mange forskellige jobtyper er forfaldne, er Action Scheduler-guiden den rigtige ejer.

6. Genafspil sikkert

Før replay skal modtageren kunne genkende et allerede behandlet delivery-/event-/resource-ID. Test først med en ufarlig ressource. En replay må ikke oprette endnu en betaling, ordre, faktura, forsendelse eller lagerbevægelse.

Et dokumenterbart testforløb på staging

Brug en syntetisk ressource, som ikke kan udløse livebetaling, mail, fragt eller regnskab. Til et ordre-topic kan det være en tydeligt mærket testordre med .test-mailadresse, testprodukt og gatewayens sandbox. Blokér eller omdirigér alle andre udgående integrationer på staging.

  1. Notér webhook-ID, status, topic, destinationens host og WooCommerce-version. Skjul path, hvis den indeholder token.
  2. Sørg for, at modtageren har en testlog med UTC-tid, request-ID og idempotensnøgle.
  3. Opret én unik testressource og registrér dens ID før eventet.
  4. Udløs præcis den ændring, som matcher topic – eksempelvis én statusændring, ikke flere redigeringer.
  5. Find delivery-forsøget og gem status, varighed, ufølsomme headernavne og redigeret response.
  6. Match samme delivery/resource/tid hos modtageren.
  7. Ret ét lag og gentag med en ny testressource, så gammelt log- eller køoutput ikke forveksles med eftertesten.

Hvis der ikke kommer en delivery-log, kontrolleres webhookstatus, topic og Scheduled Actions. Hvis delivery findes, men modtageren intet ser, ligger bruddet mellem WooCommerce HTTP-klient, DNS/TLS/proxy/WAF og receiver. Hvis modtageren logger requesten, men WooCommerce ser timeout, kan receiveren have behandlet eventet før forbindelsen blev afbrudt; replay kræver derfor idempotenskontrol.

Test signaturen uden at offentliggøre hemmeligheder

Gem den rå request body som en adgangsbeskyttet testfixture, og beregn HMAC med den konfigurerede secret i modtagerens testmiljø. Log kun bestået/fejlet, algoritme, delivery-ID og et internt fixture-hash – aldrig secret eller den fulde signaturværdi. Kør også en negativ kontrol ved at ændre én byte i fixturekopien; verifikationen skal da fejle.

Hvis positiv og negativ kontrol begge består, er signaturkontrollen ikke reel. Hvis begge fejler, sammenlign rå bytes før parsing, secretversion og base64-håndtering. Normalisering af JSON, linjeskift eller tegnsæt før HMAC kan ændre resultatet.

Før/efter-matrix

SignalFør rettelseEfter rettelseBestået når
TriggerIngen eller forkert eventÉt forventet eventTopic matcher ændringen
WooCommerce deliveryMangler/4xx/5xx/timeoutForventet 2xxIngen redirect og log kan matches
ReceiverlogMangler eller afviserSamme delivery-ID behandlesRessource og schema valideres
SignaturFail/ikke testetPositiv pass, negativ failSecret forbliver skjult
SideeffektMangler eller dubleresPræcis én forventet handlingAntal og ressource-ID stemmer
ReplayUkendt risikoKontrolleret gentagelseIngen ekstra sideeffekt

Kør mindst to nye events efter rettelsen. Det første kan være påvirket af gammel kø eller cache; det andet viser, om webhooken forbliver aktiv og stabil. Brug nye resource-ID'er, men samme testprocedure.

Hvorfor et 2xx-svar ikke altid er nok

Nogle modtagere svarer 200, straks når requesten er lagt i deres interne kø. Det er et korrekt integrationsmønster, men WooCommerce kan kun se HTTP-kvitteringen. Derfor skal den interne receiverlog også vise, om eventet senere blev behandlet, afvist eller sendt til dead-letter-kø.

Omvendt kan modtageren gennemføre handlingen og derefter returnere timeout/5xx. WooCommerce eller gatewayen kan så retry samme event. Det er grunden til, at modtagerens idempotens skal verificeres, selv når normaltrafikken ser fejlfri ud.

Topic- og payloadændringer

En integration kan bryde efter en WooCommerce-/pluginopdatering, selv om endpointet fortsat svarer 2xx. Sammenlign den anonymiserede payloadstruktur i testmiljøet med modtagerens schema og påkrævede felter. Fiks mapping eller versionskontrakt; hardcod ikke en kundespecifik payload.

Gem en minimal skemafixture for hver understøttet topic/version: feltnavne, typer og hvilke felter modtageren faktisk kræver. Persondata og værdier fjernes. Efter opdatering køres fixturet gennem modtagerens validering, før livehændelser åbnes. Et ukendt ekstra felt bør normalt ikke vælte integrationen; et manglende påkrævet felt skal give en tydelig, sporbar fejl uden at kvittere falsk for behandling.

Når Action Scheduler er forsinket

Filtrér efter det relevante hook og tidsvindue. En fremtidig Pending-handling er ikke en fejl, og en enkelt manuel “Run” beviser ikke, at køen arbejder automatisk. Kontroller planlagt tidspunkt, faktisk start, afslutning og actionlog. Hvis flere forskellige hooktyper er forfaldne, skal køens runner/cron og serverkapacitet løses før webhooken genaktiveres i volumen.

Kør ikke alle forfaldne handlinger som test. Det kan sende gamle mails, callbacks eller lagerjobs. Brug én syntetisk handling eller vent på næste planlagte testevent, og dokumentér at den bliver hentet automatisk.

Verifikation

  • Ny testevent skaber præcis én delivery med forventede headers.
  • Modtageren returnerer forventet 2xx uden redirect.
  • Signaturen valideres, og resource-/event-ID logges uden secret eller persondata.
  • Samme testevent kan modtages igen uden dobbelt sideeffekt, hvis replay er en del af designet.
  • Webhooken forbliver Aktiv efter flere kontrollerede testevents.

Rollback

Gendan tidligere destination, topic eller secret-konfiguration fra sikker backup. Ved secret-rollback skal begge systemers rotationsvindue koordineres. Stop webhooken midlertidigt, hvis modtageren skaber skadelige dubletter; dokumenter pausen og køen, før den aktiveres igen.

Hvornår skal du eskalere?

Modtagerens udvikler skal have delivery-ID, status, tidspunkt og redigeret payloadstruktur. Hosting skal have request-ID og WAF-/proxybevis ved 403/timeout. WooCommerce-/pluginudvikler skal have reproducerbart manglende trigger- eller queueforløb. Se WooCommerce hosting hos Hostious ved server-/køproblemer.

Ofte stillede spørgsmål om webhooks

Hvor ser jeg, om mine webhooks bliver leveret?

I WooCommerce → Status → Logs under webhooks-delivery. Hvert forsøg har HTTP-status og svar fra modtageren – det er dit primære fejlsøgningsværktøj.

Hvorfor deaktiverer WooCommerce min webhook af sig selv?

Efter gentagne fejlede leveringer sættes den på pause. Ret modtager-URL’en eller dens svar (den skal returnere 2xx hurtigt), og aktivér webhooken igen.

Kan jeg gensende mistede webhook-hændelser?

Ja, men gør det kontrolleret: genafspil kun de fejlede leveringer, og sørg for at modtagersystemet håndterer dubletter (idempotens), så en gentaget hændelse ikke skaber dobbelte ordrer eller lagertræk.

Læs også

Dokumentér leveringen fra begge ender

Gem webhookens topic og destination uden secret, WooCommerces filtrerede delivery-log og modtagerens log med delivery-ID. Skjul signaturværdi, secret, persondata og payloadfelter, som ikke er nødvendige for diagnosen.

Dokumentationen skal vise den samme levering fra begge systemer: event-ID, tidspunkt, HTTP-status, latenstid og modtagerens behandling. Ved signaturfejl gemmes kun resultatet af kontrollen og oplysninger om, at de rå bytes blev brugt. Afslut med én kontrolleret 2xx-test, én bevidst afvist test og en genlevering af samme testevent, som ikke må skabe en dublet.