Koje kartične gatewaye mogu koristiti i kako su zaštićeni?
Kartična plaćanja su često prvo pitanje koje trgovac postavi prije lansiranja webshopa. WebShopHR ne zahtijeva poseban ugovor s platformom niti sakuplja novac kupaca na svoj račun. Trgovac koristi vlastiti ugovor i vlastite ključeve kod jednog od tri podržana gatewaya. Kupac na blagajni vidi jednu oznaku, „Kartično plaćanje“, bez obzira na to koji se gateway koristi u pozadini.

Tri gatewaya, jedno kupčevo iskustvo
Trgovac u postavkama trgovine bira jednog od tri providera: Stripe, CorvusPay ili WSPay. Ako odabere Stripe, kupac odlazi na Stripeovu hosted Checkout stranicu, gdje unosi podatke kartice. Ako odabere CorvusPay ili WSPay, kupčev preglednik automatski šalje skrivenu formu izravno na gateway. U svim slučajevima tvoja trgovina ne obrađuje podatke kartice, što znatno smanjuje PCI opseg i regulatornu potražnju.
Razlika je u tome što Stripe koristi 303 preusmjeravanje na hosted stranicu, dok CorvusPay i WSPay rade kroz auto-submit formu izravno s kupčeva preglednika.
Ključevi su isključivo trgovčevi
Za svaki se gateway koriste ključevi koje trgovac sam unosi u postavkama trgovine. Sustav ih koristi samo za pokretanje plaćanja i provjeru povratnih poziva. Ne drži ih u zajedničkom poolu niti preuzima novac kupaca na svoj račun. Prije nego što se kupcu uopće ponudi kartična opcija, provjerava se je li trgovac unio odgovarajuće ključeve za odabranog providera. Bez toga se radio gumb za karticu ne prikazuje.
Isto se provjerava i na strani poslužitelja, tako da ručno sastavljeni zahtjevi ne mogu zaobići nedostatak ključeva. Ako se konfiguracija promijeni između crtanja blagajne i slanja obrasca, plaćanje se i dalje zaustavlja prije bilo kakvog slanja osjetljivih podataka.
Za Stripe su to dva odvojena koraka: API ključ pokreće plaćanje, a webhook secret javlja WebShopHR-u da je ono uspjelo. Provjerava se samo prvi, pa gumb za karticu radi i bez drugog. Bez webhook secreta WebShopHR ne prepoznaje uspješnu naplatu, narudžba ostaje u stanju „čeka uplatu" i nakon roka se otkaže kao neplaćena, iako je kartica stvarno terećena. Oba ključa treba postaviti prije lansiranja.
Kriptografska provjera svakog povratnog poziva
Kad gateway vrati kupca natrag, WebShopHR provjerava digitalni potpis prije nego što uopće razmotri promjenu statusa. Ako potpis nije valjan, narudžba ostaje neplaćena. Usporedba potpisa izvedena je konstantnim vremenom, otporno na vremenske napade, tako da napadač ne može zaključiti koliko je potpis blizu ispravnog proučavajući vrijeme odgovora. CorvusPay potpisuje HMAC-SHA256 algoritmom preko abecedno sortiranih parametara, a WSPay koristi SHA512 lanac prema vlastitoj dokumentaciji.
Fail-closed ponašanje u produkciji
Jedan od najozbiljnijih rizika kod kartičnih plaćanja je tiho slanje kupca na testni gateway u produkciji. WebShopHR ima zaštitu koja u produkciji odbije plaćanje ako efektivni endpoint sadrži riječ „test".
Umjesto da lažno prikaže uspješnu naplatu, kupac ostaje na blagajni s jasnom porukom da plaćanje nije dostupno. Time se izbjegava situacija u kojoj kupac misli da je platio, a trgovac vidi lažnu narudžbu. Ta zaštita vrijedi isključivo za CorvusPay i WSPay, jer Stripe ne koristi ovakav form-POST obrazac.
Iznosi se vode u centima
Svi novčani iznosi u toku plaćanja vode se u centima, kao cijeli brojevi. Tek pri komunikaciji s gatewayima se iznos privremeno pretvara u decimalni zapis s točno dvije decimale, ali svi međuizračuni i odluke odvijaju se bez pomičnog zareza. To uklanja greške zaokruživanja koje inače nastaju u novčanim tokovima.
Stanja kartične narudžbe i rok plaćanja
Kartična narudžba prolazi kroz tri jasna stanja. Kad kupac odabere karticu i sustav uspješno otvori gateway, narudžba je u stanju „čeka uplatu" i kupac vidi rok do kojeg mora platiti. Ako kupac plati, narudžba prelazi u „plaćena" i istim trenutkom se pokreću potvrdni mail, digitalni download tokeni, poklon bonovi i fiskalizacija. Ako rok istekne ili kupac otkaže plaćanje, stranica to jasno kaže i ne prikazuje lažnu poruku o pouzeću.
Rok za plaćanje kartične narudžbe koju kupac sam napravi u dućanu iznosi 24 sata. Narudžba koju kupac plaća karticom preko poveznice, na primjer ona koju je trgovac poslao ručno, ima dulji rok od 72 sata. Ako se gateway ne uspije otvoriti, cijela narudžba se poništi prije nego što se trajno skinu zalihe.
Testiranje bez pravih ključeva
Za razvoj i end-to-end testiranje postoji testni kartični poslužitelj koji simulira CorvusPay i WSPay, uključujući i odbijeno plaćanje, a potpisuje povratne pozive istim algoritmom kao pravi gateway. To omogućuje sigurno testiranje cijelog toka plaćanja bez živih kreditnih kartica i bez unosa pravih trgovčevih ključeva u razvojno okruženje. Stripe se može testirati pomoću Stripeovih vlastitih testnih ključeva i testnog API-ja.
Više o temi: Plaćanja u web shopu.
Česta pitanja.
Vidi li kupac koji gateway koristim u pozadini?
Ne. Bez obzira odabrali Stripe, CorvusPay ili WSPay, kupac na blagajni vidi samo jednu oznaku „Kartično plaćanje“.
Prolaze li podaci kartice kroz moju trgovinu?
Ne, ni kod jednog gatewaya. Stripe kupca preusmjerava na svoju hosted Checkout stranicu, a CorvusPay i WSPay rade preko forme koja se automatski šalje izravno s kupčeva preglednika na gateway.
Što ako netko pokuša krivotvoriti povratni poziv gatewaya?
Svaki povratni poziv provjerava se kriptografskim potpisom u konstantnom vremenu prije nego što se narudžba uopće razmotri kao plaćena. Ako potpis nije valjan, narudžba ostaje neplaćena.
Može li se dogoditi da kupac plati na testnom gatewayu u produkciji?
Ne. WebShopHR u produkciji odbija plaćanje ako efektivni endpoint sadrži riječ „test“, umjesto da tiho pošalje kupca na testni gateway i prikaže lažni uspjeh.
Mogu li testirati kompletnu naplatu bez pravih ključeva?
Da. Za CorvusPay i WSPay postoji testni kartični poslužitelj koji simulira i uspješno i odbijeno plaćanje s istim potpisivanjem kao pravi gateway. Stripe se testira Stripeovim vlastitim testnim ključevima.