-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsiteMethods.php
111 lines (80 loc) · 3.15 KB
/
siteMethods.php
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
/*
SITE-METHODS
----
https://getkirby.com/docs/reference/plugins/extensions/site-methods
*/
return [
// UPDATE STRIPE SUBSCRIPTION VIA WEBHOOK ------------------------------------------------------------------------------------------
'updateStripeSubscriptionWebhook' => function ($subscription) {
$stripe = new \Stripe\StripeClient(option('kreativ-anders.memberkit.secretKey'));
try {
// RETRIEVE STRIPE CUSTOMER
$customer = $stripe->customers->retrieve(
$subscription->customer,
[]
);
} catch (Exception $e) {
// LOG ERROR SOMEWHERE
throw new Exception('Could not retrieve stripe customer!');
}
// DETERMINE TIER NAME BY STRIPE PRICE ID
$price = $subscription->items['data'][0]->price->id;
$priceIndex = array_search($price, array_column(option('kreativ-anders.memberkit.tiers'), 'price'), false);
$tier = option('kreativ-anders.memberkit.tiers')[$priceIndex]['name'];
$kirby = kirby();
$kirby->impersonate('kirby');
try {
// UPDATE KIRBY USER SUBSCRIPTION INFORMATION
kirby()->user($customer->email)->update([
'stripe_subscription' => $subscription->id,
'stripe_status' => $subscription->status,
'tier' => $tier
]);
} catch (Exception $e) {
// LOG ERROR SOMEWHERE
throw new Exception('Could not update kirby user!');
}
$kirby->impersonate();
},
// CANCEL STRIPE SUBSCRIPTION VIA WEBHOOK -----------------------------------------------------------------------------------------
'cancelStripeSubscriptionWebhook' => function ($subscription) {
$stripe = new \Stripe\StripeClient(option('kreativ-anders.memberkit.secretKey'));
// GET STRIPE CUSTOMER
$customer = $stripe->customers->retrieve(
$subscription->customer,
[]
);
// DETERMINE TIER NAME BY STRIPE PRICE ID
$price = $subscription->items['data'][0]->price->id;
$priceIndex = array_search($price, array_column(option('kreativ-anders.memberkit.tiers'), 'price'), false);
$tier = option('kreativ-anders.memberkit.tiers')[$priceIndex]['name'];
$kirby = kirby();
$kirby->impersonate('kirby');
try {
// RESET KIRBY USER SUBSCRIPTION INFORMATION
kirby()->user($customer->email)->update([
'stripe_subscription' => null,
'stripe_status' => null,
'tier' => option('kreativ-anders.memberkit.tiers')[0]['name']
]);
} catch (Exception $e) {
// LOG ERROR SOMEWHERE
throw new Exception('Could not reset kirby user!');
}
$kirby->impersonate();
},
// UPDATE KIRBY USER EMAIL VIA STRIPE WEBHOOK --------------------------------------------------------------------------------------
'updateStripeEmailWebhook' => function ($customer) {
$kirby = kirby();
$kirby->impersonate('kirby');
try {
// UPDATE KIRBY USER EMAIL
$kirby->users()->findBy('stripe_customer', $customer->id)->changeEmail($customer->email);
} catch (Exception $e) {
// LOG ERROR SOMEWHERE
throw new Exception('Could not change kirby user email!');
}
$kirby->impersonate();
}
];