Refunds & Notifications ยท Article 6.8
Stripe-terugbetaling opnieuw proberen โ bij tijdelijke fouten
Een mislukte Stripe-terugbetaling kan doorgaans opnieuw worden geprobeerd โ de meeste fouten zijn tijdelijk (ratelimieten, korte Stripe-storingen, of de deposit-betaald-webhook die na de post-ondertekeningspipeline arriveerde). De knop Opnieuw proberen roept `_trigger_stripe_refund` opnieuw aan op de creditnota.
De terugbetalings-API van Stripe is betrouwbaar, maar het pad van "addendum ondertekend" naar "Stripe accepteert het terugbetalingsverzoek" heeft meerdere onderdelen. Drie veelvoorkomende oorzaken waardoor de oorspronkelijke _trigger_stripe_refund kan mislukken:
1. Webhook-race โ de webhook payment_intent.succeeded van de oorspronkelijke aanbetaling was nog niet aangekomen op het moment dat het addendum werd ondertekend; per [D-113] weigert de trigger te terugbetalen totdat de webhook de afschrijving bevestigt. Tegen de tijd dat de freelancer het opmerkt, is de webhook aangekomen; een nieuwe poging doorstaat de afschrijvingsbevestigingscontrole en gaat verder.
2. Tijdelijke Stripe-fout โ ratelimiet bereikt, korte storing, netwerkstoring. Opnieuw proberen lost dit gewoonlijk op.
3. Vรณรณr D-113 implementaties โ een ouder codepad dat bepaalde Stripe-afschrijvingsconfiguraties niet herkende. Opnieuw proberen op de nieuwe code vindt de PaymentIntent correct.
Step by step
Merk een
misluktecreditnota op.Terugbetalingsbanner toont "Terugbetaling mislukt: [reden]." met opties Opnieuw proberen en Als terugbetaald markeren.
Lees eerst de faalreden.
Sommige redenen zijn niet herstelbaar via opnieuw proberen: "charge_disputed" (de oorspronkelijke afschrijving heeft een openstaande betwisting โ terugbetalingen zijn geblokkeerd), "balance_insufficient" (uw Stripe-saldo is te laag), "card_account_closed" (de rekening van de kaarthouder is afgesloten). Opnieuw proberen helpt hier niet; zie artikel 8.10 voor de herstelpaden per faaltype.
Klik op
Stripe-terugbetaling opnieuw proberen.De server voert
_trigger_stripe_refundopnieuw uit.Wacht ~2 seconden.
Banner wordt bijgewerkt: geslaagd โ "Terugbetaling in behandeling, verwacht binnen 3โ5 werkdagen"; mislukt โ bijgewerkte faalreden (vaak een nieuwe foutcode als het onderliggende probleem anders is).
Als het nog steeds mislukt, schakel over op handmatig.
Klik op
Als terugbetaald markeren(artikel 8.9) nadat u de terugbetaling buiten het systeem heeft uitgevoerd.
Why this works this way
Implementatie (CreditNoteRetryStripeRefundView in amendment_views.py:775):
1. Weiger opnieuw proberen als de staat geslaagd / handmatig / aangevraagd is. Retourneert 409 met details.status zodat de frontend de juiste fout kan tonen. Opnieuw proberen is alleen zinvol bij in behandeling of mislukt.
2. Wis verouderde foutmetadata. refund_failure_reason = "", opslaan. De nieuwe poging start schoon.
3. Roep `_trigger_stripe_refund(cn, cn.amount_gross)` opnieuw aan. De functie geeft nooit een uitzondering (ze vangt alle uitzonderingen op en registreert ze op de creditnotarij), dus het eindpunt voor opnieuw proberen retourneert altijd 200 met de resulterende staat.
4. Retourneer de opgeloste staat van de creditnota. De frontend werkt de banner / rij ter plaatse bij.
Wat de nieuwe poging niet doet: wijzigen welk Stripe-account, rekeninghouder of bedrag. Die zijn afgeleid van de creditnota + offerte + addendum + Connect-instellingen โ de nieuwe poging probeert alleen dezelfde actie opnieuw met gewiste foutstatus.
Troubleshooting
Keep reading
Refunds & Notifications
Stripe automatic refund (Direct Charges via Connect)
When the original deposit was paid via Stripe, the refund is automatic. Clozo issues a Refund on the freelancer's connected account, watches for the `refund.updated` webhook, and flips the credit note to `succeeded` once Stripe confirms โ typically within 3โ5 business days for the cash to reach the client.
Refunds & Notifications
Refund stages: issued โ requested โ succeeded (or manual)
The credit note moves through up to four states from creation to settled. Each state corresponds to a specific point in the refund lifecycle, with predictable UI badges and email triggers.
Refunds & Notifications
Failed refunds & recovery โ common Stripe failure reasons
A `failed` credit note has a `refund_failure_reason` string from Stripe. Most reasons fall into a small set; here's what each means and the recommended recovery.
Refunds & Notifications
Mark refunded manually โ for SEPA and out-of-band proof
When a refund is issued outside Stripe โ SEPA bank transfer, cash, PayPal, mailed cheque โ `Mark refunded` is how you record it in Clozo. Reason field is mandatory (typically a bank reference). The credit note moves to `manual` status and the client receives a confirmation email.