teway. * @param bool $is_enable_installments_eligible - Show if merchant has installments capability and merchant country is MX. * @param bool $is_working_capital_eligible - Show if feature flag is enabled, merchant country is US and "Stay Updated" is turned On. * @param bool $is_pwc_eligible - Show if merchant has Pay with Crypto capability and store currency is USD. * @param bool $is_recaptcha_protection_eligible - Show if reCAPTCHA is not already enabled. */ return new TodosEligibilityService( $container->get('axo.eligible') && $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !$gateways['axo'], // Enable Fastlane. $is_pay_later_messaging_enabled_for_any_location, // Enable Pay Later messaging. !$is_pay_later_messaging_enabled_for_any_location && !$pay_later_statuses['product'], // Add Pay Later messaging (Product page). !$is_pay_later_messaging_enabled_for_any_location && !$pay_later_statuses['cart'], // Add Pay Later messaging (Cart). !$is_pay_later_messaging_enabled_for_any_location && !$pay_later_statuses['checkout'], // Add Pay Later messaging (Checkout). $container->has('save-payment-methods.eligible') && !$container->get('save-payment-methods.eligible') && $container->has('wc-subscriptions.helper') && $container->get('wc-subscriptions.helper')->plugin_is_active(), // Configure a PayPal Subscription. !$button_locations['cart_enabled'], // Add PayPal buttons to cart. !$button_locations['block_checkout_enabled'], // Add PayPal buttons to block checkout. !$button_locations['product_enabled'], // Add PayPal buttons to product. $container->get('applepay.eligible') && $capabilities[FeaturesDefinition::FEATURE_APPLE_PAY] && !$container->get('applepay.is_validated'), // Register Domain for Apple Pay. $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !($capabilities[FeaturesDefinition::FEATURE_APPLE_PAY] && $capabilities[FeaturesDefinition::FEATURE_GOOGLE_PAY]), // Add digital wallets to your account. $container->get('applepay.eligible') && $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !$capabilities[FeaturesDefinition::FEATURE_APPLE_PAY], // Add Apple Pay to your account. $container->get('googlepay.eligible') && $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !$capabilities[FeaturesDefinition::FEATURE_GOOGLE_PAY], // Add Google Pay to your account. $container->get('applepay.eligible') && $capabilities[FeaturesDefinition::FEATURE_APPLE_PAY] && !$gateways[FeaturesDefinition::FEATURE_APPLE_PAY], // Enable Apple Pay. $container->get('googlepay.eligible') && $capabilities[FeaturesDefinition::FEATURE_GOOGLE_PAY] && !$gateways[FeaturesDefinition::FEATURE_GOOGLE_PAY], !$capabilities[FeaturesDefinition::FEATURE_INSTALLMENTS] && 'MX' === $container->get('settings.data.general')->get_merchant_country(), // Enable Installments for Mexico. $is_working_capital_feature_flag_enabled && $is_working_capital_eligible, // Enable Working Capital. $capabilities[FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO] && !$gateways[FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO] && $container->get('ppcp-local-apms.pwc.eligibility.check'), // Enable Pay with Crypto. $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !$capabilities[FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO] && $container->get('ppcp-local-apms.pwc.eligibility.check'), // Apply for Pay with Crypto. !$is_recaptcha_enabled ); }, 'settings.rest.features' => static function (ContainerInterface $container): FeaturesRestEndpoint { return new FeaturesRestEndpoint($container->get('settings.data.definition.features'), $container->get('settings.rest.settings')); }, 'settings.data.definition.features' => static function (ContainerInterface $container): FeaturesDefinition { $features = apply_filters('woocommerce_paypal_payments_rest_common_merchant_features', array()); $payment_endpoint = $container->get('settings.rest.payment'); $settings = $payment_endpoint->get_details()->get_data(); // Settings status. $gateways = array('card-button' => $settings['data']['ppcp-card-button-gateway']['enabled'] ?? \false); // Merchant capabilities serve to show active or inactive badge and buttons. $capabilities = array(FeaturesDefinition::FEATURE_APPLE_PAY => $features[FeaturesDefinition::FEATURE_APPLE_PAY]['enabled'] ?? \false, FeaturesDefinition::FEATURE_GOOGLE_PAY => $features[FeaturesDefinition::FEATURE_GOOGLE_PAY]['enabled'] ?? \false, FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS => $features[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS]['enabled'] ?? \false, FeaturesDefinition::FEATURE_SAVE_PAYPAL_AND_VENMO => $features[FeaturesDefinition::FEATURE_SAVE_PAYPAL_AND_VENMO]['enabled'] ?? \false, FeaturesDefinition::FEATURE_ALTERNATIVE_PAYMENT_METHODS => $features[FeaturesDefinition::FEATURE_ALTERNATIVE_PAYMENT_METHODS]['enabled'] ?? \false, FeaturesDefinition::FEATURE_INSTALLMENTS => $features[FeaturesDefinition::FEATURE_INSTALLMENTS]['enabled'] ?? \false, FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO => $features[FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO]['enabled'] ?? \false, FeaturesDefinition::FEATURE_PAY_LATER_MESSAGING => $features[FeaturesDefinition::FEATURE_PAY_LATER_MESSAGING]['enabled'] ?? \false, FeaturesDefinition::FEATURE_PAY_UPON_INVOICE => $features[FeaturesDefinition::FEATURE_PAY_UPON_INVOICE]['enabled'] ?? \false); $merchant_capabilities = array( FeaturesDefinition::FEATURE_SAVE_PAYPAL_AND_VENMO => $capabilities[FeaturesDefinition::FEATURE_SAVE_PAYPAL_AND_VENMO], // Save PayPal and Venmo eligibility. FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS => $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS], // Advanced credit and debit cards eligibility. FeaturesDefinition::FEATURE_ALTERNATIVE_PAYMENT_METHODS => $capabilities[FeaturesDefinition::FEATURE_ALTERNATIVE_PAYMENT_METHODS], // Alternative payment methods eligibility. FeaturesDefinition::FEATURE_GOOGLE_PAY => $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && $capabilities[FeaturesDefinition::FEATURE_GOOGLE_PAY], // Google Pay eligibility. FeaturesDefinition::FEATURE_APPLE_PAY => $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && $capabilities[FeaturesDefinition::FEATURE_APPLE_PAY], // Apple Pay eligibility. FeaturesDefinition::FEATURE_PAY_LATER_MESSAGING => $capabilities[FeaturesDefinition::FEATURE_PAY_LATER_MESSAGING] && $capabilities[FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS] && !$gateways['card-button'], // Pay Later eligibility. FeaturesDefinition::FEATURE_INSTALLMENTS => $capabilities[FeaturesDefinition::FEATURE_INSTALLMENTS], // Installments eligibility. FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO => $capabilities[FeaturesDefinition::FEATURE_PAY_WITH_CRYPTO], // Pay with Crypto eligibility. FeaturesDefinition::FEATURE_PAY_UPON_INVOICE => $capabilities[FeaturesDefinition::FEATURE_PAY_UPON_INVOICE], ); return new FeaturesDefinition($container->get('settings.service.features_eligibilities'), $container->get('settings.data.general'), $merchant_capabilities, $container->get('woocommerce.logger.woocommerce')); }, 'settings.service.features_eligibilities' => static function (ContainerInterface $container): FeaturesEligibilityService { $messages_apply = $container->get('button.helper.messages-apply'); assert($messages_apply instanceof MessagesApply); $pay_later_eligible = $messages_apply->for_country(); $apm_eligible = $container->get('ppcp-local-apms.eligibility.check'); return new FeaturesEligibilityService( $container->get('save-payment-methods.eligible'), // Save PayPal and Venmo eligibility. $container->get('card-fields.eligibility.check'), // Advanced credit and debit cards eligibility. $apm_eligible, // Alternative payment methods eligibility. $container->get('googlepay.eligibility.check'), // Google Pay eligibility. $container->get('applepay.eligibility.check'), // Apple Pay eligibility. $pay_later_eligible, // Pay Later eligibility. 'MX' === $container->get('api.merchant.country'), // Installments eligibility. $container->get('ppcp-local-apms.pwc.eligibility.check'), // Pay with Crypto eligibility. $container->get('ppcp-local-apms.pui.eligibility.check') ); }, 'settings.service.payment_methods_eligibilities' => static function (ContainerInterface $container): PaymentMethodsEligibilityService { $applepay_product_status = $container->get('applepay.apple-product-status'); assert($applepay_product_status instanceof AppleProductStatus); $googlepay_product_status = $container->get('googlepay.helpers.apm-product-status'); assert($googlepay_product_status instanceof GoogleProductStatus); return new PaymentMethodsEligibilityService($container->get('api.merchant.country'), $container->get('ppcp-local-apms.eligibility.check'), $container->get('settings.service.merchant_capabilities'), $container->get('wcgateway.helper.dcc-product-status'), $container->get('axo.eligibility.check'), $container->get('card-fields.eligibility.check'), $applepay_product_status->is_active() && $container->get('applepay.eligible'), $googlepay_product_status->is_active() && $container->get('googlepay.eligible')); }, 'settings.service.todos_sorting' => static function (ContainerInterface $container): TodosSortingAndFilteringService { return new TodosSortingAndFilteringService($container->get('settings.data.todos')); }, 'settings.service.gateway-redirect' => static function (): GatewayRedirectService { return new GatewayRedirectService(); }, 'settings.services.loading-screen-service' => static function (ContainerInterface $container): LoadingScreenService { return new LoadingScreenService(); }, /** * Returns a list of all payment gateway IDs created by this plugin. * * @returns string[] The list of all gateway IDs. */ 'settings.config.all-gateway-ids' => static function (): array { return array(PayPalGateway::ID, CardButtonGateway::ID, CreditCardGateway::ID, AxoGateway::ID, ApplePayGateway::ID, GooglePayGateway::ID, PWCGateway::ID, BancontactGateway::ID, BlikGateway::ID, EPSGateway::ID, IDealGateway::ID, MyBankGateway::ID, P24Gateway::ID, TrustlyGateway::ID, MultibancoGateway::ID, PayUponInvoiceGateway::ID, OXXOGateway::ID); }, 'settings.service.branded-experience.activation-detector' => static function (): ActivationDetector { return new ActivationDetector(); }, 'settings.service.branded-experience.path-repository' => static function (ContainerInterface $container): PathRepository { return new PathRepository($container->get('settings.service.branded-experience.activation-detector'), $container->get('settings.data.general')); }, 'settings.merchant-details' => static function (ContainerInterface $container): MerchantDetails { $data = $container->get('settings.data.general'); assert($data instanceof GeneralSettings); $merchant_country = $data->get_merchant_country(); $woo_data = $data->get_woo_settings(); $eligibility_checks = $container->get('wcgateway.feature-eligibility.list'); return new MerchantDetails($merchant_country, $woo_data['country'], $eligibility_checks); }, 'settings.migration.bcdc-override-check' => static function (): callable { return static fn(): bool => (bool) get_option(PaymentSettingsMigration::OPTION_NAME_BCDC_MIGRATION_OVERRIDE); }, );