// Create a customer for the billable model
$customer = $user->createAsRevenueCatCustomer();
// Get the RevenueCat ID
$revenueCatId = $user->getRevenueCatId();
// or
$revenueCatId = $user->getRevenueCatCustomerId();
// Check if user has a RevenueCat ID
if ($user->hasRevenueCatId()) {
// User has a RevenueCat ID
}
// Get subscriber's entitlements
$entitlements = $user->getEntitlements();
// Get a specific entitlement
$entitlement = $user->getEntitlement('premium');
// 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();
// Get available offerings
$offerings = $user->getOfferings();
// Get available products
$products = $user->getProducts();
// Get active subscription
$activeSubscription = $user->getActiveSubscription();
// Check if user has active subscription
if ($user->hasActiveSubscription()) {
// User has an active subscription
}
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\Concerns\Billable;
class User extends Authenticatable
{
use Billable;
// ...
}
use PeterSowah\LaravelCashierRevenueCat\Tests\TestCase;
class YourTest extends TestCase
{
// Your test methods
}