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

Enumy a výnimky

Status je normalizovaný stav ukladaný na nákupoch a predplatnom:

PrípadHodnotaZachová prístup
NewnewNie
PendingpendingNie
ProcessingprocessingNie
CompletedcompletedÁno
FailedfailedNie
CanceledcanceledNie
InGracePeriodin_graceÁno
OnHoldon_holdNie
RefundedrefundedNie

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ípadHodnotaVýznam
PurchasepurchaseJednorazový nákup — uloží sa ako Purchase.
SubscriptionsubscriptionPredplatné — uloží sa ako Subscription.
RefundrefundRefundácia alebo chargeback — uloží sa ako PurchaseRefund.
NotificationnotificationNotifikácia obchodu bez transakcie.
UnknownunknownNerozpoznaný 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 access

Výnimky

VýnimkaKedy nastane
VerificationExceptionZlyhá 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.
InvalidConfigurationExceptionHodnota 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.
UnknownProviderExceptionVyhľadáva sa poskytovateľ, ktorý nie je zaregistrovaný.
EventInProgressExceptionPri 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.
BillingExceptionVolanie 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.
StripeExceptionAké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é.
UnsupportedCapabilityExceptionPurchases::stripe() bez zaregistrovaného poskytovateľa Stripe — fakturovať vie len Stripe.
InvalidProviderNotificationExceptionPayload 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 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.