De melding kwam binnen als een boekhoudprobleem, niet als een storing. Een speciaalzaak in koffieapparatuur zag in het besteloverzicht regelmatig twee identieke bestellingen achter elkaar staan, van dezelfde klant, op dezelfde seconde, met hetzelfde bedrag. Meestal was er één betaald en één niet. Soms allebei.

Dubbele bestellingen in een webshop worden bijna altijd toegeschreven aan ongeduldige klanten die twee keer op de knop drukken. Dat was hier ook de eerste verklaring, en het klonk plausibel genoeg om er drie weken niets aan te doen. Tot een klant belde dat hij twee keer was afgeschreven.

Dubbele bestellingen in deze webshop: wat we aantroffen

De shop draaide op WooCommerce, ongeveer vierhonderd bestellingen per maand, en was in de loop van vier jaar door drie verschillende partijen aangeraakt. Dat laatste bleek het belangrijkste gegeven.

In het besteloverzicht stonden over acht weken achtenveertig gevallen van twee orders binnen dezelfde minuut. Bij zesendertig daarvan stond er één op “in afwachting van betaling” en één op “verwerken”. Bij twaalf stonden beide op “verwerken”, en in die twaalf gevallen was er ook twee keer geld binnengekomen.

De klantverklaring hield geen stand zodra we naar de tijdstempels keken. Bij een klant die twee keer klikt, zit er meestal enkele seconden tot een halve minuut tussen. Hier zat er in de meeste gevallen precies nul of één seconde tussen, en de twee orders hadden opeenvolgende nummers. Dat is geen menselijk gedrag; dat is software.

Het spoor terug

De volgorde waarin we zochten, is dezelfde die u zelf kunt aanhouden.

  1. Kijk of het aan één betaalmethode hangt. Dat deed het: alle dubbele orders kwamen binnen via iDEAL. Bestellingen met een overboeking of achteraf betalen kwamen nooit dubbel.
  2. Kijk naar de ordernotities. WooCommerce schrijft bij elke bestelling automatisch op wat er gebeurt. Bij de dubbele orders stond bij beide een regel dat de betaling was bevestigd, met hetzelfde transactiekenmerk van de betaaldienst.
  3. Kijk in het overzicht van de betaaldienst. Daar stond de betaling één keer. Er was dus geen dubbele betaling geïnitieerd; er werd één betaling twee keer verwerkt.
  4. Kijk naar de actieve plugins. En daar zat het. Er stonden twee betaalplugins actief: de officiële koppeling van de betaaldienst en een oudere, algemene betaalplugin die door een eerdere partij was geïnstalleerd en nooit verwijderd.

Beide plugins luisterden naar dezelfde melding van de betaaldienst. Zo’n melding, in de wandelgangen een webhook, is een bericht dat de betaaldienst naar uw shop stuurt zodra er is betaald. De ene plugin koppelde de melding aan de bestaande bestelling. De andere herkende de bestelling niet als de hare, en maakte er een nieuwe bij aan.

Dat verklaarde ook waarom het niet altijd gebeurde. Alleen wanneer de melding twee keer werd afgeleverd, iets wat betaaldiensten bewust doen om zeker te zijn dat het bericht aankomt, kwam de tweede plugin aan zet.

De oplossing, en waarom die niet in vijf minuten kon

De ingreep zelf was klein: de oude plugin uitschakelen en verwijderen. Maar bij een winkel die draait, schakelt u geen betaalplugin uit zonder voorbereiding. Dit is wat we deden.

  1. Een volledige back-up van bestanden en database.
  2. Een kopie van de shop op een testomgeving, waarin we de oude plugin uitschakelden en tien testbestellingen doorliepen met alle aangeboden betaalmethoden.
  3. Controleren of de oude plugin ergens anders nog in gebruik was. Hij bleek de instellingen voor één inactieve betaalmethode te bevatten die de klant een jaar eerder had aangeboden. Die kon weg.
  4. Op de echte shop de plugin uitschakelen op een dinsdagochtend om zeven uur, en direct een echte bestelling plaatsen en betalen.
  5. De verweesde meldingsadressen bij de betaaldienst opruimen, zodat er nog maar één adres overbleef waar bevestigingen heen gingen.
  6. Twee weken lang dagelijks het besteloverzicht controleren op orders binnen dezelfde minuut.

Na die twee weken kwam het niet meer voor. Het opruimen van de administratie kostte meer tijd dan de reparatie: twaalf dubbele betalingen terugboeken, de boekhouding van twee maanden corrigeren en de zesendertig lege orders annuleren zonder de nummering in de war te schoppen.

Wat het de ondernemer had gekost

Geen dramatische bedragen, maar wel vervelend. Twaalf klanten die dubbel betaalden, waarvan er drie zelf hadden gebeld en negen dus niets hadden gemerkt of het niet de moeite waard vonden. Een voorraadadministratie die acht weken lang te laag stond omdat elke dubbele order ook dubbel afboekte. En een medewerker die wekelijks een uur bezig was met het opschonen van het besteloverzicht, in de veronderstelling dat dit nu eenmaal bij het werk hoorde.

Dat laatste is het patroon dat we het vaakst zien: een storing die niet als storing wordt herkend, omdat er een menselijke werkwijze omheen is gegroeid.

Wat u hieruit meeneemt

  • Draai nooit twee betaalplugins tegelijk, ook niet als er maar één zichtbaar in gebruik is. Uitgeschakelde methoden binnen een actieve plugin zijn prima; twee actieve plugins die dezelfde meldingen verwerken zijn dat niet.
  • Ruim op na een overdracht. Neemt u een site over van een ander bureau, loop dan de pluginlijst door en vraag bij elk item waar het voor dient. Wat daarbij verder komt kijken, staat in het artikel over het overnemen van een site van een ander bureau.
  • Kijk naar tijdstempels voordat u de klant de schuld geeft. Nul seconden verschil is nooit een dubbele klik.
  • Controleer bij uw betaaldienst welke meldingsadressen er staan. Daar blijven na jaren verrassend veel oude adressen hangen.
  • Laat een dubbele order nooit een gewoonte worden. Zodra iemand in uw bedrijf zegt “dat komt wel vaker voor, dat halen we er wel uit”, is er iets stuk.

Dit soort dingen komt aan het licht bij een gestructureerde doorlichting van een shop, en daarna blijft het weg door een vaste maandelijkse ronde. Bij WebMaintor hoort het nakijken van actieve betaalkoppelingen bij het reguliere beheerpakket voor webwinkels, samen met een testbestelling die daadwerkelijk wordt betaald. Loopt bij u het betalen zelf vast in plaats van dubbel, dan is de uitleg over iDEAL dat weigert het betere startpunt.

Concrete volgende stap: sorteer uw besteloverzicht op datum en kijk of er orders staan met opeenvolgende nummers binnen dezelfde minuut. Vindt u er meer dan een enkele, dan heeft u waarschijnlijk hetzelfde probleem.