WooCommerce gir dessverre ikke mulighet for å «suppresse» webhooks i API-et deres. Hvis man har toveis-sync mellom Customers 1st og WooCommerce, vil man derfor kunne oppleve en feil, hvor det sendes oppdatering til WooCommerce og WooCommerce sender det «gamle» lagerantallet tilbake til Customers 1st med en gang igjen.
Det skjer i bunn og grunn følgende når dere har gjort en oppdatering i Customers 1st:
C1st sender oppdatering til Woo med for eksempel nytt lagerantall
Fordi dere har toveis-sync satt opp, sender Woo med en gang en webhook/oppdatering tilbake den andre veien. Denne er veldig uhensiktsmessig, men kan ikke unngås, siden Woo ikke gir noen muligheter for dette som standard.
C1st mottar «oppdatering» på det produktet det nettopp er sendt update av gårde på, og vi er derfor nødt til å behandle denne oppdateringen og endre for eksempel lagerantall eller annet.
Vi sørger i C1st for å «stoppe den her», for å ikke fortsette loopen.
Hvis lagerantallet vi har sendt av gårde fra C1st til Woo, er det samme lagerantallet vi får tilbake fra Woo til C1st igjen, så er det egentlig ikke noe problem, og vi ignorerer bare oppdateringen.
Problemet oppstår når WooCommerce i noen tilfeller sender webhook/oppdatering av gårde FØR Woo sin egen database har blitt oppdatert med det riktige lagerantallet fra C1st.
Dermed kan det oppstå en situasjon hvor C1st sender for eksempel nytt lagerantall på «4» av gårde til Woo (hvor det står for eksempel 3 før), og Woo så sender webhook tilbake med lagerantall «3» til C1st.
Siden dere har toveis-sync satt opp, og vi ikke kan kjenne forskjell på «riktige» og «feil» oppdateringer, er vi nødt til å la oppdateringen gå gjennom, og dermed har feilen oppstått.
Ovenstående skjer kun ved to-veis sync slått på, og avhenger mye av WooCommerce-butikkens oppsett.
Vi har selv implementert en «delay» når vi får oppdateringer fra Woo, for å gi plass til butikken til å rekke å gjøre oppdatering, og vi ignorerer også mange oppdateringer som kommer «for fort» etter hverandre.
Dessverre er det et problem som oppstår på grunn av WooCommerce, og derfor er det begrenset hva vi kan gjøre.
Vi anbefaler å implementere mulighet for å undertrykke hooks, slik at det ikke sendes oppdatering tilbake fra Woo igjen, og loopen ikke oppstår. Se blant annet eksempel på dette her, hvor nettopp det omtalte problemet også nevnes: https://shanerutter.co.uk/fix-woocommerce-webhook-loop/
Vi har allerede implementert en header til bruk av dette i vår integrasjon med verdien «HTTP_X_SUPPRESS_HOOKS».