WooCommerce giver desværre ikke mulighed for at "suppresse" webhooks i deres API. Hvis man har to-vejs-sync mellem Customers 1st og WooCommerce, vil man derfor kunne opleve en fejl, hvor der sendes opdatering til WooCommerce og WooCommerce sender det "gamle" lagertal tilbage til Customers 1st med det samme igen.
Der sker basalt set følgende, når I har lavet en opdatering i Customers 1st:
C1st sender opdatering til Woo med f.eks. nyt lagertal
Fordi I har to-vejs sync sat op, så sender Woo, med det samme, en webhook/opdatering tilbage den anden vej. Denne er meget uhensigtsmæssig, men kan ikke undgås, da Woo ikke giver nogle muligheder for dette som standard.
C1st modtager "opdatering" på det produkt der netop er sendt update afsted på, og vi er derfor nødt til at behandle denne opdatering, og ændre f.eks. lagertal eller andet.
Vi sørger i C1st for at "stoppe den her", for ikke at fortsætte loopet.
Hvis det lagertal vi har sendt afsted fra C1st til Woo, er det samme lagertal vi får tilbage fra Woo til C1st igen, så er der sådan set ikke noget problem, og vi ignorerer bare opdateringen.
Problemet opstår, når WooCommerce i nogle tilfælde, sender webhook/opdatering afsted INDEN at Woo's egen database er blevet opdateret med det korrekte lagertal fra C1st.
Dermed kan der opstå en situation hvor C1st sender f.eks. nyt lagertal på "4" afsted til Woo (hvor der står f.eks. 3 før), og Woo sender så webhook tilbage med lagertal "3" til C1st.
Da I har to-vejs sync sat op, og vi ikke kan kende forskel på "rigtige" og "forkerte" opdateringer, er vi nødt til at lade opdateringen gå igennem, og dermed er fejlen opstået.
Ovenstående sker kun ved to-vejs sync slået til, og afhænger meget af WooCommerce shoppens opsætning.
Vi har selv implementeret et "delay", når vi får opdateringer fra Woo, for at give plads til shoppen for at nå at lave opdatering, og vi ignorerer også mange updates der kommer "for hurtigt" efter hinanden.
Desværre er det et problem der opstår pga. WooCommerce, og derfor er det begrænset hvad vi kan gøre.
Vi anbefaler at implementere mulighed for at suppresse hooks, sådan så der ikke sendes opdatering tilbage fra Woo igen, og loopet ikke opstår. Se bl.a. eksempel på dette her, hvor netop det omtalte problem også nævnes: https://shanerutter.co.uk/fix-woocommerce-webhook-loop/
Vi har allerede implementeret en header til brug af dette i vores integration med værdien "HTTP_X_SUPPRESS_HOOKS".