PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
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 / PaymentGateways / Gateways / PayPalStandard / PayPalStandard.php
give / src / PaymentGateways / Gateways / PayPalStandard Last commit date
Actions 3 years ago Controllers 3 years ago Migrations 4 years ago Views 3 years ago Webhooks 4 years ago resources 2 years ago PayPalStandard.php 2 years ago
PayPalStandard.php
280 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\PayPalStandard;
4
5 use Give\Donations\Models\Donation;
6 use Give\Donations\ValueObjects\DonationStatus;
7 use Give\Framework\Exceptions\Primitives\Exception;
8 use Give\Framework\Http\Response\Types\RedirectResponse;
9 use Give\Framework\PaymentGateways\Commands\RedirectOffsite;
10 use Give\Framework\PaymentGateways\PaymentGateway;
11 use Give\Framework\PaymentGateways\Traits\HandleHttpResponses;
12 use Give\Framework\Support\Scripts\Concerns\HasScriptAssetFile;
13 use Give\PaymentGateways\Gateways\PayPalStandard\Actions\CreatePayPalStandardPaymentURL;
14 use Give\PaymentGateways\Gateways\PayPalStandard\Controllers\PayPalStandardWebhook;
15 use Give\PaymentGateways\Gateways\PayPalStandard\Views\PayPalStandardBillingFields;
16
17 /**
18 * @since 3.0.0 added support for Give 3.0 forms
19 * @since 2.19.0
20 */
21 class PayPalStandard extends PaymentGateway
22 {
23 use HandleHttpResponses;
24 use HasScriptAssetFile;
25
26 public $routeMethods = [
27 'handleIpnNotification',
28 ];
29
30 public $secureRouteMethods = [
31 'handleSuccessPaymentReturn',
32 'handleCancelledPaymentReturn',
33 ];
34
35 /**
36 * @since 2.19.0
37 */
38 public function getLegacyFormFieldMarkup(int $formId, array $args): string
39 {
40 return (new PayPalStandardBillingFields())($formId);
41 }
42
43 /**
44 * @since 2.19.0
45 */
46 public static function id(): string
47 {
48 return 'paypal';
49 }
50
51 /**
52 * @since 2.19.0
53 */
54 public function getId(): string
55 {
56 return self::id();
57 }
58
59 /**
60 * @since 2.19.0
61 */
62 public function getName(): string
63 {
64 return __('PayPal Standard', 'give');
65 }
66
67 /**
68 * @since 2.19.0
69 */
70 public function getPaymentMethodLabel(): string
71 {
72 return esc_html__('PayPal', 'give');
73 }
74
75 /**
76 * @since 3.0.0
77 */
78 public function formSettings(int $formId): array
79 {
80 return [
81 'fields' => [
82 'heading' => __('Make your donation quickly and securely with PayPal', 'give'),
83 'subheading' => __('How it works', 'give'),
84 'body' => __(
85 'You will be redirected to PayPal to complete your donation with your debit card, credit card, or with your PayPal account. Once complete, you will be redirected back to this site to view your receipt.',
86 'give'
87 ),
88 ]
89 ];
90 }
91
92 /**
93 * @since 3.0.0
94 */
95 public function enqueueScript(int $formId)
96 {
97 $assets = $this->getScriptAsset(GIVE_PLUGIN_DIR . 'build/payPalStandardGateway.asset.php');
98
99 wp_enqueue_script(
100 self::id(),
101 GIVE_PLUGIN_URL . 'build/payPalStandardGateway.js',
102 $assets['dependencies'],
103 $assets['version'],
104 true
105 );
106 }
107
108 /**
109 * @since 3.0.0 update to add `givewp-return-url` to the query params
110 * @since 2.19.0
111 */
112 public function createPayment(Donation $donation, $gatewayData = []): RedirectOffsite
113 {
114 return new RedirectOffsite(
115 (new CreatePayPalStandardPaymentURL())(
116 $donation,
117 $this->generateSecureGatewayRouteUrl(
118 'handleSuccessPaymentReturn',
119 $donation->id,
120 [
121 'donation-id' => $donation->id,
122 'givewp-return-url' => $gatewayData['successUrl']
123 ]
124 ),
125 $this->generateSecureGatewayRouteUrl(
126 'handleCancelledPaymentReturn',
127 $donation->id,
128 [
129 'donation-id' => $donation->id,
130 'givewp-return-url' => $gatewayData['cancelUrl']
131 ]
132 ),
133 $this->generateGatewayRouteUrl(
134 'handleIpnNotification'
135 )
136 )
137 );
138 }
139
140 /**
141 * Handle payment redirect after successful payment on PayPal standard.
142 *
143 * @since 3.0.0 update to use the $gatewayParams return url
144 * @since 2.19.0
145 * @since 2.19.4 Only pending PayPal Standard donation set to processing.
146 * @since 2.19.6 1. Do not set donation to "processing" 2. Add "payment-confirmation" param to receipt page url
147 */
148 protected function handleSuccessPaymentReturn(array $queryParams): RedirectResponse
149 {
150 return new RedirectResponse(esc_url_raw($queryParams['givewp-return-url']));
151 }
152
153 /**
154 * This method is called when the user cancels the payment on PayPal.
155 *
156 * @since 3.0.0
157 */
158 protected function handleCancelledPaymentReturn(array $queryParams): RedirectResponse
159 {
160 $donationId = (int)$queryParams['donation-id'];
161
162 /** @var Donation $donation */
163 $donation = Donation::find($donationId);
164 $donation->status = DonationStatus::CANCELLED();
165 $donation->save();
166
167 return new RedirectResponse(esc_url_raw($queryParams['givewp-return-url']));
168 }
169
170 /**
171 * Handle PayPal IPN notification.
172 *
173 * @since 2.19.0
174 */
175 public function handleIpnNotification()
176 {
177 give(PayPalStandardWebhook::class)->handle();
178 }
179
180 /**
181 * This function returns payment gateway settings.
182 *
183 * @since 2.19.0
184 */
185 public function getOptions(): array
186 {
187 $setting = [
188 // Section 2: PayPal Standard.
189 [
190 'type' => 'title',
191 'id' => 'give_title_gateway_settings_2',
192 ],
193 [
194 'name' => esc_html__('PayPal Email', 'give'),
195 'desc' => esc_html__(
196 'Enter the email address associated with your PayPal account to connect with the gateway.',
197 'give'
198 ),
199 'id' => 'paypal_email',
200 'type' => 'email',
201 ],
202 [
203 'name' => esc_html__('PayPal Page Style', 'give'),
204 'desc' => esc_html__(
205 'Enter the name of the PayPal page style to use, or leave blank to use the default.',
206 'give'
207 ),
208 'id' => 'paypal_page_style',
209 'type' => 'text',
210 ],
211 [
212 'name' => esc_html__('PayPal Transaction Type', 'give'),
213 'desc' => esc_html__(
214 'Nonprofits must verify their status to withdraw donations they receive via PayPal. PayPal users that are not verified nonprofits must demonstrate how their donations will be used, once they raise more than $10,000. By default, GiveWP transactions are sent to PayPal as donations. You may change the transaction type using this option if you feel you may not meet PayPal\'s donation requirements.',
215 'give'
216 ),
217 'id' => 'paypal_button_type',
218 'type' => 'radio_inline',
219 'options' => [
220 'donation' => esc_html__('Donation', 'give'),
221 'standard' => esc_html__('Standard Transaction', 'give'),
222 ],
223 'default' => 'donation',
224 ],
225 [
226 'name' => esc_html__('Billing Details', 'give'),
227 'desc' => esc_html__(
228 'If enabled, required billing address fields are added to PayPal Standard forms. These fields are not required by PayPal to process the transaction, but you may have a need to collect the data. Billing address details are added to both the donation and donor record in GiveWP.',
229 'give'
230 ),
231 'id' => 'paypal_standard_billing_details',
232 'type' => 'radio_inline',
233 'default' => 'disabled',
234 'options' => [
235 'enabled' => esc_html__('Enabled', 'give'),
236 'disabled' => esc_html__('Disabled', 'give'),
237 ],
238 ],
239 [
240 'id' => 'paypal_invoice_prefix',
241 'name' => esc_html__('Invoice ID Prefix', 'give'),
242 'desc' => esc_html__(
243 'Enter a prefix for your invoice numbers. If you use your PayPal account for multiple fundraising platforms or ecommerce stores, ensure this prefix is unique. PayPal will not allow orders or donations with the same invoice number.',
244 'give'
245 ),
246 'type' => 'text',
247 'default' => 'GIVE-',
248 ],
249 [
250 'name' => esc_html__('PayPal Standard Gateway Settings Docs Link', 'give'),
251 'id' => 'paypal_standard_gateway_settings_docs_link',
252 'url' => esc_url('http://docs.givewp.com/settings-gateway-paypal-standard'),
253 'title' => esc_html__('PayPal Standard Gateway Settings', 'give'),
254 'type' => 'give_docs_link',
255 ],
256 [
257 'type' => 'sectionend',
258 'id' => 'give_title_gateway_settings_2',
259 ],
260 ];
261
262 /**
263 * filter the settings.
264 *
265 * @since 2.9.6
266 */
267 return apply_filters('give_get_settings_paypal_standard', $setting);
268 }
269
270 /**
271 * @since 2.20.0
272 * @inerhitDoc
273 * @throws Exception
274 */
275 public function refundDonation(Donation $donation)
276 {
277 throw new Exception('Method has not been implemented yet. Please use the legacy method in the meantime.');
278 }
279 }
280