// Get subscriber information
$subscriber = $user->subscription()->getSubscriber();
// Get subscriber's entitlements
$entitlements = $user->getEntitlements();
// Check if user has specific entitlement
if ($user->hasEntitlement('premium')) {
// User has premium access
}
// Get current offering
$offering = $user->getCurrentOffering();
// Get subscription history
$history = $user->getSubscriptionHistory();
// Get non-subscription purchases
$purchases = $user->getNonSubscriptions();
// Create a subscriber
$user->subscription()->createSubscriber([
'attributes' => [
'name' => 'John Doe',
'email' => '[email protected]'
]
]);
// Get available offerings
$offerings = $user->subscription()->getOfferings();
// Get available products
$products = $user->subscription()->getProducts();
namespace App\Listeners;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class HandleRevenueCatWebhook
{
public function handle(Request $request): Response
{
// Your custom webhook handling logic here
return response('', 200);
}
}
// In your EventServiceProvider (app/Providers/EventServiceProvider.php)
protected $listen = [
\PeterSowah\LaravelCashierRevenueCat\Events\WebhookReceived::class => [
\App\Listeners\HandleRevenueCatWebhook::class,
],
];
namespace App\Listeners;
use Illuminate\Support\Facades\Log;
use PeterSowah\LaravelCashierRevenueCat\Events\WebhookReceived;
class HandleRevenueCatWebhook
{
public function handle(WebhookReceived $event): void
{
$payload = $event->payload;
$type = $payload['event']['type'];
Log::info('RevenueCat webhook received', [
'type' => $type,
'payload' => $payload,
]);
switch ($type) {
case 'INITIAL_PURCHASE':
$this->handleInitialPurchase($payload);
break;
case 'RENEWAL':
$this->handleRenewal($payload);
break;
case 'CANCELLATION':
$this->handleCancellation($payload);
break;
case 'NON_RENEWING_PURCHASE':
$this->handleNonRenewingPurchase($payload);
break;
case 'SUBSCRIPTION_PAUSED':
$this->handleSubscriptionPaused($payload);
break;
case 'SUBSCRIPTION_RESUMED':
$this->handleSubscriptionResumed($payload);
break;
case 'PRODUCT_CHANGE':
$this->handleProductChange($payload);
break;
case 'BILLING_ISSUE':
$this->handleBillingIssue($payload);
break;
case 'REFUND':
$this->handleRefund($payload);
break;
case 'SUBSCRIPTION_PERIOD_CHANGED':
$this->handleSubscriptionPeriodChanged($payload);
break;
}
}
protected function handleInitialPurchase(array $payload): void
{
// Handle initial purchase
Log::info('Handling initial purchase', ['payload' => $payload]);
}
protected function handleRenewal(array $payload): void
{
// Handle renewal
Log::info('Handling renewal', ['payload' => $payload]);
}
protected function handleCancellation(array $payload): void
{
// Handle cancellation
Log::info('Handling cancellation', ['payload' => $payload]);
}
protected function handleNonRenewingPurchase(array $payload): void
{
// Handle non-renewing purchase
Log::info('Handling non-renewing purchase', ['payload' => $payload]);
}
protected function handleSubscriptionPaused(array $payload): void
{
// Handle subscription paused
Log::info('Handling subscription paused', ['payload' => $payload]);
}
protected function handleSubscriptionResumed(array $payload): void
{
// Handle subscription resumed
Log::info('Handling subscription resumed', ['payload' => $payload]);
}
protected function handleProductChange(array $payload): void
{
// Handle product change
Log::info('Handling product change', ['payload' => $payload]);
}
protected function handleBillingIssue(array $payload): void
{
// Handle billing issue
Log::info('Handling billing issue', ['payload' => $payload]);
}
protected function handleRefund(array $payload): void
{
// Handle refund
Log::info('Handling refund', ['payload' => $payload]);
}
protected function handleSubscriptionPeriodChanged(array $payload): void
{
// Handle subscription period changed
Log::info('Handling subscription period changed', ['payload' => $payload]);
}
}
// app/Providers/EventServiceProvider.php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use PeterSowah\LaravelCashierRevenueCat\Events\WebhookReceived;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
WebhookReceived::class => [
\App\Listeners\HandleRevenueCatWebhook::class,
],
];
public function boot(): void
{
parent::boot();
}
}
// app/Listeners/HandleRevenueCatWebhook.php
namespace App\Listeners;
use Illuminate\Support\Facades\Log;
use PeterSowah\LaravelCashierRevenueCat\Events\WebhookReceived;
class HandleRevenueCatWebhook
{
public function handle(WebhookReceived $event): void
{
$payload = $event->payload;
$type = $payload['event']['type'];
Log::info('RevenueCat webhook received', [
'type' => $type,
'payload' => $payload,
]);
switch ($type) {
case 'INITIAL_PURCHASE':
$this->handleInitialPurchase($payload);
break;
case 'RENEWAL':
$this->handleRenewal($payload);
break;
case 'CANCELLATION':
$this->handleCancellation($payload);
break;
case 'NON_RENEWING_PURCHASE':
$this->handleNonRenewingPurchase($payload);
break;
case 'SUBSCRIPTION_PAUSED':
$this->handleSubscriptionPaused($payload);
break;
case 'SUBSCRIPTION_RESUMED':
$this->handleSubscriptionResumed($payload);
break;
case 'PRODUCT_CHANGE':
$this->handleProductChange($payload);
break;
case 'BILLING_ISSUE':
$this->handleBillingIssue($payload);
break;
case 'REFUND':
$this->handleRefund($payload);
break;
case 'SUBSCRIPTION_PERIOD_CHANGED':
$this->handleSubscriptionPeriodChanged($payload);
break;
}
}
protected function handleInitialPurchase(array $payload): void
{
// Handle initial purchase
Log::info('Handling initial purchase', ['payload' => $payload]);
}
protected function handleRenewal(array $payload): void
{
// Handle renewal
Log::info('Handling renewal', ['payload' => $payload]);
}
protected function handleCancellation(array $payload): void
{
// Handle cancellation
Log::info('Handling cancellation', ['payload' => $payload]);
}
protected function handleNonRenewingPurchase(array $payload): void
{
// Handle non-renewing purchase
Log::info('Handling non-renewing purchase', ['payload' => $payload]);
}
protected function handleSubscriptionPaused(array $payload): void
{
// Handle subscription paused
Log::info('Handling subscription paused', ['payload' => $payload]);
}
protected function handleSubscriptionResumed(array $payload): void
{
// Handle subscription resumed
Log::info('Handling subscription resumed', ['payload' => $payload]);
}
protected function handleProductChange(array $payload): void
{
// Handle product change
Log::info('Handling product change', ['payload' => $payload]);
}
protected function handleBillingIssue(array $payload): void
{
// Handle billing issue
Log::info('Handling billing issue', ['payload' => $payload]);
}
protected function handleRefund(array $payload): void
{
// Handle refund
Log::info('Handling refund', ['payload' => $payload]);
}
protected function handleSubscriptionPeriodChanged(array $payload): void
{
// Handle subscription period changed
Log::info('Handling subscription period changed', ['payload' => $payload]);
}
}
use PeterSowah\LaravelCashierRevenueCat\Models\Customer;
use PeterSowah\LaravelCashierRevenueCat\Models\Subscription;
use PeterSowah\LaravelCashierRevenueCat\Models\Receipt;
use PeterSowah\LaravelCashierRevenueCat\Models\Customer as RevenueCatCustomer;
class Customer extends RevenueCatCustomer
{
// Your custom functionality
}