PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.31.1
GiveWP – Donation Plugin and Fundraising Platform v2.31.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
182 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\Exceptions\PayPalOrderException;
17 use Give\PaymentGateways\PayPalCommerce\Exceptions\PayPalOrderIdException;
18 use Give\PaymentGateways\PayPalCommerce\PayPalCommerce;
19 use Give\PaymentGateways\PayPalCommerce\Repositories\PayPalOrder;
20
21 class RegisterPaymentGateways
22 {
23 /**
24 * Array of Stripe payment method PaymentGateway classes to be bootstrapped
25 *
26 * @var string[]
27 */
28 private $stripePaymentMethods = [
29 StripeBECSGateway::class,
30 StripeCheckoutGateway::class,
31 StripeCreditCardGateway::class,
32 StripeSEPAGateway::class,
33 ];
34
35 /**
36 * Array of PaymentGateway classes to be bootstrapped
37 *
38 * @var string[]
39 */
40 public $gateways = [
41 // When complete, the Test Gateway will eventually replace The legacy Manual Gateway.
42 //TestGateway::class,
43 //TestGatewayOffsite::class,
44 PayPalStandard::class,
45 PayPalCommerce::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 2.26.0 Add support for the updated PayPal Commerce gateway data.
136 * @since 2.21.2
137 *
138 * @throws PayPalOrderIdException
139 * @throws PayPalOrderException
140 */
141 private function addGatewayDataToPayPalCommerce()
142 {
143 add_filter(
144 sprintf(
145 'givewp_create_payment_gateway_data_%1$s',
146 PayPalCommerce::id()
147 ),
148 function ($gatewayData) {
149 $paypalOrderId = $gatewayData['payPalOrderId'] ?? give_clean($_POST['payPalOrderId']);
150
151 if ( ! $paypalOrderId) {
152 throw new PayPalOrderIdException(__('PayPal order id is missing.', 'give'));
153 }
154
155 try {
156 $gatewayData['paypalOrder'] = give(PayPalOrder::class)->getOrder($paypalOrderId);
157 } catch (\Exception $e) {
158 throw new PayPalOrderException(__('Unable to get order using order id.', 'give'));
159 }
160
161 return $gatewayData;
162 }
163 );
164 }
165
166 /**
167 * After gateways have been registered, connect to legacy payment gateway adapter
168 */
169 private function afterRegisteredGateways()
170 {
171 /** @var PaymentGatewayRegister $paymentGatewayRegister */
172 $paymentGatewayRegister = give(PaymentGatewayRegister::class);
173
174 /** @var LegacyPaymentGatewayRegisterAdapter $legacyPaymentGatewayRegisterAdapter */
175 $legacyPaymentGatewayRegisterAdapter = give(LegacyPaymentGatewayRegisterAdapter::class);
176
177 foreach ($paymentGatewayRegister->getPaymentGateways() as $gatewayClass) {
178 $legacyPaymentGatewayRegisterAdapter->connectGatewayToLegacyPaymentGatewayAdapter($gatewayClass);
179 }
180 }
181 }
182