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