PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.20.0
GiveWP – Donation Plugin and Fundraising Platform v2.20.0
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 4 years ago Controllers 4 years ago Migrations 4 years ago Views 4 years ago Webhooks 4 years ago resources 4 years ago PayPalStandard.php 4 years ago
PayPalStandard.php
256 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\PayPalStandard;
4
5 use Give\Donations\Models\Donation;
6 use Give\Framework\Exceptions\Primitives\Exception;
7 use Give\Framework\Http\Response\Types\RedirectResponse;
8 use Give\Framework\PaymentGateways\Commands\RedirectOffsite;
9 use Give\Framework\PaymentGateways\PaymentGateway;
10 use Give\Helpers\Call;
11 use Give\PaymentGateways\DataTransferObjects\GatewayPaymentData;
12 use Give\PaymentGateways\Gateways\PayPalStandard\Actions\CreatePayPalStandardPaymentURL;
13 use Give\PaymentGateways\Gateways\PayPalStandard\Actions\GenerateDonationFailedPageUrl;
14 use Give\PaymentGateways\Gateways\PayPalStandard\Actions\GenerateDonationReceiptPageUrl;
15 use Give\PaymentGateways\Gateways\PayPalStandard\Controllers\PayPalStandardWebhook;
16 use Give\PaymentGateways\Gateways\PayPalStandard\Views\PayPalStandardBillingFields;
17 use Give_Payment;
18
19 class PayPalStandard extends PaymentGateway
20 {
21 public $routeMethods = [
22 'handleIpnNotification'
23 ];
24
25 public $secureRouteMethods = [
26 'handleSuccessPaymentReturn',
27 'handleFailedPaymentReturn'
28 ];
29
30 /**
31 * @inheritDoc
32 */
33 public function getLegacyFormFieldMarkup($formId, $args)
34 {
35 return Call::invoke(PayPalStandardBillingFields::class, $formId);
36 }
37
38 /**
39 * @inheritDoc
40 */
41 public static function id()
42 {
43 return 'paypal';
44 }
45
46 /**
47 * @inerhitDoc
48 */
49 public function getId()
50 {
51 return self::id();
52 }
53
54 /**
55 * @inheritDoc
56 */
57 public function getName()
58 {
59 return esc_html__('PayPal Standard', 'give');
60 }
61
62 /**
63 * @inheritDoc
64 */
65 public function getPaymentMethodLabel()
66 {
67 return esc_html__('PayPal', 'give');
68 }
69
70 /**
71 * @inheritDoc
72 */
73 public function createPayment(GatewayPaymentData $paymentData)
74 {
75 return new RedirectOffsite(
76 Call::invoke(
77 CreatePayPalStandardPaymentURL::class,
78 $paymentData,
79 $this->generateSecureGatewayRouteUrl(
80 'handleSuccessPaymentReturn',
81 $paymentData->donationId,
82 ['donation-id' => $paymentData->donationId]
83 ),
84 $this->generateSecureGatewayRouteUrl(
85 'handleFailedPaymentReturn',
86 $paymentData->donationId,
87 ['donation-id' => $paymentData->donationId]
88 ),
89 $this->generateGatewayRouteUrl(
90 'handleIpnNotification'
91 )
92 )
93 );
94 }
95
96 /**
97 * Handle payment redirect after successful payment on PayPal standard.
98 *
99 * @since 2.19.0
100 * @since 2.19.4 Only pending PayPal Standard donation set to processing.
101 * @since 2.19.6 1. Do not set donation to "processing"
102 * 2. Add "payment-confirmation" param to receipt page url
103 *
104 * @param array $queryParams Query params in gateway route. {
105 *
106 * @type string "donation-id" Donation id.
107 *
108 * }
109 *
110 * @return RedirectResponse
111 */
112 protected function handleSuccessPaymentReturn($queryParams)
113 {
114 $donationId = (int)$queryParams['donation-id'];
115
116 return new RedirectResponse(add_query_arg(
117 [ 'payment-confirmation' => $this->getId() ],
118 Call::invoke(GenerateDonationReceiptPageUrl::class, $donationId)
119 ));
120 }
121
122 /**
123 * Handle payment redirect after failed payment on PayPal standard.
124 *
125 * @since 2.19.0
126 *
127 * @param array $queryParams Query params in gateway route. {
128 *
129 * @type string "donation-id" Donation id.
130 *
131 * }
132 *
133 * @return RedirectResponse
134 */
135 protected function handleFailedPaymentReturn($queryParams)
136 {
137 $donationId = (int)$queryParams['donation-id'];
138 $payment = new Give_Payment($donationId);
139 $payment->update_status('failed');
140
141 return new RedirectResponse(Call::invoke(GenerateDonationFailedPageUrl::class, $donationId));
142 }
143
144 /**
145 * Handle PayPal IPN notification.
146 *
147 * @since 2.19.0
148 */
149 public function handleIpnNotification()
150 {
151 give(PayPalStandardWebhook::class)->handle();
152 }
153
154 /**
155 * This function returns payment gateway settings.
156 *
157 * @since 2.19.0
158 *
159 * @return array
160 */
161 public function getOptions()
162 {
163 $setting = [
164 // Section 2: PayPal Standard.
165 [
166 'type' => 'title',
167 'id' => 'give_title_gateway_settings_2',
168 ],
169 [
170 'name' => esc_html__('PayPal Email', 'give'),
171 'desc' => esc_html__(
172 'Enter the email address associated with your PayPal account to connect with the gateway.',
173 'give'
174 ),
175 'id' => 'paypal_email',
176 'type' => 'email',
177 ],
178 [
179 'name' => esc_html__('PayPal Page Style', 'give'),
180 'desc' => esc_html__(
181 'Enter the name of the PayPal page style to use, or leave blank to use the default.',
182 'give'
183 ),
184 'id' => 'paypal_page_style',
185 'type' => 'text',
186 ],
187 [
188 'name' => esc_html__('PayPal Transaction Type', 'give'),
189 'desc' => esc_html__(
190 '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.',
191 'give'
192 ),
193 'id' => 'paypal_button_type',
194 'type' => 'radio_inline',
195 'options' => [
196 'donation' => esc_html__('Donation', 'give'),
197 'standard' => esc_html__('Standard Transaction', 'give'),
198 ],
199 'default' => 'donation',
200 ],
201 [
202 'name' => esc_html__('Billing Details', 'give'),
203 'desc' => esc_html__(
204 '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.',
205 'give'
206 ),
207 'id' => 'paypal_standard_billing_details',
208 'type' => 'radio_inline',
209 'default' => 'disabled',
210 'options' => [
211 'enabled' => esc_html__('Enabled', 'give'),
212 'disabled' => esc_html__('Disabled', 'give'),
213 ],
214 ],
215 [
216 'id' => 'paypal_invoice_prefix',
217 'name' => esc_html__('Invoice ID Prefix', 'give'),
218 'desc' => esc_html__(
219 '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.',
220 'give'
221 ),
222 'type' => 'text',
223 'default' => 'GIVE-',
224 ],
225 [
226 'name' => esc_html__('PayPal Standard Gateway Settings Docs Link', 'give'),
227 'id' => 'paypal_standard_gateway_settings_docs_link',
228 'url' => esc_url('http://docs.givewp.com/settings-gateway-paypal-standard'),
229 'title' => esc_html__('PayPal Standard Gateway Settings', 'give'),
230 'type' => 'give_docs_link',
231 ],
232 [
233 'type' => 'sectionend',
234 'id' => 'give_title_gateway_settings_2',
235 ],
236 ];
237
238 /**
239 * filter the settings.
240 *
241 * @since 2.9.6
242 */
243 return apply_filters('give_get_settings_paypal_standard', $setting);
244 }
245
246 /**
247 * @since 2.20.0
248 * @inerhitDoc
249 * @throws Exception
250 */
251 public function refundDonation(Donation $donation)
252 {
253 throw new Exception('Method has not been implemented yet. Please use the legacy method in the meantime.');
254 }
255 }
256