mirror of
https://github.com/anikeen-com/id.git
synced 2026-11-04 06:39:32 +00:00
Add checkout sessions and webhook event type constants
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a0470111fa
commit
3acd36ca29
12 files changed
+708
-7
No files matched your search
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Concerns;
|
||||
|
||||
/**
|
||||
* Reading a checkout session (see AppCheckoutSession and CheckoutSession).
|
||||
*/
|
||||
trait IsCheckoutSession
|
||||
{
|
||||
/**
|
||||
* Where the user confirms (or cancels) all of the session's subscriptions, or null once the
|
||||
* session is no longer open. The user then returns to the session's `return_url` with
|
||||
* `status` (completed, cancelled or expired) and `checkout_session` (the id). Check the status
|
||||
* through the API or the checkout.* webhooks; don't trust the query string.
|
||||
*/
|
||||
public function confirmationUrl(): ?string
|
||||
{
|
||||
return $this->confirmation_url ?: null;
|
||||
}
|
||||
|
||||
public function isOpen(): bool
|
||||
{
|
||||
return $this->status === self::STATUS_OPEN;
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirmed: all of its subscriptions are running.
|
||||
*/
|
||||
public function isCompleted(): bool
|
||||
{
|
||||
return $this->status === self::STATUS_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancelled or expired: all of its drafts were cancelled.
|
||||
*/
|
||||
public function isCancelled(): bool
|
||||
{
|
||||
return in_array($this->status, [self::STATUS_CANCELLED, self::STATUS_EXPIRED], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
public function subscriptionIds(): array
|
||||
{
|
||||
return array_values((array) ($this->subscription_ids ?? []));
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,10 @@
|
||||
|
||||
namespace Anikeen\Id\Concerns;
|
||||
|
||||
use Anikeen\Id\Resources\AppCheckoutSessions;
|
||||
use Anikeen\Id\Resources\AppOrders;
|
||||
use Anikeen\Id\Resources\AppSubscriptions;
|
||||
use Anikeen\Id\Resources\CheckoutSessions;
|
||||
use Anikeen\Id\Resources\Subscriptions;
|
||||
use Throwable;
|
||||
|
||||
@@ -37,6 +39,24 @@ trait ManagesSubscriptions
|
||||
return new AppSubscriptions($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checkout sessions for the user, created with the app's own token (trusted apps only, scope
|
||||
* subscriptions:client): the user confirms several subscriptions at once on Anikeen ID.
|
||||
*/
|
||||
public function appCheckoutSessions(): AppCheckoutSessions
|
||||
{
|
||||
return new AppCheckoutSessions($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checkout sessions with the user's own access token (any app): the user confirms several
|
||||
* subscriptions at once on Anikeen ID.
|
||||
*/
|
||||
public function checkoutSessions(): CheckoutSessions
|
||||
{
|
||||
return new CheckoutSessions($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* The user's orders that bill the app's subscriptions, read with the app's own token
|
||||
* (trusted apps only, scope orders:client), e.g. ->pending() for unpaid ones.
|
||||
@@ -45,4 +65,4 @@ trait ManagesSubscriptions
|
||||
{
|
||||
return new AppOrders($this);
|
||||
}
|
||||
}␍
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Anikeen\Id\Concerns;
|
||||
|
||||
use Anikeen\Id\Resources\AppCheckoutSessions;
|
||||
use Anikeen\Id\Resources\AppOrders;
|
||||
use Anikeen\Id\Result;
|
||||
use Throwable;
|
||||
@@ -19,6 +20,15 @@ trait ManagesUserBilling
|
||||
return new AppOrders();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checkout sessions of the app for any user, e.g. to look one up from a checkout.* webhook
|
||||
* (create() then needs a user_id).
|
||||
*/
|
||||
public function appCheckoutSessions(): AppCheckoutSessions
|
||||
{
|
||||
return new AppCheckoutSessions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an order for a user (VAT from the billing address). With `checkout`, it is paid right
|
||||
* away: with the given `transaction` (a payment captured elsewhere) or by charging the user's
|
||||
|
||||
Reference in new issue
Block a user