Kaikki artikkelit

Shopify ja Winpos samaan tahtiin: integraatio Google Cloudin Python-funktioilla

Shopify-verkkokaupan ja Winpos-kassan integraatio Google Cloudin Python-funktioilla: varastosaldot, maksetut tilaukset, jono ja virheiden käsittely.

  • Integraatiot
  • Shopify
  • Winpos
  • Google Cloud

Rakensin integraation, joka yhdistää Shopify-verkkokaupan ja myymälän Winpos-kassajärjestelmän. Winposista siirtyvät varastosaldot verkkokauppaan ja verkkokaupan maksetut tilaukset Winposiin automaattisesti. Integraatio on kaksi pientä Python-funktiota Google Cloudissa ilman omaa palvelinta. Funktiot pyörivät Googlen konesalissa Haminassa.

Lähtötilanne

Myymälässä myynti, varasto ja kirjanpidon pohjatiedot ovat Winposissa. Verkkokauppa toimii Shopifyssa. Ilman integraatiota saldot pitäisi päivittää verkkokauppaan käsin ja jokainen verkkotilaus kirjata kassaan erikseen. Se vie aikaa ja virheen sattuessa verkkokauppa myy tuotetta, jota ei enää ole.

Miksi serverless-funktiot Google Cloudissa?

Integraatiossa on kaksi selkeästi rajattua tehtävää: saldojen haku ja tilausten vienti. Niihin ei tarvita omaa palvelinta eikä sovellusta, joten valitsin Google Cloud Functions -funktiot. Ne käynnistyvät tarvittaessa, laskutus perustuu käyttöön, eikä ylläpidettävää palvelinta ole. Vertailin integraatioiden ajoympäristöjä tarkemmin integraatiopalvelun sivulla.

Winposin kassa tarjoaa REST-rajapinnan, jonka kautta tuotteet luetaan ja tilaukset viedään. Shopifyn puolella käytetään Shopifyn webhookeja ja Admin API:a.

Osa 1: varastosaldot Winposista Shopifyyn

Ensimmäinen funktio hakee Winposista kaikki tuotteet saldoineen. Ajastus käynnistää haun kahdesti päivässä, kello 6 ja 18.

  • Sivutus. Tuotteita on paljon, joten ne haetaan rajapinnasta sata kerrallaan, kunnes kaikki on haettu.
  • Saldojen yhteenlasku. Tuotteella voi olla saldoa useammassa varastossa. Funktio laskee ne yhteen ja poimii vain tarvittavat tiedot: EAN-koodin, tuotekoodin ja kokonaissaldon.
  • Välimuisti. Koko tuotelistan haku Winposista kestää minuutteja. Siksi tulos tallennetaan Google Cloud Storageen ja Shopifyn puoli lukee saldot sieltä. Vastaus on nopea, eikä kassajärjestelmää kuormiteta joka kerta.

Osa 2: maksetut tilaukset Shopifysta Winposiin

Kun tilaus on maksettu, Shopify lähettää ilmoituksen toiselle funktiolle, joka vie tilauksen Winposiin. Siinä on enemmän tarkkuutta vaativia kohtia.

Ilmoituksen aitous

Funktion osoite on julkinen, joten jokaisen pyynnön aitous tarkistetaan. Shopify allekirjoittaa jokaisen webhookin ja funktio laskee allekirjoituksen itse ja vertaa sitä. Väärennetty pyyntö hylätään ennen kuin mitään tehdään.

Viiden sekunnin sääntö ja jono

Shopifyn ohjeiden mukaan webhookiin pitää vastata viidessä sekunnissa. Muuten Shopify tulkitsee toimituksen epäonnistuneeksi ja yrittää uudelleen. Winposin rajapinta voi vastata hitaammin, joten tilausta ei viedä heti. Se siirretään ensin Google Cloud Tasks -jonoon ja Shopify saa vastauksen saman tien.

Jonolla on kaksi muutakin etua:

  • Uudelleenyritykset. Jos Winpos ei vastaa tai hylkää tilauksen, jono yrittää uudelleen kasvavin välein useamman kerran.
  • Ei tuplatilauksia. Jonon tehtävä nimetään Shopifyn webhook-tunnisteen mukaan. Jos Shopify lähettää saman ilmoituksen uudelleen, sitä ei lisätä jonoon toista kertaa.

