gateways = array_merge( $this->gateways, $this->stripePaymentMethods ); /** @var PaymentGatewayRegister $paymentGatewayRegister */ $paymentGatewayRegister = give(PaymentGatewayRegister::class); foreach ($this->gateways as $gateway) { $paymentGatewayRegister->registerGateway($gateway); } $this->addGatewayDataToStripPaymentMethods(); $this->addGatewayDataToPayPalCommerce(); $this->register3rdPartyPaymentGateways($paymentGatewayRegister); $this->unregister3rdPartyPaymentGateways($paymentGatewayRegister); $this->afterRegisteredGateways(); return $gateways; } /** * Register 3rd party payment gateways * * @since 2.21.0 use givewp prefix for action * @since 2.18.0 * * @param PaymentGatewayRegister $paymentGatewayRegister */ private function register3rdPartyPaymentGateways(PaymentGatewayRegister $paymentGatewayRegister) { do_action('givewp_register_payment_gateway', $paymentGatewayRegister); } /** * Unregister 3rd party payment gateways * * @since 2.21.0 use givewp prefix for action * @since 2.18.0 * * @param PaymentGatewayRegister $paymentGatewayRegister */ private function unregister3rdPartyPaymentGateways(PaymentGatewayRegister $paymentGatewayRegister) { do_action('givewp_unregister_payment_gateway', $paymentGatewayRegister); } /** * @since 2.21.2 */ private function addGatewayDataToStripPaymentMethods() { foreach ($this->stripePaymentMethods as $gatewayClass) { add_filter( sprintf( 'givewp_create_payment_gateway_data_%1$s', $gatewayClass::id() ), function ($gatewayData, Donation $donation) { $gatewayData['stripePaymentMethod'] = (new GetPaymentMethodFromRequest())($donation); return $gatewayData; }, 10, 2 ); } } /** * @since 4.0.0 updated to support authorize and capture * @since 3.2.0 Prevent undefined index notice when getting payPalOrderId from gateway data. * @since 2.26.0 Add support for the updated PayPal Commerce gateway data. * @since 2.21.2 * * @throws PayPalOrderIdException */ private function addGatewayDataToPayPalCommerce() { add_filter( sprintf( 'givewp_create_payment_gateway_data_%1$s', PayPalCommerce::id() ), static function ($gatewayData) { if (array_key_exists('payPalOrderId', $gatewayData)) { $paypalOrderId = $gatewayData['payPalOrderId']; } else { $paypalOrderId = give_clean($_POST['payPalOrderId']); $gatewayData['payPalOrderId'] = $paypalOrderId; } if (! $paypalOrderId) { throw new PayPalOrderIdException(__('PayPal order id is missing.', 'give')); } return $gatewayData; } ); } /** * After gateways have been registered, connect to legacy payment gateway adapter */ private function afterRegisteredGateways() { /** @var PaymentGatewayRegister $paymentGatewayRegister */ $paymentGatewayRegister = give(PaymentGatewayRegister::class); /** @var LegacyPaymentGatewayRegisterAdapter $legacyPaymentGatewayRegisterAdapter */ $legacyPaymentGatewayRegisterAdapter = give(LegacyPaymentGatewayRegisterAdapter::class); foreach ($paymentGatewayRegister->getPaymentGateways() as $gatewayClass) { $legacyPaymentGatewayRegisterAdapter->connectGatewayToLegacyPaymentGatewayAdapter($gatewayClass); } } }