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

Jednotný výsledok

Každý poskytovateľ mapuje svoj natívny payload na RoundlyConsulting\Purchases\Contracts\ProviderResult, takže kód aplikácie napíšete raz a funguje pre Apple, Google aj Stripe:

MetódaVraciaPopis
provider()stringPôvodný poskytovateľ: apple, google alebo stripe.
type()ResultTypePurchase, Subscription, Refund, Notification alebo Unknown.
providerId()stringIdentifikátor, podľa ktorého sa záznam uloží.
transactionId()?stringIdentifikátor transakcie.
status()StatusNormalizovaný stav naprieč poskytovateľmi.
name()?stringNázov produktu alebo predplatného.
productId()?stringIdentifikátor produktu / SKU.
price()?MoneyZaplatená suma, ak ju obchod poskytuje.
activeFrom()?CarbonInterfaceZačiatok predplatného.
trialEndsAt()?CarbonInterfaceKoniec skúšobného obdobia.
endsAt()?CarbonInterfaceKoniec alebo expirácia predplatného.
items()list<ResultItem>Položky.
refundReason()?stringDôvod refundácie pri výsledku typu Refund.
isChargeback()boolSpor (chargeback), nie dobrovoľná refundácia.
occurredAt()?CarbonInterfaceKedy sa to podľa poskytovateľa stalo — created udalosti Stripe, signedDate notifikácie Apple, eventTimeMillis notifikácie Google alebo okamih, keď stav nahlásilo API obchodu; null, ak nie je známy.
raw()arrayPôvodný dekódovaný payload obchodu.

Čítanie výsledku

use RoundlyConsulting\Purchases\Enum\ResultType;
use RoundlyConsulting\Purchases\Facades\Purchases;

$result = Purchases::result('apple', $request);

$result->provider();            // 'apple'
$result->type();                // ResultType::Subscription
$result->status();              // Status::Completed
$result->status()->isActive();  // true for Completed and InGracePeriod
$result->providerId();          // the id the record is keyed on
$result->price();               // RoundlyConsulting\Money\Money|null
$result->endsAt();              // ?CarbonInterface
$result->raw();                 // array — the decoded store payload

if ($result->type() === ResultType::Refund && $result->isChargeback()) {
    // a dispute, not a voluntary refund
}

GenericResult

GenericResult je konkrétna readonly implementácia, ktorú vracia každý vstavaný poskytovateľ — a ktorú má vracať aj váš vlastný. Povinné sú len provider, type, providerId a status; ostatné má predvolene null, prázdne pole alebo false:

use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Purchases\DataTransferObjects\ResultItem;
use RoundlyConsulting\Purchases\Enum\ResultType;
use RoundlyConsulting\Purchases\Enum\Status;
use RoundlyConsulting\Purchases\Results\GenericResult;

$result = new GenericResult(
    provider: 'stripe',
    type: ResultType::Subscription,
    providerId: 'sub_123',
    status: Status::Completed,
    transactionId: 'sub_123',
    name: 'pro',
    productId: 'price_pro',
    price: Money::ofMinor(1999, 'USD'),
    activeFrom: now(),
    trialEndsAt: null,
    endsAt: now()->addMonth(),
    items: [new ResultItem('Pro plan', 'price_pro', Money::ofMinor(1999, 'USD'))],
    raw: $payload,
    refundReason: null,
    chargeback: false,
);

Položky sú DTO ResultItem: ResultItem(string $name, ?string $providerId = null, ?Money $price = null, int $quantity = 1). Hodnoty Status a ResultType opisuje sekcia Enumy a výnimky.

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.