Portfolio

WooCommerce-integrasjon med grossist-API: en nettbutikk for bildeler

Case study av integrasjon mellom en WooCommerce-butikk og REST-API-et til en bildelsgrossist: synkronisering av katalog, lagerbeholdning og priser i sanntid samt automatisk margin-logikk.

#Nettbutikker
WooCommerce-integrasjon med grossist-API: en nettbutikk for bildeler

#WooCommerce-integrasjon med grossist-API for bildeler

En nettbutikk for bildeler lever og dør på hvor komplett og oppdatert katalogen er. Med titusenvis av indekser der tilgjengelighet og pris skifter hos leverandøren fra én dag til den neste, er manuell vedlikehold av sortimentet et tapt spill. I dette prosjektet koblet vi en WooCommerce-butikk direkte til grossistens webtjeneste over REST-API, slik at katalog, lager og priser holder seg oppdatert selv. Navnene på kunden og leverandøren forblir konfidensielle.

#Problemet: å selge varer som ikke finnes

Den dyreste feilen i en slik butikk er å ta imot og fakturere for en del leverandøren ikke fysisk har. Det ender i refusjoner, klagehåndtering og tapt tillit. I tillegg kommer prisdrift: grossisten endrer prislisten, butikken fortsetter å selge til gammel pris, noen ganger under egen kostnad. Målet var derfor konkret. Katalogen må gjenspeile det leverandøren faktisk har tilgjengelig og til hvilken pris, uten manuelt arbeid.

#Arkitektur: WooCommerce koblet til grossistens webtjeneste

Grunnlaget er WordPress med WooCommerce, og integrasjonslaget er dedikert PHP som snakker med grossistens REST-API. Leverandøren eksponerer data i både JSON og XML, så integrasjonen tolker begge og reduserer dem til én intern modell. Synkroniseringen kjører etter tidsplan i bakgrunnen (WP-Cron-jobber), delt opp i lettere, hyppig henting av lager og pris og en tyngre, sjeldnere oppdatering av hele sortimentet.

#Kartlegging av grossistdata til WooCommerce-produkter

Grossisten beskriver produkter med sin egen feltstruktur. Integrasjonens oppgave er å oversette dette til WooCommerce sin produkt- og attributtmodell. Blant annet kartlegger vi:

  • EAN og indeks - nøklene som identifiserer et produkt og knytter butikkvaren til grossistoppføringen ved hver påfølgende synkronisering.
  • Tekniske attributter - deleparametere som overføres til WooCommerce-attributter og varianter slik at parameterfiltre og søk fungerer.
  • Media og beskrivelser - bilder og HTML-beskrivelseskoder hentet fra grossistens endepunkter og plassert på produktsidene.

Feltkartleggingen er deklarativ, så å legge til en ny parameter fra grossisten betyr å utvide kartleggingen, ikke å skrive om logikken.

#Synkronisering av lager og priser i sanntid

Kjernen i integrasjonen er å spørre API-et etter tidsplan om to ting: lagerbeholdningen for hver indeks og distributørens netto utsalgspris. Varer leverandøren ikke har på lager, merkes automatisk som utilgjengelige eller skjules, noe som direkte oppfyller hovedmålet: en kunde kan ikke kjøpe en del som ikke kan leveres. En prisendring i grossistens prisliste forplanter seg til butikken ved neste syklus, uten involvering fra de ansatte.

#Margin-logikk

Grossistprisene er kostnad, ikke salgspris. Over datahentingslaget ligger margin-logikk: systemet legger automatisk en definert butikkmargin på distributørens netto utsalgspris, og bare resultatet når WooCommerce som produktpris. Det holder butikkens tiltenkte lønnsomhet intakt selv når leverandørprislistene endrer seg, og eieren styrer marginen med regler i stedet for å redigere priser for hånd.

#Resultat

Katalogen vedlikeholder seg selv: nye grossistvarer dukker opp i butikken, utgåtte forsvinner, lager og priser følger leverandøren, og marginen beskytter lønnsomheten. De ansatte sluttet å oppdatere sortimentet for hånd og sluttet å slåss med bestillinger på deler som aldri var tilgjengelige. Det er den samme mekanismen for datautveksling, JSON/XML-tolkning og lagerkartlegging som ligger bak WooCommerce-integrasjoner med ERP-klasse systemer - den skiller seg i datakilden, ikke prinsippet.