𝗦𝘁𝗼𝗽 𝗥𝗲𝗳𝘂𝗻𝗱𝗶𝗻𝗴 𝗣𝗮𝘆𝗺𝗲𝗻𝘁𝘀 𝗬𝗼𝘂 𝗦𝗵𝗼𝘂𝗹𝗱 𝗡𝗲𝘃𝗲𝗿 𝗛𝗮𝘃𝗲 𝗖𝗵𝗮𝗿𝗴𝗲𝗱
Wielu programistów wdraża proces zakupowy, który natychmiast obciąża kartę. Następnie uruchamiają walidację zamówienia, taką jak sprawdzanie stanów magazynowych czy weryfikacja pod kątem oszustw.
Jeśli walidacja zakończy się niepowodzeniem, kod zleca zwrot środków.
Powoduje to problemy dla Twoich klientów. Widzą obciążenie, a kilka dni później zwrot. Myślą, że Twoja firma jest niewiarygodna. Myślą, że ich pieniądze zostały zablokowane.
Zwroty generują realne koszty:
- Klienci tracą zaufanie, widząc dwie oddzielne transakcje.
- Pojawienie się zwrotu na wyciągu bankowym zajmuje od 5 do 10 dni.
- Możesz tracić pieniądze na opłatach transakcyjnych lub kursach wymiany walut.
- Sieci kart płatniczych flagują częste wzorce typu „obciążenie i zwrot” jako działania wysokiego ryzyka.
Rozwiązaniem jest zastosowanie modelu authorize i capture.
Większość samouczków uczy natychmiastowego pobierania środków (capture). Zamiast tego powinieneś najpierw zablokować fundusze (hold). Blokada widnieje na karcie, ale pieniądze nie są przesyłane. Jeśli walidacja zakończy się niepowodzeniem, po prostu anulujesz blokadę. Żadne obciążenie nie pojawi się na wyciągu klienta.
W Stripe robisz to, ustawiając capture_method na manual.
Nowy przepływ wygląda następująco:
- Utwórz
PaymentIntentz opcjąmanual capture. - Środki są autoryzowane, ale nie są przesyłane.
- Uruchom walidację zamówienia.
- Jeśli zamówienie jest poprawne, pobierz płatność (capture).
- Jeśli zamówienie nie przejdzie walidacji, anuluj intent.
To podejście oferuje kilka korzyści:
- Unikasz konieczności dokonywania zwrotów.
- Anulowana autoryzacja po prostu znika z wyciągu klienta.
- Możesz dokonywać częściowych pobrań (partial captures). Jeśli klient kupuje trzy produkty, ale jeden jest niedostępny, pobierasz kwotę tylko za dwa produkty.
- Tworzysz przejrzystą ścieżkę audytową w swoich logach.
Większość głównych dostawców płatności stosuje tę samą logikę.
- Stripe używa
capture_method: manual. - Adyen używa opóźnień manual capture.
- Braintree używa
submitForSettlement: false. - PayPal używa
intent: AUTHORIZE.
Stosuj tę metodę, jeśli jakakolwiek część Twojej logiki biznesowej może zawieść po tym, jak klient kliknie „zapłać”. Przenieś ryzykowne sprawdzenia między etap autoryzacji a etap pobrania środków (capture). Dzięki temu przepływy pieniężne będą przejrzyste, a Twoi klienci zadowoleni.
Źródło: https://dev.to/jguillaumesio/stop-refunding-payments-you-should-never-have-charged-4d7m