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