Handle Paddle's marketing consent with Laravel

On Paddle, a buyer can opt-in to receive marketing emails and is stored as a new audience member.

But, by using an event listener, you can handle the Paddle's marketing consent on Laravel Cashier too.

The following example code uses a subscribed user attribute, but you can use an external service or tool like Spatie's Mailcoach and have it synced.

<?php

namespace App\Listeners;

use App\Models\User;
use Laravel\Paddle\Events\WebhookReceived;

class PaddleEventListener
{
    public function handle (WebhookReceived $event)
    {
        if ($event->payload['alert_name' ] === 'new_audience member') {
            if ($user = User::whereEmail($event->payload['email'])->first()) {
                $user->fill([
                    'subscribed' => $event->payload['marketing_consent'],
                ])->save();
            }
        }

        if ($event->payload['alert_name'] === 'update_audience_member') {
            if ($user = User::whereEmail($event->payload['new_customer_email'])->first()) {
                $user->fill([
                    'subscribed' => $event->payload['new_marketing_consent'],
                ])->save();
            }
        }
    }
}