PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.31.1
GiveWP – Donation Plugin and Fundraising Platform v2.31.1
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 / PaymentGateways / Gateways / TestGateway / TestGatewayOffsite.php
give / src / PaymentGateways / Gateways / TestGateway Last commit date
Views 4 years ago TestGateway.php 2 years ago TestGatewayOffsite.php 2 years ago
TestGatewayOffsite.php
197 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\TestGateway;
4
5 use Give\Donations\Models\Donation;
6 use Give\Donations\Models\DonationNote;
7 use Give\Donations\ValueObjects\DonationStatus;
8 use Give\Framework\Exceptions\Primitives\Exception;
9 use Give\Framework\Http\Response\Types\RedirectResponse;
10 use Give\Framework\PaymentGateways\Commands\GatewayCommand;
11 use Give\Framework\PaymentGateways\Commands\PaymentRefunded;
12 use Give\Framework\PaymentGateways\Commands\RedirectOffsite;
13 use Give\Framework\PaymentGateways\PaymentGateway;
14 use Give\Helpers\Form\Utils as FormUtils;
15 use Give\PaymentGateways\Gateways\TestGateway\Views\LegacyFormFieldMarkup;
16 use Give\Subscriptions\Models\Subscription;
17 use Give\Subscriptions\ValueObjects\SubscriptionStatus;
18
19 /**
20 * Class TestGatewayOffsite
21 * @since 2.18.0
22 */
23 class TestGatewayOffsite extends PaymentGateway
24 {
25 /**
26 * @inheritDoc
27 */
28 public $secureRouteMethods = [
29 'securelyReturnFromOffsiteRedirect'
30 ];
31
32 /**
33 * @since 2.30.0
34 */
35 public function enqueueScript(int $formId)
36 {
37 // This is temporary action to enqueue gateway scripts in the GiveWP 3.0 feature plugin.
38 // Eventually, these scripts will be moved to the GiveWP core plugin.
39 // TODO: enqueue scripts for 3.0 when feature plugin is merged into GiveWP
40 do_action('givewp_donation_form_enqueue_test_gateway_offsite_scripts');
41 }
42
43 /**
44 * @inheritDoc
45 */
46 public static function id(): string
47 {
48 return 'test-gateway-offsite';
49 }
50
51 /**
52 * @inheritDoc
53 */
54 public function getId(): string
55 {
56 return self::id();
57 }
58
59 /**
60 * @inheritDoc
61 */
62 public function getName(): string
63 {
64 return __('Test Gateway (Offsite)', 'give');
65 }
66
67 /**
68 * @inheritDoc
69 */
70 public function getPaymentMethodLabel(): string
71 {
72 return __('Test Gateway (Offsite)', 'give');
73 }
74
75 /**
76 * @since 2.18.0
77 */
78 public function getLegacyFormFieldMarkup(int $formId, array $args): string
79 {
80 if (FormUtils::isLegacyForm($formId)) {
81 return false;
82 }
83
84 /** @var LegacyFormFieldMarkup $legacyFormFieldMarkup */
85 $legacyFormFieldMarkup = give(LegacyFormFieldMarkup::class);
86
87 return $legacyFormFieldMarkup();
88 }
89
90 /**
91 * @inheritDoc
92 */
93 public function createPayment(Donation $donation, $gatewayData)
94 {
95 $redirectUrl = $this->generateSecureGatewayRouteUrl(
96 'securelyReturnFromOffsiteRedirect',
97 $donation->id,
98 [
99 'givewp-donation-id' => $donation->id,
100 'givewp-return-url' => $gatewayData['successUrl']
101 ]
102 );
103
104 return new RedirectOffsite($redirectUrl);
105 }
106
107 /**
108 * @inheritDoc
109 */
110 public function createSubscription(
111 Donation $donation,
112 Subscription $subscription,
113 $gatewayData
114 ): GatewayCommand {
115 $redirectUrl = $this->generateSecureGatewayRouteUrl(
116 'securelyReturnFromOffsiteRedirect',
117 $donation->id,
118 [
119 'givewp-donation-id' => $donation->id,
120 'give-subscription-id' => $subscription->id,
121 'givewp-return-url' => $gatewayData['successUrl']
122 ]
123 );
124
125 return new RedirectOffsite($redirectUrl);
126 }
127
128 /**
129 * An example of using a secureRouteMethod for extending the Gateway API to handle a redirect.
130 *
131 * @since 2.30.0 update with new gatewayData params
132 * @since 2.21.0 update to use Donation model
133 * @since 2.19.0
134 *
135 * @param array $queryParams
136 *
137 * @return RedirectResponse
138 * @throws Exception
139 * @throws \Exception
140 */
141 protected function securelyReturnFromOffsiteRedirect(array $queryParams): RedirectResponse
142 {
143 /** @var Donation $donation */
144 $donation = Donation::find($queryParams['givewp-donation-id']);
145 $this->updateDonation($donation);
146
147 if ($donation->type->isSubscription()) {
148 /** @var Subscription $subscription */
149 $subscription = Subscription::find($queryParams['givewp-subscription-id']);
150 $this->updateSubscription($subscription);
151 }
152
153 return new RedirectResponse($queryParams['givewp-return-url']);
154 }
155
156 /**
157 * @since 2.29.0 Return PaymentRefunded instead of a bool value
158 * @since 2.20.0
159 * @inerhitDoc
160 */
161 public function refundDonation(Donation $donation): PaymentRefunded
162 {
163 return new PaymentRefunded();
164 }
165
166 /**
167 * @param Donation $donation
168 *
169 * @return void
170 * @throws Exception
171 */
172 private function updateDonation(Donation $donation)
173 {
174 $donation->status = DonationStatus::COMPLETE();
175 $donation->gatewayTransactionId = "test-gateway-transaction-id";
176 $donation->save();
177
178 DonationNote::create([
179 'donationId' => $donation->id,
180 'content' => 'Donation Completed from Test Gateway Offsite.'
181 ]);
182 }
183
184 /**
185 * @since 2.23.0
186 *
187 * @return void
188 * @throws \Exception
189 */
190 private function updateSubscription(Subscription $subscription)
191 {
192 $subscription->status = SubscriptionStatus::ACTIVE();
193 $subscription->transactionId = "test-gateway-transaction-id";
194 $subscription->save();
195 }
196 }
197