PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
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 3 weeks ago DonationAbandoned.php 3 weeks ago DonationCancelled.php 3 weeks ago DonationCompleted.php 3 weeks ago DonationFailed.php 3 weeks ago DonationPending.php 3 weeks ago DonationPreapproval.php 3 weeks ago DonationProcessing.php 3 weeks ago DonationRefunded.php 3 weeks ago DonationRevoked.php 3 weeks 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 3 weeks ago SubscriptionPaused.php 1 year ago SubscriptionPending.php 1 year ago SubscriptionRenewalDonationCreated.php 1 year ago SubscriptionSuspended.php 2 years ago
SubscriptionRenewalDonationCreated.php
111 lines
1 <?php
2
3 namespace Give\Framework\PaymentGateways\Webhooks\EventHandlers;
4
5 use Exception;
6 use Give\Donations\Models\DonationNote;
7 use Give\Framework\PaymentGateways\Log\PaymentGatewayLog;
8
9 /**
10 * @since 3.6.0
11 */
12 class SubscriptionRenewalDonationCreated
13 {
14 /**
15 * @since 4.0.0 updated to create the renewal from subscription model
16 * @since 3.16.0 Add log messages and a defensive approach to prevent duplicated renewals
17 * @since 3.6.0
18 */
19 public function __invoke(
20 string $gatewaySubscriptionId,
21 string $gatewayTransactionId,
22 string $message = ''
23 ) {
24 $subscription = give()->subscriptions->getByGatewaySubscriptionId($gatewaySubscriptionId);
25
26 if ( ! $subscription) {
27 PaymentGatewayLog::error(
28 sprintf('The renewal was not created for the gateway transaction ID %s because no subscription with the gateway subscription %s was found.',
29 $gatewayTransactionId, $gatewaySubscriptionId),
30 [
31 'Gateway Subscription ID' => $gatewaySubscriptionId,
32 'Gateway Transaction ID' => $gatewayTransactionId,
33 'Message' => $message,
34 ]
35 );
36
37 return;
38 }
39
40 if ($subscription->initialDonation()->gatewayTransactionId === $gatewayTransactionId) {
41 PaymentGatewayLog::error(
42 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.',
43 $gatewayTransactionId, $subscription->id, $gatewaySubscriptionId),
44 [
45 'Gateway Subscription ID' => $gatewaySubscriptionId,
46 'Gateway Transaction ID' => $gatewayTransactionId,
47 'Message' => $message,
48 'Subscription' => $subscription->toArray(),
49 ]
50 );
51
52 return;
53 }
54
55 $donation = give()->donations->getByGatewayTransactionId($gatewayTransactionId);
56
57 if ($donation) {
58 PaymentGatewayLog::error(
59 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.',
60 $gatewayTransactionId, $donation->id, $gatewaySubscriptionId),
61 [
62 'Gateway Subscription ID' => $gatewaySubscriptionId,
63 'Gateway Transaction ID' => $gatewayTransactionId,
64 'Message' => $message,
65 'Donation' => $donation->toArray(),
66 ]
67 );
68
69 return;
70 }
71
72 try {
73 $donation = $subscription->createRenewal(['gatewayTransactionId' => $gatewayTransactionId]);
74
75 if (empty($message)) {
76 $message = __('Subscription Renewal Donation Created.', 'give');
77 }
78
79 DonationNote::create([
80 'donationId' => $donation->id,
81 'content' => $message . ' ' . sprintf(__('%s transaction ID: %s', 'give'),
82 $donation->gateway()->getName(),
83 $donation->gatewayTransactionId
84 ),
85 ]);
86
87 PaymentGatewayLog::info(
88 $message . ' ' . sprintf('Donation ID: %s', $donation->id),
89 [
90 'Payment Gateway' => $donation->gateway()->getId(),
91 'Gateway Transaction Id' => $donation->gatewayTransactionId,
92 'Gateway Subscription Id' => $donation->subscription->gatewaySubscriptionId,
93 'Donation' => $donation->id,
94 'Subscription' => $donation->subscriptionId,
95 ]
96 );
97 } catch (Exception $e) {
98 PaymentGatewayLog::error(
99 sprintf('Subscription Renewal Donation Failed! Error: %s',
100 $e->getCode() . ' - ' . $e->getMessage()),
101 [
102 'Subscription Id' => $subscription->id,
103 'Gateway Subscription Id' => $gatewaySubscriptionId,
104 'Gateway Transaction Id' => $gatewayTransactionId,
105 'message' => $message,
106 ]
107 );
108 }
109 }
110 }
111