CASESTUDIE
Paywiser
WooCommerce kaartgateway met redirect- en hosted flows.
Overzicht
- Branche: Betalingen / merchant acquiring
- Opgeleverd: WordPress + WooCommerce payment-gatewayplugin
- Rol: Architectuur, implementatie, integratietesten
- Integratiepunten: WooCommerce legacy checkout + WooCommerce Blocks checkout, postback-endpoint, afhandeling van redirect returns
- Status: Integratie in productie
Context
Paywiser biedt merchant acquiring en payment gateway-infrastructuur voor kaartbetalingen. Voor WooCommerce-verkopers moet de integratie passen in de orderlifecycle van WooCommerce en asynchrone uitkomsten afhandelen (redirect flows en server-side postbacks) zonder orders in ambigue states achter te laten.
Probleem
Kaartbetalingsflows in WooCommerce hebben een paar non-negotiables:
- Checkout moet orders naar voorspelbare states brengen (pending → paid/failed).
- Redirect-based flows moeten “customer returned” correct afhandelen.
- Server-to-server notificaties moeten geverifieerd worden om tampering te voorkomen.
- Moderne checkout (WooCommerce Blocks) vereist een dedicated integratielaag.
Projectdoelen
- Paywiser aanbieden als volwaardige betaalmethode in WooCommerce-checkout.
- Paywiser’s Redirect- en Hosted-oplossingen ondersteunen vanuit één plugin.
- Postback payloads verifiëren en orderstate deterministisch bijwerken.
- Compatibiliteit behouden met zowel legacy checkout als Blocks checkout.
Beperkingen & Uitdagingen
- De `WC_Payment_Gateway`-lifecycle volgen om brittle checkout behavior te vermijden.
- Postback/return parameters behandelen als untrusted input en verifiëren.
- Afrondingsmismatches voorkomen door bedragen naar de gateway af te stemmen op WooCommerce totalen.
- Configuratie merchant-friendly houden onder `WooCommerce → Settings → Payments`.
Oplossingsoverzicht
We hebben een WooCommerce-gatewayplugin geïmplementeerd die:
- Een nieuwe betaalmethode registreert (`paywiser`) met configureerbare titel/omschrijving.
- Twee gateway-modes ondersteunt: Redirect (hosted pages) en Hosted (kaartgegevens ingevoerd in checkout).
- Transacties naar Paywiser TxHandler verstuurt via HTTP POST naar `https://office.paywiser.com/secure/txHandler.php`.
- Betaalresultaten ontvangt en verifieert via `/wc-api/pw-postback` en de `order-received` return flow.
Architectuur & Technische aanpak
Gatewayconfiguratie
- `sid` en `rcode`
- solution type: `redirect` of `hosted`
- transaction action: `PREAUTH` of `PAYMENT`
Start van checkout
- post een formulier naar TxHandler met totalen, klantvelden, postback URL en redirect URL
- bevat een MD5 request hash voor validatie
Postback-verificatie en orderfinalisatie
De postback handler verifieert de payload met de `vrfy` SHA-256 signature (`sid;rcode;txid;status;amount;currency;tx_action`).
- Succesvolle betalingen finaliseren via `payment_complete(txid)`.
- Mislukte betalingen zetten de order naar `failed` met een diagnostisch bericht.
WooCommerce Blocks-ondersteuning
Blocks-integratie (`checkout.js`) registreert Paywiser als Blocks-betaalmethode met invoerafhandeling en UI.
Technologiestack
- WordPress
- WooCommerce
- PHP (WooCommerce gateway-implementatie)
- JavaScript (Blocks checkout-integratie + invoermaskering voor hosted flow)
- Paywiser TxHandler + postback-verificatie (Acquiring API)
Implementatieproces
- Redirect vs hosted flows modelleren en mappen naar WooCommerce status-transities.
- Gateway-instellingen en validatie in wp-admin implementeren.
- TxHandler POST submission en request hashing implementeren.
- Geverifieerde postback-afhandeling (`/wc-api/pw-postback`) en return URL verificatie toevoegen.
- WooCommerce Blocks checkout integreren en end-to-end flows testen voor beide oplossingen.
Resultaten en impact
- WooCommerce-verkopers kunnen Paywiser-kaartbetalingen activeren met een voorspelbare operationele flow.
- Zowel redirect- als hosted oplossingen worden ondersteund vanuit één plugin.
- Server-side postbacks worden geverifieerd vóór de orderstate wordt aangepast.
- Checkout blijft compatibel over WooCommerce legacy en Blocks experiences.
Reflectie
Redirect-based betalingen blijven alleen werkbaar als de server-to-server postback wordt behandeld als bron van waarheid en wordt geverifieerd vóór de orderstate wordt aangepast. Dit vanaf het begin inbouwen voorkomt fraudegevoelig “status via URL parameter”-gedrag en vermindert support load door ambigue uitkomsten.
Samenvatting
Deze plugin integreert Paywiser in WooCommerce met twee ondersteunde betaalmodes, geverifieerde postback-afhandeling en compatibiliteit met zowel legacy- als Blocks checkout flows.