13.10.2021

Laskutusvirhe

Tekevälle sattuu ja eilen sattui isosti :( Eilen ohjelmistovirheestä johtuen yhden palvelimen kaikki verkkokauppa-asiakkaat saivat laskun toisen verkkokauppa-asiakkaan nimellä.

Virhe kosketti viittä eri verkkokauppaa ja useampaa sataa tilausta. Kaikkia laskun saaneita on tiedotettu tekstiviestillä ja sähköpostilla. Laskutustietoja ei siirtynyt virheen yhteydessä asiakkaalta toiselle, paitsi laskutuspalveluun (Ropo Capital), jossa niitä joudutaan säilyttämään hyvityslaskuja varten. Laskutustietoja ei käytetä mihinkään muuhun ja niitä ei ole siirtynyt muiden verkkokauppojen tietokantoihin.

Vika oli luonteeltaan sellainen, ettei se näkynyt testiympäristössä kehitysvaiheessa. Testiympäristössä on muutamia testiasiakkaita, mutta yksikään niistä ei käytä laskutusrajapintaa, joten vika ilmeni vasta kun korjaus otettiin käyttöön yhdessä tuotantopalvelimessa.

Tarkempi tekninen kuvaus ongelmasta

Verkkokauppapalvelimella on yksi ajastettu käsittelijä, joka käsittelee kaikkien asiakkaiden laskujen lähetykset ja sähköpostit viiden minuutin välein. 12.10.2021 n. kello 10:00 siihen tehtiin muutos, jolla korjattiin erään asiakkaan virheellisesti toiminut viestien lähetys. Muutoksen yhteydessä ohjelmiston kehittäjä ei huomioinut, että while-silmukan sisällä määritettiin asiakkaan laskutusrajapinnan avaintiedot ja sähköpostin header- & footer-tiedot define-komennolla.

Define-komennon ominaisuuksiin kuuluu, ettei kerran asetettua arvoa ei enää voi muuttaa myöhemmin saman ohjelma-ajon sisällä. Koska Owela Oy on kyseisen silmukan ensimmäinen käsiteltävä kyseisellä palvelimella, kaikki asiakkaat saivat Owela Oy:n laskutusavaimen.

Tämä aiheutti sen, että laskutuskäsittelijä a) käytti Owelan laskutusrajapintaa b) huomasi, että muilla verkkokaupoilla on laskuttamattomia tilauksia. Ja lopulta c) lähetti asiakkaille laskun Owelan nimissä. Missään vaiheessa asiakastietoja ei siirtynyt asiakkaalta toisen tietokantoihin palvelimen sisällä. Laskutustiedot siirtyivät Ropo Capitalille, jossa niitä käytetään vain hyvityslaskuihin ja mahdollisesti muuhun kirjanpitoon liittyviin toimiin.

Koska käsittelijä suoritettiin viiden minuutin välein automaattisesti ja meillä kesti 10-15 minuuttia huomata virhe, kerkesi käsittelijä lähettämään kaikille palvelimen verkkokaupan asiakkaille laskun useamman kerran.

Virhe tapahtui 12.10.2021  n. klo 10:00 ja huomattiin n. klo 10:15. Keräsimme hetken ohjelmallisesti tietoja heistä, joita virhe kosketti ja lähetimme tekstiviestin virheellisestä laskusta kello n. klo 12:30. Sähköpostit lähtivät noin tunnin päästä tekstiviestien jälkeen.

Virhe oli valitettava ja inhimillinen. Toimimme kuitenkin virheen korjauksessa niin nopeasti kuin vain oli mahdollista ja viestimme asiakkaille kaikin käytössä olevin keinoin nopealla aikataululla.

Jatkossa tämän tyyliset virheet on estetty lisäämällä useiden verkkokauppojen kesken jaetut jonokäsittelijät tuplavarmistuksella, jossa jokainen asiakastunnus varmistetaan ennen jonon käsittelyä oikeaksi.