NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Purchases for Laravel

Refundácie a chargebacky

Notifikácie o refundácii a spore z každého obchodu sa dekódujú do výsledku ResultType::Refund a ukladajú sa ako plnohodnotný PurchaseRefund:

ObchodNotifikáciaUloží sa ako
AppleREFUND, REVOKEJedna refundácia na každú refundovanú transakciu (kľúčovaná podľa jej transactionId) — refundácia aktuálneho obdobia predplatného prepne aj Subscription na Refunded
GoogleRTDN o zrušení predplatného, notifikácia o stornovanom nákupeRefundácia — zrušené predplatné alebo storno jeho poslednej objednávky ho prepne na Refunded; čiastočné storno podľa množstva ponechá nákup v stave Completed
Stripecharge.refundedJedna refundácia na platbu (kľúčovaná podľa PaymentIntent), ktorej cena je priebežne vrátený súčet — nie úplne refundovaná platba ponechá nákup v stave Completed
Stripecharge.dispute.createdChargeback kľúčovaný podľa id sporu
Stripecharge.dispute.closed s výsledkom wonTen istý záznam chargebacku sa zvráti a prepojený nákup sa obnoví (PurchaseCompleted) — len nákup, ktorý balík uložil; nový nikdy nevznikne
StripeOtázky (warning_*), charge.dispute.updatedLen audit — nič sa nezmení

handle() uloží refundáciu idempotentne, prepojí ju s pôvodným nákupom (párovaným podľa poskytovateľa a identifikátora transakcie alebo identifikátora u poskytovateľa), prepne tento nákup na Status::Refunded a spustí PurchaseRefunded, pri sporoch ChargebackReceived. Refundácia aktuálneho obdobia predplatného — transakcie Apple, v ktorej predplatné práve je, alebo jeho poslednej objednávky v Google — a zrušené predplatné Google prepnú na Refunded aj Subscription, takže prestane byť aktívne; refundácia staršieho obdobia ho nechá tak. Každá refundovaná transakcia Apple má vlastný PurchaseRefund, takže refundácie dvoch období sú dva záznamy a dve udalosti; refunded_at refundácie Apple je jej revocationDate. Čiastočná refundácia (platba v Stripe, ktorá nie je refundovaná celá, čiastočné storno podľa množstva v Google) sa uloží a spustí PurchaseRefunded, nákup však ponechá v stave Completed:

use RoundlyConsulting\Purchases\Models\PurchaseRefund;

$purchase->refunds;                    // HasMany<PurchaseRefund>
$purchase->status;                     // Status::Refunded once a refund is matched

PurchaseRefund::chargebacks()->get();  // disputes only

$refund->chargeback;                   // bool
$refund->reason;                       // ?string
$refund->price;                        // ?Money — the refunded amount
$refund->refunded_at;                  // ?Carbon
$refund->purchase;                     // the Purchase it reverses, when matched

reason obsahuje to, čo nahlási obchod — pole reason zo Stripe, typ notifikácie Apple, typ refundácie alebo názov notifikácie Google. Pomerná refundácia Apple zaznamená len vrátenú časť; odvolanie cez Family Sharing nezaznamená žiadnu sumu.

Refundácie Stripe sú priebežný súčet

Všetky refundácie jednej platby v Stripe zdieľajú jeden PurchaseRefund kľúčovaný podľa jej PaymentIntent a jeho cena je kumulatívna suma amount_refunded danej platby. Každá ďalšia čiastočná refundácia znova spustí PurchaseRefunded s novým súčtom, nie so sumou tejto refundácie — $event->refund->price preto naprieč udalosťami nikdy nesčítavajte; čítajte ho ako „doteraz vrátené“. Záznam refundácie Apple predstavuje jednu refundovanú transakciu, záznam Google jednu stornovanú objednávku.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.