PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
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 / Actions / RegisterPaymentGateways.php
give / src / PaymentGateways / Actions Last commit date
GetGatewayDataFromRequest.php 2 years ago RegisterPaymentGateways.php 2 years ago
RegisterPaymentGateways.php
188 lines
1 <?php
2
3 namespace Give\PaymentGateways\Actions;
4
5 use Give\Donations\Models\Donation;
6 use Give\Framework\Exceptions\Primitives\Exception;
7 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
8 use Give\Framework\LegacyPaymentGateways\Adapters\LegacyPaymentGatewayRegisterAdapter;
9 use Give\Framework\PaymentGateways\PaymentGatewayRegister;
10 use Give\PaymentGateways\Gateways\Offline\OfflineGateway;
11 use Give\PaymentGateways\Gateways\PayPalStandard\PayPalStandard;
12 use Give\PaymentGateways\Gateways\Stripe\Actions\GetPaymentMethodFromRequest;
13 use Give\PaymentGateways\Gateways\Stripe\BECSGateway as StripeBECSGateway;
14 use Give\PaymentGateways\Gateways\Stripe\CheckoutGateway as StripeCheckoutGateway;
15 use Give\PaymentGateways\Gateways\Stripe\CreditCardGateway as StripeCreditCardGateway;
16 use Give\PaymentGateways\Gateways\Stripe\SEPAGateway as StripeSEPAGateway;
17 use Give\PaymentGateways\Gateways\TestGateway\TestGateway;
18 use Give\PaymentGateways\PayPalCommerce\Exceptions\PayPalOrderException;
19 use Give\PaymentGateways\PayPalCommerce\Exceptions\PayPalOrderIdException;
20 use Give\PaymentGateways\PayPalCommerce\PayPalCommerce;
21 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalOrder;
22
23 class RegisterPaymentGateways
24 {
25 /**
26 * Array of Stripe payment method PaymentGateway classes to be bootstrapped
27 *
28 * @var string[]
29 */
30 private $stripePaymentMethods = [
31 StripeBECSGateway::class,
32 StripeCheckoutGateway::class,
33 StripeCreditCardGateway::class,
34 StripeSEPAGateway::class,
35 ];
36
37 /**
38 * Array of PaymentGateway classes to be bootstrapped
39 *
40 * @var string[]
41 */
42 public $gateways = [
43 TestGateway::class,
44 PayPalStandard::class,
45 OfflineGateway::class,
46 ];
47
48 /**
49 * Registers all the payment gateways with GiveWP
50 *
51 * @since 2.25.0 add afterRegisteredGateways
52 * @since 2.18.0
53 *
54 * @param array $gateways
55 *
56 * @return array
57 *
58 * @throws InvalidArgumentException|Exception
59 *
60 */
61 public function __invoke(array $gateways): array
62 {
63 $this->gateways = array_merge(
64 $this->gateways,
65 $this->stripePaymentMethods
66 );
67
68 /** @var PaymentGatewayRegister $paymentGatewayRegister */
69 $paymentGatewayRegister = give(PaymentGatewayRegister::class);
70
71 foreach ($this->gateways as $gateway) {
72 $paymentGatewayRegister->registerGateway($gateway);
73 }
74
75 $this->addGatewayDataToStripPaymentMethods();
76 $this->addGatewayDataToPayPalCommerce();
77
78 $this->register3rdPartyPaymentGateways($paymentGatewayRegister);
79 $this->unregister3rdPartyPaymentGateways($paymentGatewayRegister);
80
81 $this->afterRegisteredGateways();
82
83 return $gateways;
84 }
85
86 /**
87 * Register 3rd party payment gateways
88 *
89 * @since 2.21.0 use givewp prefix for action
90 * @since 2.18.0
91 *
92 * @param PaymentGatewayRegister $paymentGatewayRegister
93 */
94 private function register3rdPartyPaymentGateways(PaymentGatewayRegister $paymentGatewayRegister)
95 {
96 do_action('givewp_register_payment_gateway', $paymentGatewayRegister);
97 }
98
99 /**
100 * Unregister 3rd party payment gateways
101 *
102 * @since 2.21.0 use givewp prefix for action
103 * @since 2.18.0
104 *
105 * @param PaymentGatewayRegister $paymentGatewayRegister
106 */
107 private function unregister3rdPartyPaymentGateways(PaymentGatewayRegister $paymentGatewayRegister)
108 {
109 do_action('givewp_unregister_payment_gateway', $paymentGatewayRegister);
110 }
111
112 /**
113 * @since 2.21.2
114 */
115 private function addGatewayDataToStripPaymentMethods()
116 {
117 foreach ($this->stripePaymentMethods as $gatewayClass) {
118 add_filter(
119 sprintf(
120 'givewp_create_payment_gateway_data_%1$s',
121 $gatewayClass::id()
122 ),
123 function ($gatewayData, Donation $donation) {
124 $gatewayData['stripePaymentMethod'] = (new GetPaymentMethodFromRequest())($donation);
125
126 return $gatewayData;
127 },
128 10,
129 2
130 );
131 }
132 }
133
134 /**
135 * @since 3.2.0 Prevent undefined index notice when getting payPalOrderId from gateway data.
136 * @since 2.26.0 Add support for the updated PayPal Commerce gateway data.
137 * @since 2.21.2
138 *
139 * @throws PayPalOrderIdException
140 * @throws PayPalOrderException
141 */
142 private function addGatewayDataToPayPalCommerce()
143 {
144 add_filter(
145 sprintf(
146 'givewp_create_payment_gateway_data_%1$s',
147 PayPalCommerce::id()
148 ),
149 function ($gatewayData) {
150 if (array_key_exists('payPalOrderId', $gatewayData)) {
151 $paypalOrderId = $gatewayData['payPalOrderId'];
152 } else {
153 $paypalOrderId = give_clean($_POST['payPalOrderId']);
154 $gatewayData['payPalOrderId'] = $paypalOrderId;
155 }
156
157 if (! $paypalOrderId) {
158 throw new PayPalOrderIdException(__('PayPal order id is missing.', 'give'));
159 }
160
161 try {
162 $gatewayData['paypalOrder'] = give(PayPalOrder::class)->getOrder($paypalOrderId);
163 } catch (\Exception $e) {
164 throw new PayPalOrderException(__('Unable to get order using order id.', 'give'));
165 }
166
167 return $gatewayData;
168 }
169 );
170 }
171
172 /**
173 * After gateways have been registered, connect to legacy payment gateway adapter
174 */
175 private function afterRegisteredGateways()
176 {
177 /** @var PaymentGatewayRegister $paymentGatewayRegister */
178 $paymentGatewayRegister = give(PaymentGatewayRegister::class);
179
180 /** @var LegacyPaymentGatewayRegisterAdapter $legacyPaymentGatewayRegisterAdapter */
181 $legacyPaymentGatewayRegisterAdapter = give(LegacyPaymentGatewayRegisterAdapter::class);
182
183 foreach ($paymentGatewayRegister->getPaymentGateways() as $gatewayClass) {
184 $legacyPaymentGatewayRegisterAdapter->connectGatewayToLegacyPaymentGatewayAdapter($gatewayClass);
185 }
186 }
187 }
188