Enumy a výnimky
Status je normalizovaný stav ukladaný na nákupoch a predplatnom:
| Prípad | Hodnota | Zachová prístup |
|---|---|---|
New | new | Nie |
Pending | pending | Nie |
Processing | processing | Nie |
Completed | completed | Áno |
Failed | failed | Nie |
Canceled | canceled | Nie |
InGracePeriod | in_grace | Áno |
OnHold | on_hold | Nie |
Refunded | refunded | Nie |
Status::isActive() vracia true len pre Completed a InGracePeriod — stavy, ktoré zachovávajú nárok na prístup. Riadi sa ním Subscription::isActive() aj scope active().
ResultType
| Prípad | Hodnota | Význam |
|---|---|---|
Purchase | purchase | Jednorazový nákup — uloží sa ako Purchase. |
Subscription | subscription | Predplatné — uloží sa ako Subscription. |
Refund | refund | Refundácia alebo chargeback — uloží sa ako PurchaseRefund. |
Notification | notification | Notifikácia obchodu bez transakcie. |
Unknown | unknown | Nerozpoznaný payload. |
Výberové zoznamy a validácia
Oba enumy používajú trait Helpers z enums-for-laravel, takže filtre a formuláre v administrácii nepotrebujú vlastné polia ani jazykové súbory:
use RoundlyConsulting\Purchases\Enum\Status;
Status::options(); // list of {value, label, name} option DTOs for select inputs
Status::toOptions(); // ['completed' => 'Completed', 'in_grace' => 'In Grace', …]
Status::labels(); // human strings incl. "In Grace" / "On Hold" (no lang files)
Status::validationRule(); // "in:new,pending,processing,completed,failed,canceled,in_grace,on_hold,refunded"
$status = Status::tryFromLabel('On Hold'); // Status::OnHold
$status?->isActive(); // false — an account hold keeps no accessVýnimky
| Výnimka | Kedy nastane |
|---|---|
VerificationException | Zlyhá overenie podpisu alebo prístupových údajov — aj pri certifikáte Apple mimo obdobia platnosti — alebo klient pošle do callback() poskytovateľa chybný vstup: chybný identifikátor alebo taký, ktorý obchod odmietne s 4xx (getPrevious() uchová RequestException obchodu). Webhook routa vráti 400. |
InvalidConfigurationException | Hodnota v konfigurácii je nepoužiteľná — certificate_clock_skew mimo 0–3600, trvanie, ktoré nie je celé číslo, URL či názov fronty, ktoré nie sú reťazcom, poskytovateľ, ktorý neimplementuje Provider. Zámerne nie VerificationException — chybná konfigurácia nie je podvrhnutá notifikácia. |
UnknownProviderException | Vyhľadáva sa poskytovateľ, ktorý nie je zaregistrovaný. |
EventInProgressException | Pri audit.deduplicate opätovné doručenie udalosti, ktorú ešte spracúva iné doručenie. Nič sa neuložilo; webhook routa odpovie 409, aby obchod doručenie zopakoval. |
BillingException | Volanie Purchases::stripe() odmietnuté skôr, než sa opýta Stripe — chýbajúci zákazník, neuložený vlastník, predplatné iného poskytovateľa, chybné id či kľúč, správanie po skúšobnom období bez skúšobného obdobia, billing mode alebo start() na staršej pripnutej verzii API, setup Checkout bez meny, dátum cancelAt() v minulosti, limit stránky faktúr mimo 1–100 alebo druhé predplatné pri subscriptions.one_per_owner. |
StripeException | Akékoľvek zlyhanie Stripe, typované: StripeCardException, StripeInvalidRequestException, StripeAuthenticationException, StripeRateLimitException, StripeIdempotencyException, StripeApiException, StripeConnectionException. Každá nesie httpStatus, stripeCode, requestId a idempotencyKey; tajné kľúče v správe sú skryté. |
UnsupportedCapabilityException | Purchases::stripe() bez zaregistrovaného poskytovateľa Stripe — fakturovať vie len Stripe. |
InvalidProviderNotificationException | Payload notifikácie sa nedá dekódovať — alebo replay() notifikáciu odmietne (neuložená alebo soft-delete zmazaná, notifikácia poskytovateľa s neovereným podpisom alebo taká, ktorú už nemožno obnoviť). |
Všetky dedia z RoundlyConsulting\Purchases\Exceptions\Exception, ktorá pridáva pomenovaný konštruktor because(string $message, int $code = 0):
use RoundlyConsulting\Purchases\Exceptions\UnknownProviderException;
use RoundlyConsulting\Purchases\Exceptions\VerificationException;
use RoundlyConsulting\Purchases\Facades\Purchases;
try {
$result = Purchases::result('stripe', $request);
} catch (VerificationException $e) {
abort(400, $e->getMessage());
} catch (UnknownProviderException) {
abort(404);
}Výnimkou sú preklepy v konfigurácii, ktoré zachytí package toolkit: nečitateľný prepínač zapnuté/vypnuté (okrem autentifikácie pushov), key_type mimo bigint, uuid a ulid a trieda v models.*, ktorá nie je modelom balíka ani jeho podtriedou, vyhodia RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException, ktorá nededí zo základnej výnimky balíka. Rovnako ako vlastná InvalidConfigurationException balíka uvádza názov kľúča.
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 kryptomienOdoslaní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.