Tilauksen muuntaminen Winposin muotoon

Shopify ja Winpos kuvaavat tilauksen eri tavoin, joten suurin osa koodista on muunnosta:

  • Tuotteiden tunnistus viivakoodilla. Shopifyn tilausilmoituksessa ei ole tuotteen viivakoodia, joten funktio hakee sen Shopifyn rajapinnasta tuotteen versioiden tiedoista. Winposissa tuote tunnistetaan juuri viivakoodilla.
  • Alennukset. Winposin erillinen alennusrivi vaatisi kassan oman alennustaulukon tunnisteen, jota Shopifyssa ei ole. Siksi alennus netotetaan tuoterivin hintaan.
  • Toimituskulut. Winposissa toimituskulut ovat oma tuotteensa, joten ne viedään tuoterivinä.
  • Asiakas- ja maksutiedot. Asiakkaan nimi, osoite ja yhteystiedot siirtyvät tilauksen otsikkotietoihin ja maksurivi kirjataan sovitulle maksutavalle.

Kun jokin menee pieleen

Integraatio on rakennettu niin, ettei virhe jää huomaamatta:

  • Puuttuva viivakoodi. Jos tuotteelta puuttuu viivakoodi, riviä ei voi viedä Winposiin. Muut rivit viedään, tilaukseen lisätään huomautusrivi ja minulle lähtee sähköpostihälytys, jossa luetellaan puuttuvat tuotteet.
  • Winpos hylkää tilauksen. Funktio tarkistaa Winposin vastauksesta, hyväksyttiinkö tilaus. Jos ei hyväksytty, tehtävä palautuu jonoon ja sitä yritetään uudelleen.
  • Lokit. Jokaisen tilauksen Shopify-tiedot, Winposiin lähetetty tilaus ja Winposin vastaus kirjataan Google Cloudin lokiin, joten ongelmatilanteen voi selvittää jälkikäteen.

Mitä tästä kannattaa ottaa mukaan

  • Sovi kassan asetukset etukäteen. Kassanumero, varasto, kustannuspaikka ja maksutapa sovitaan Winpos-käyttäjän kanssa ennen kuin ensimmäinen tilaus viedään.
  • Tuotetiedot ratkaisevat. Integraatio on yhtä luotettava kuin viivakoodit. Kun ne ovat kunnossa molemmissa järjestelmissä, tilaukset kulkevat ilman käsityötä.
  • Pieni integraatio ei tarvitse palvelinta. Kaksi rajattua funktiota, ajastus ja jono riittävät. Jos järjestelmiä tulee lisää, sama logiikka siirtyy tarvittaessa omaksi sovelluksekseen.

Jos haluat verkkokaupan ja kassan tai toiminnanohjauksen keskustelemaan keskenään, lue lisää integraatioista.

Usein kysyttyä

Voiko Shopifyn yhdistää Winposiin?

Voi. Winposin REST-rajapinnan kautta saldot saa verkkokauppaan ja verkkotilaukset kassaan. Ennen toteutusta kannattaa selvittää, mitkä rajapinnan ominaisuudet omassa Winpos-ympäristössä ovat käytössä.

Kuinka usein varastosaldot päivittyvät?

Tässä toteutuksessa kahdesti päivässä. Tiheys on asetus, jota voi muuttaa tarpeen mukaan. Tihein mahdollinen päivitysväli riippuu siitä, kuinka paljon kuormaa kassajärjestelmän rajapinta kestää.

Mitä tapahtuu, jos Winpos ei ole tavoitettavissa?

Tilaus jää jonoon ja sitä yritetään uudelleen automaattisesti. Shopifyn puolella tilaus on jo vastaanotettu, joten asiakkaan ostokseen katkos ei vaikuta.

Tarvitsetko apua?

Kerro, mitä tarvitset, niin mietitään yhdessä, miten asia kannattaa hoitaa.

Kerro projektistasi