PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.16.5
GiveWP – Donation Plugin and Fundraising Platform v3.16.5
4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / PaymentGateways / Webhooks / EventHandlers / SubscriptionRenewalDonationCreated.php
give / src / Framework / PaymentGateways / Webhooks / EventHandlers Last commit date
Actions 2 years ago DonationAbandoned.php 2 years ago DonationCancelled.php 2 years ago DonationCompleted.php 2 years ago DonationFailed.php 2 years ago DonationPending.php 2 years ago DonationPreapproval.php 2 years ago DonationProcessing.php 2 years ago DonationRefunded.php 2 years ago DonationRevoked.php 2 years ago SubscriptionActive.php 2 years ago SubscriptionCancelled.php 2 years ago SubscriptionCompleted.php 2 years ago SubscriptionExpired.php 2 years ago SubscriptionFailing.php 2 years ago SubscriptionFirstDonationCompleted.php 2 years ago SubscriptionRenewalDonationCreated.php 1 year ago SubscriptionSuspended.php 2 years ago
SubscriptionRenewalDonationCreated.php
128 lines
1 <?php
2
3 namespace Give\Framework\PaymentGateways\Webhooks\EventHandlers;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use Give\Donations\Models\DonationNote;
8 use Give\Donations\ValueObjects\DonationStatus;
9 use Give\Donations\ValueObjects\DonationType;
10 use Give\Framework\PaymentGateways\Log\PaymentGatewayLog;
11
12 /**
13 * @since 3.6.0
14 */
15 class SubscriptionRenewalDonationCreated
16 {
17 /**
18 * @since 3.16.0 Add log messages and a defensive approach to prevent duplicated renewals
19 * @since 3.6.0
20 */
21 public function __invoke(
22 string $gatewaySubscriptionId,
23 string $gatewayTransactionId,
24 string $message = ''
25 ) {
26 $subscription = give()->subscriptions->getByGatewaySubscriptionId($gatewaySubscriptionId);
27
28 if ( ! $subscription) {
29 PaymentGatewayLog::error(
30 sprintf('The renewal was not created for the gateway transaction ID %s because no subscription with the gateway subscription %s was found.',
31 $gatewayTransactionId, $gatewaySubscriptionId),
32 [
33 'Gateway Subscription ID' => $gatewaySubscriptionId,
34 'Gateway Transaction ID' => $gatewayTransactionId,
35 'Message' => $message,
36 ]
37 );
38
39 return;
40 }
41
42 if ($subscription->initialDonation()->gatewayTransactionId === $gatewayTransactionId) {
43 PaymentGatewayLog::error(
44 sprintf('The renewal was not created for the gateway transaction ID %s because the initial donation of the subscription %s is already using the informed gateway transaction ID %s.',
45 $gatewayTransactionId, $subscription->id, $gatewaySubscriptionId),
46 [
47 'Gateway Subscription ID' => $gatewaySubscriptionId,
48 'Gateway Transaction ID' => $gatewayTransactionId,
49 'Message' => $message,
50 'Subscription' => $subscription->toArray(),
51 ]
52 );
53
54 return;
55 }
56
57 $donation = give()->donations->getByGatewayTransactionId($gatewayTransactionId);
58
59 if ($donation) {
60 PaymentGatewayLog::error(
61 sprintf('The renewal was not created for the gateway transaction ID %s because the donation %s is already using the informed gateway transaction ID %s.',
62 $gatewayTransactionId, $donation->id, $gatewaySubscriptionId),
63 [
64 'Gateway Subscription ID' => $gatewaySubscriptionId,
65 'Gateway Transaction ID' => $gatewayTransactionId,
66 'Message' => $message,
67 'Donation' => $donation->toArray(),
68 ]
69 );
70
71 return;
72 }
73
74 try {
75 $donation = Donation::create([
76 'subscriptionId' => $subscription->id,
77 'amount' => $subscription->amount,
78 'status' => DonationStatus::COMPLETE(),
79 'type' => DonationType::RENEWAL(),
80 'donorId' => $subscription->donor->id,
81 'firstName' => $subscription->donor->firstName,
82 'lastName' => $subscription->donor->lastName,
83 'email' => $subscription->donor->email,
84 'gatewayId' => $subscription->gatewayId,
85 'formId' => $subscription->donationFormId,
86 'levelId' => $subscription->initialDonation()->levelId,
87 'anonymous' => $subscription->initialDonation()->anonymous,
88 'company' => $subscription->initialDonation()->company,
89 'gatewayTransactionId' => $gatewayTransactionId,
90 ]);
91
92 if (empty($message)) {
93 $message = __('Subscription Renewal Donation Created.', 'give');
94 }
95
96 DonationNote::create([
97 'donationId' => $donation->id,
98 'content' => $message . ' ' . sprintf(__('%s transaction ID: %s', 'give'),
99 $donation->gateway()->getName(),
100 $donation->gatewayTransactionId
101 ),
102 ]);
103
104 PaymentGatewayLog::info(
105 $message . ' ' . sprintf('Donation ID: %s', $donation->id),
106 [
107 'Payment Gateway' => $donation->gateway()->getId(),
108 'Gateway Transaction Id' => $donation->gatewayTransactionId,
109 'Gateway Subscription Id' => $donation->subscription->gatewaySubscriptionId,
110 'Donation' => $donation->id,
111 'Subscription' => $donation->subscriptionId,
112 ]
113 );
114 } catch (Exception $e) {
115 PaymentGatewayLog::error(
116 sprintf('Subscription Renewal Donation Failed! Error: %s',
117 $e->getCode() . ' - ' . $e->getMessage()),
118 [
119 'Subscription Id' => $subscription->id,
120 'Gateway Subscription Id' => $gatewaySubscriptionId,
121 'Gateway Transaction Id' => $gatewayTransactionId,
122 'message' => $message,
123 ]
124 );
125 }
126 }
127 }
128