-
-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathHandleCustomerSubscriptionCreatedJob.php
More file actions
71 lines (55 loc) · 2.15 KB
/
HandleCustomerSubscriptionCreatedJob.php
File metadata and controls
71 lines (55 loc) · 2.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
namespace App\Jobs;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Laravel\Cashier\Cashier;
use Laravel\Cashier\Events\WebhookHandled;
use Laravel\Cashier\SubscriptionItem;
use Stripe\Subscription;
class HandleCustomerSubscriptionCreatedJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(public WebhookHandled $webhook) {}
public function handle(): void
{
$stripeSubscription = $this->constructStripeSubscription();
if (! $stripeSubscription) {
$this->fail('The Stripe webhook payload could not be constructed into a Stripe Subscription object.');
return;
}
if ($stripeSubscription->status !== 'active') {
Log::info("The subscription for customer [{$stripeSubscription->customer}] is not active. Not proceeding to license creation.");
return;
}
/** @var User $user */
$user = Cashier::findBillable($stripeSubscription->customer);
if (! $user || ! $user->email) {
$this->fail('Failed to find user from Stripe subscription customer.');
return;
}
$subscriptionPlan = \App\Enums\Subscription::fromStripeSubscription($stripeSubscription);
$cashierSubscriptionItemId = SubscriptionItem::query()
->where('stripe_id', $stripeSubscription->items->first()->id)
->first()
->id;
$nameParts = explode(' ', $user->name ?? '', 2);
$firstName = $nameParts[0] ?: null;
$lastName = $nameParts[1] ?? null;
dispatch(new CreateAnystackLicenseJob(
$user,
$subscriptionPlan,
$cashierSubscriptionItemId,
$firstName,
$lastName,
));
}
protected function constructStripeSubscription(): ?Subscription
{
return Subscription::constructFrom($this->webhook->payload['data']['object']);
}
}