Stop met het refunden van betalingen die je nooit had mogen afschrijven
Veel ontwikkelaars implementeren een checkout-flow waarbij de kaart direct wordt afgeschreven. Daarna voeren ze ordervalidatie uit, zoals voorraadcontroles of fraudedetectie.
Als de validatie mislukt, voert de code een refund uit.
Dit zorgt voor problemen bij je klanten. Ze zien een afschrijving en vervolgens dagen later een refund. Ze denken dat je bedrijf onbetrouwbaar is. Ze denken dat hun geld vaststaat.
Refunds brengen echte kosten met zich mee:
- Klanten verliezen het vertrouwen wanneer ze twee afzonderlijke transacties zien.
- Het duurt 5 tot 10 dagen voordat een refund op een bankafschrift verschijnt.
- Je kunt geld verliezen aan transactiekosten of wisselkoersen.
- Card networks markeren frequente patronen van afschrijven en refunden als een hoog risico.
De oplossing is om het authorize-en-capture-model te gebruiken.
De meeste tutorials leren je om geld direct te 'capturen'. In plaats daarvan moet je eerst een 'hold' op de fondsen plaatsen. Een hold staat op de kaart zonder dat het geld daadwerkelijk wordt verplaatst. Als je validatie mislukt, annuleer je simpelweg de hold. Er vindt dan nooit een afschrijving plaats op het afschrift van de klant.
In Stripe doe je dit door de capture_method op manual te zetten.
De nieuwe flow werkt als volgt:
- Maak een
PaymentIntentaan metmanualcapture. - De fondsen worden geautoriseerd, maar niet verplaatst.
- Voer je ordervalidatie uit.
- Als de order geldig is, capture je de betaling.
- Als de order mislukt, annuleer je de intent.
Deze aanpak biedt verschillende voordelen:
- Je voorkomt de noodzaak voor refunds.
- Een geannuleerde autorisatie verdwijnt simpelweg van het afschrift van de klant.
- Je kunt partial captures uitvoeren. Als een klant drie artikelen koopt maar er is één niet op voorraad, capture je alleen het bedrag voor de twee artikelen.
- Je creëert een helder audit trail in je logs.
De meeste grote betalingsproviders gebruiken dezelfde logica.
- Stripe gebruikt
capture_method: manual. - Adyen gebruikt manual capture delays.
- Braintree gebruikt
submitForSettlement: false. - PayPal gebruikt
intent: AUTHORIZE.
Gebruik deze methode als een deel van je bedrijfslogica kan mislukken nadat een klant op 'betalen' heeft geklikt. Verplaats je risicovolle controles naar de periode tussen de autorisatie en de capture. Dit houdt je geldstromen overzichtelijk en je klanten tevreden.
Bron: https://dev.to/jguillaumesio/stop-refunding-payments-you-should-never-have-charged-4d7m