PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / 4.16.19
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress v4.16.19
4.16.19 4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / Membership / PaymentMethods / Stripe / WebhookHandlers / CustomerSubscriptionUpdated.php
wp-user-avatar / src / Membership / PaymentMethods / Stripe / WebhookHandlers Last commit date
ChargeRefunded.php 11 months ago CheckoutSessionAsyncPaymentFailed.php 4 months ago CheckoutSessionAsyncPaymentSucceeded.php 4 months ago CheckoutSessionCompleted.php 4 months ago CustomerSubscriptionCreated.php 2 years ago CustomerSubscriptionDeleted.php 3 years ago CustomerSubscriptionUpdated.php 11 months ago InvoicePaymentSucceeded.php 2 years ago PaymentIntentSucceeded.php 3 years ago index.php 3 years ago
CustomerSubscriptionUpdated.php
100 lines
1 <?php
2
3 namespace ProfilePress\Core\Membership\PaymentMethods\Stripe\WebhookHandlers;
4
5 use ProfilePress\Core\Membership\Models\Subscription\SubscriptionStatus;
6 use ProfilePress\Core\Membership\PaymentMethods\Stripe\PaymentHelpers;
7 use ProfilePress\Core\Membership\PaymentMethods\WebhookHandlerInterface;
8 use ProfilePress\Core\Membership\Repositories\SubscriptionRepository;
9 use ProfilePress\Core\Membership\Services\Calculator;
10 use ProfilePressVendor\Carbon\CarbonImmutable;
11
12 class CustomerSubscriptionUpdated implements WebhookHandlerInterface
13 {
14 public function handle($event_data)
15 {
16 $subscription_profile_id = $event_data['id'];
17
18 $subscription = SubscriptionRepository::init()->retrieveBy([
19 'profile_id' => $subscription_profile_id
20 ]);
21
22 if (empty($subscription)) return;
23
24 $subscription = $subscription[0];
25
26 if ($event_data['cancel_at_period_end'] === true) {
27 // This is a subscription that has been cancelled but not deleted until period end
28 $subscription->add_note(
29 sprintf(
30 esc_html__('Subscription is scheduled for cancellation on %s', 'wp-user-avatar'),
31 ppress_format_date($event_data['cancel_at'])
32 )
33 );
34
35 // cancelling early so subscription can be set back to active down below if this isn't an immediate cancellation
36 $subscription->cancel();
37 }
38
39 switch ($event_data['status']) {
40 case 'active':
41 if ( ! $subscription->is_active()) {
42 $subscription->activate_subscription($subscription_profile_id);
43 } else {
44 $subscription->status = SubscriptionStatus::ACTIVE;
45 }
46 // ensures expiration date is in sync with Stripe
47 $subscription->expiration_date = CarbonImmutable::createFromTimestampUTC($event_data['current_period_end'])->toDateTimeString();
48 break;
49 case 'trialing':
50 if ( ! $subscription->is_active()) {
51 $subscription->enable_subscription_trial($subscription_profile_id);
52 } else {
53 $subscription->status = SubscriptionStatus::TRIALLING;
54 }
55 // ensures expiration date is in sync with Stripe
56 $subscription->expiration_date = CarbonImmutable::createFromTimestampUTC($event_data['trial_end'])->toDateTimeString();
57 break;
58 case 'unpaid':
59 $subscription->expire();
60 break;
61 case 'canceled':
62 if ($event_data['cancel_at_period_end'] !== true && apply_filters('ppress_stripe_subscription_set_cancelled_action_as_expired', false, $subscription)) {
63 $subscription->expire();
64 } else {
65 $subscription->cancel();
66 }
67 break;
68 case 'past_due':
69 $subscription->add_note(
70 sprintf(
71 esc_html__('Stripe payment failed (payment is past due)', 'wp-user-avatar'),
72 ppress_format_date($event_data['cancel_at'])
73 )
74 );
75 break;
76 }
77
78 do_action('ppress_stripe_subscription_status_change', $subscription->status, $event_data, $subscription);
79
80 $old_amount = $subscription->recurring_amount;
81 $new_amount = $event_data['plan']['amount'];
82
83 if ( ! PaymentHelpers::is_zero_decimal_currency($event_data['plan']['currency'])) {
84 $new_amount = Calculator::init($new_amount)->dividedBy('100')->val();
85 }
86
87 $old_amount = ppress_sanitize_amount($old_amount);
88 $new_amount = ppress_sanitize_amount($new_amount);
89
90 if ($new_amount !== $old_amount) {
91
92 $subscription->recurring_amount = $new_amount;
93
94 $subscription->add_note(sprintf(__('Recurring amount changed from %s to %s in Stripe.', 'wp-user-avatar'), $old_amount, $new_amount));
95 }
96
97 $subscription->save();
98 }
99 }
100