g (on mobile, ...) and sometimes not returning back.
*/
'wcgateway.funding-sources-without-redirect' => static function (ContainerInterface $container): array {
return array('paypal', 'paylater', 'venmo', 'card');
},
'wcgateway.checkout.address-preset' => static function (ContainerInterface $container): CheckoutPayPalAddressPreset {
return new CheckoutPayPalAddressPreset($container->get('session.handler'));
},
'wcgateway.asset_getter' => static function (ContainerInterface $container): AssetGetter {
$factory = $container->get('assets.asset_getter_factory');
assert($factory instanceof AssetGetterFactory);
return $factory->for_module('ppcp-wc-gateway');
},
'wcgateway.endpoint.return-url' => static function (ContainerInterface $container): ReturnUrlEndpoint {
$gateway = $container->get('wcgateway.paypal-gateway');
$endpoint = $container->get('api.endpoint.order');
return new ReturnUrlEndpoint($gateway, $endpoint, $container->get('session.handler'), $container->get('woocommerce.logger.woocommerce'), $container->get('api.helper.return-url-secret'));
},
'wcgateway.payer-action-return-forwarder' => static function (ContainerInterface $container): PayerActionReturnForwarder {
return new PayerActionReturnForwarder($container->get('session.handler'), $container->get('http.redirector'));
},
'wcgateway.endpoint.refresh-feature-status' => static function (ContainerInterface $container): RefreshFeatureStatusEndpoint {
return new RefreshFeatureStatusEndpoint($container->get('wcgateway.settings'), new Cache('ppcp-timeout'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.transaction-url-sandbox' => static function (ContainerInterface $container): string {
return 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_view-a-trans&id=%s';
},
'wcgateway.transaction-url-live' => static function (ContainerInterface $container): string {
return 'https://www.paypal.com/cgi-bin/webscr?cmd=_view-a-trans&id=%s';
},
'wcgateway.soft-descriptor' => static function (ContainerInterface $container): string {
$settings_provider = $container->get('settings.settings-provider');
return $settings_provider->soft_descriptor();
},
'wcgateway.transaction-url-provider' => static function (ContainerInterface $container): TransactionUrlProvider {
$sandbox_url_base = $container->get('wcgateway.transaction-url-sandbox');
$live_url_base = $container->get('wcgateway.transaction-url-live');
return new TransactionUrlProvider($sandbox_url_base, $live_url_base, $container->get('settings.environment'));
},
'wcgateway.configuration.card-configuration' => static function (ContainerInterface $container): CardPaymentsConfiguration {
return new CardPaymentsConfiguration($container->get('settings.connection-state'), $container->get('settings.settings-provider'), $container->get('api.helpers.dccapplies'), $container->get('wcgateway.helper.dcc-product-status'), $container->get('api.shop.country'));
},
'wcgateway.helper.dcc-product-status' => static function (ContainerInterface $container): DCCProductStatus {
return new DCCProductStatus($container->get('settings.flag.is-connected'), $container->get('api.endpoint.partners'), $container->get('api.helper.failure-registry'), $container->get('api.helper.product-status-result-cache'), $container->get('api.helpers.dccapplies'));
},
'wcgateway.helper.refund-fees-updater' => static function (ContainerInterface $container): RefundFeesUpdater {
$order_endpoint = $container->get('api.endpoint.order');
$logger = $container->get('woocommerce.logger.woocommerce');
return new RefundFeesUpdater($order_endpoint, $logger);
},
'wcgateway.helper.fees-updater' => static function (ContainerInterface $container): FeesUpdater {
return new FeesUpdater($container->get('api.endpoint.orders'), $container->get('api.factory.capture'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.helper.resumed-order-shipping-restorer' => static function (ContainerInterface $container): ResumedOrderShippingRestorer {
return new ResumedOrderShippingRestorer($container->get('woocommerce.logger.woocommerce'));
},
'button.helper.messages-disclaimers' => static function (ContainerInterface $container): MessagesDisclaimers {
return new MessagesDisclaimers($container->get('api.shop.country'));
},
'wcgateway.funding-source.renderer' => function (ContainerInterface $container): FundingSourceRenderer {
return new FundingSourceRenderer($container->get('settings.settings-provider'), array_merge($container->get('wcgateway.all-funding-sources'), $container->get('wcgateway.extra-funding-sources')));
},
'wcgateway.payment-method-title-enricher' => static function (ContainerInterface $container): PaymentMethodTitleEnricher {
return new PaymentMethodTitleEnricher($container->get('wcgateway.asset_getter'));
},
'wcgateway.checkout-helper' => static function (ContainerInterface $container): CheckoutHelper {
return new CheckoutHelper();
},
'wcgateway.fraudnet-source-website-id' => static function (ContainerInterface $container): FraudNetSourceWebsiteId {
return new FraudNetSourceWebsiteId($container->get('api.merchant_id'));
},
'wcgateway.fraudnet' => static function (ContainerInterface $container): FraudNet {
$source_website_id = $container->get('wcgateway.fraudnet-source-website-id');
return new FraudNet((string) $source_website_id());
},
'wcgateway.pay-upon-invoice-helper' => static function (ContainerInterface $container): PayUponInvoiceHelper {
return new PayUponInvoiceHelper($container->get('wcgateway.checkout-helper'), $container->get('api.shop.country'), $container->get('settings.data.payment'));
},
'wcgateway.pay-upon-invoice-product-status' => static function (ContainerInterface $container): PayUponInvoiceProductStatus {
return new PayUponInvoiceProductStatus($container->get('settings.flag.is-connected'), $container->get('api.endpoint.partners'), $container->get('api.helper.failure-registry'), $container->get('api.helper.product-status-result-cache'));
},
'wcgateway.installments-product-status' => static function (ContainerInterface $container): InstallmentsProductStatus {
return new InstallmentsProductStatus($container->get('settings.flag.is-connected'), $container->get('api.endpoint.partners'), $container->get('api.helper.failure-registry'), $container->get('api.helper.product-status-result-cache'));
},
'wcgateway.pwc-product-status' => static function (ContainerInterface $container): PWCProductStatus {
return new PWCProductStatus($container->get('settings.flag.is-connected'), $container->get('api.endpoint.partners'), $container->get('api.helper.failure-registry'), $container->get('api.helper.product-status-result-cache'));
},
'wcgateway.logging.is-enabled' => static function (ContainerInterface $container): bool {
$settings = $container->get('settings.data.settings');
assert($settings instanceof SettingsModel);
$is_enabled = $settings->get_enable_logging();
if (!$is_enabled) {
$state = $container->get('settings.connection-state');
assert($state instanceof ConnectionState);
$is_enabled = $state->is_onboarding();
}
/**
* Whether the logging of the plugin errors/events is enabled.
*
* @param bool $is_enabled Whether the logging is enabled.
*/
return apply_filters('woocommerce_paypal_payments_is_logging_enabled', $is_enabled);
},
'wcgateway.use-place-order-button' => function (ContainerInterface $container): bool {
/**
* Whether to use the standard "Place order" button with redirect to PayPal instead of the PayPal smart buttons.
*/
return apply_filters('woocommerce_paypal_payments_use_place_order_button', \false);
},
'wcgateway.helper.vaulting-scope' => static function (ContainerInterface $container): bool {
try {
$token = $container->get('api.bearer')->bearer();
return $token->vaulting_available();
} catch (RuntimeException $exception) {
return \false;
}
},
'button.helper.vaulting-label' => static function (ContainerInterface $container): string {
$vaulting_label = '';
if (!$container->get('wcgateway.helper.vaulting-scope')) {
$vaulting_label .= sprintf(
// translators: %1$s and %2$s are the opening and closing of HTML tag.
__(' To use vaulting features, you must %1$senable vaulting on your account%2$s.', 'woocommerce-paypal-payments'),
'',
''
);
}
$vaulting_label .= '
';
$vaulting_label .= sprintf(
// translators: %1$s, %2$s, %3$s and %4$s are the opening and closing of HTML tag.
__('This will disable all %1$sPay Later%2$s features and %3$sAlternative Payment Methods%4$s on your site.', 'woocommerce-paypal-payments'),
'',
'',
'',
''
);
$vaulting_label .= '
';
return $vaulting_label;
},
'wcgateway.settings.dcc-gateway-title.default' => static function (ContainerInterface $container): string {
return did_action('init') ? __('Debit & Credit Cards', 'woocommerce-paypal-payments') : 'Debit & Credit Cards';
},
'wcgateway.settings.card_billing_data_mode.default' => static function (ContainerInterface $container): string {
return $container->get('api.shop.is-latin-america') ? \WooCommerce\PayPalCommerce\WcGateway\CardBillingMode::MINIMAL_INPUT : \WooCommerce\PayPalCommerce\WcGateway\CardBillingMode::USE_WC;
},
'wcgateway.settings.card_billing_data_mode' => static function (ContainerInterface $container): string {
$settings = $container->get('wcgateway.settings');
assert($settings instanceof ContainerInterface);
return $settings->has('card_billing_data_mode') ? (string) $settings->get('card_billing_data_mode') : $container->get('wcgateway.settings.card_billing_data_mode.default');
},
'wcgateway.settings.allow_card_button_gateway.default' => static function (ContainerInterface $container): bool {
return $container->get('api.shop.is-latin-america');
},
'wcgateway.settings.allow_card_button_gateway' => static function (ContainerInterface $container): bool {
$settings = $container->get('wcgateway.settings');
assert($settings instanceof ContainerInterface);
return apply_filters('woocommerce_paypal_payments_enable_standard_card_button_gateway_settings', $settings->has('allow_card_button_gateway') ? (bool) $settings->get('allow_card_button_gateway') : $container->get('wcgateway.settings.allow_card_button_gateway.default'));
},
'wcgateway.settings.has_enabled_separate_button_gateways' => static function (ContainerInterface $container): bool {
return (bool) $container->get('wcgateway.settings.allow_card_button_gateway');
},
'wcgateway.settings.should-disable-fraudnet-checkbox' => static function (ContainerInterface $container): bool {
$pui_helper = $container->get('wcgateway.pay-upon-invoice-helper');
assert($pui_helper instanceof PayUponInvoiceHelper);
if ($pui_helper->is_pui_gateway_enabled()) {
return \true;
}
return \false;
},
'wcgateway.settings.fraudnet-label' => static function (ContainerInterface $container): string {
$label = sprintf(
// translators: %1$s and %2$s are the opening and closing of HTML tag.
__('Manage online risk with %1$sFraudNet%2$s.', 'woocommerce-paypal-payments'),
'',
''
);
if ('DE' === $container->get('api.shop.country')) {
$label .= '
' . sprintf(
// translators: %1$s and %2$s are the opening and closing of HTML tag.
__('Required when %1$sPay upon Invoice%2$s is used.', 'woocommerce-paypal-payments'),
'',
''
);
}
return $label;
},
'wcgateway.enable-dcc-url-sandbox' => static function (ContainerInterface $container): string {
return 'https://www.sandbox.paypal.com/bizsignup/entry?product=ppcp';
},
'wcgateway.enable-dcc-url-live' => static function (ContainerInterface $container): string {
return 'https://www.paypal.com/bizsignup/entry?product=ppcp';
},
'wcgateway.enable-pui-url-sandbox' => static function (ContainerInterface $container): string {
return 'https://www.sandbox.paypal.com/bizsignup/entry?country.x=DE&product=payment_methods&capabilities=PAY_UPON_INVOICE';
},
'wcgateway.enable-pui-url-live' => static function (ContainerInterface $container): string {
return 'https://www.paypal.com/bizsignup/entry?country.x=DE&product=payment_methods&capabilities=PAY_UPON_INVOICE';
},
'wcgateway.enable-reference-transactions-url-sandbox' => static function (ContainerInterface $container): string {
return 'https://www.sandbox.paypal.com/bizsignup/entry?product=ADVANCED_VAULTING';
},
'wcgateway.enable-reference-transactions-url-live' => static function (ContainerInterface $container): string {
return 'https://www.paypal.com/bizsignup/entry?product=ADVANCED_VAULTING';
},
'wcgateway.settings.connection.dcc-status-text' => static function (ContainerInterface $container): string {
$is_connected = $container->get('settings.flag.is-connected');
if (!$is_connected) {
return '';
}
$dcc_product_status = $container->get('wcgateway.helper.dcc-product-status');
assert($dcc_product_status instanceof DCCProductStatus);
$environment = $container->get('settings.environment');
assert($environment instanceof Environment);
$dcc_enabled = $dcc_product_status->is_active();
$enabled_status_text = esc_html__('Status: Available', 'woocommerce-paypal-payments');
$disabled_status_text = esc_html__('Status: Not yet enabled', 'woocommerce-paypal-payments');
$dcc_button_text = $dcc_enabled ? esc_html__('Settings', 'woocommerce-paypal-payments') : esc_html__('Enable Advanced Card Payments', 'woocommerce-paypal-payments');
$enable_dcc_url = $environment->is_production() ? $container->get('wcgateway.enable-dcc-url-live') : $container->get('wcgateway.enable-dcc-url-sandbox');
$dcc_button_url = $dcc_enabled ? admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway') : $enable_dcc_url;
return sprintf('%1$s %2$s
%5$s
', $dcc_enabled ? $enabled_status_text : $disabled_status_text, $dcc_enabled ? '' : '', $dcc_enabled ? '_self' : '_blank', esc_url($dcc_button_url), esc_html($dcc_button_text));
},
'wcgateway.settings.connection.reference-transactions-status-text' => static function (ContainerInterface $container): string {
$environment = $container->get('settings.environment');
assert($environment instanceof Environment);
$reference_transaction_status = $container->get('api.reference-transaction-status');
assert($reference_transaction_status instanceof ReferenceTransactionStatus);
$enabled = $reference_transaction_status->reference_transaction_enabled();
$enabled_status_text = esc_html__('Status: Available', 'woocommerce-paypal-payments');
$disabled_status_text = esc_html__('Status: Not yet enabled', 'woocommerce-paypal-payments');
$button_text = $enabled ? esc_html__('Settings', 'woocommerce-paypal-payments') : esc_html__('Enable saving PayPal & Venmo', 'woocommerce-paypal-payments');
$enable_url = $environment->is_production() ? $container->get('wcgateway.enable-reference-transactions-url-live') : $container->get('wcgateway.enable-reference-transactions-url-sandbox');
$button_url = $enabled ? admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway#field-paypal_saved_payments') : $enable_url;
return sprintf('%1$s %2$s
%5$s
', $enabled ? $enabled_status_text : $disabled_status_text, $enabled ? '' : '', $enabled ? '_self' : '_blank', esc_url($button_url), esc_html($button_text));
},
'wcgateway.settings.connection.pui-status-text' => static function (ContainerInterface $container): string {
$is_connected = $container->get('settings.flag.is-connected');
if (!$is_connected) {
return '';
}
$pui_product_status = $container->get('wcgateway.pay-upon-invoice-product-status');
assert($pui_product_status instanceof PayUponInvoiceProductStatus);
$environment = $container->get('settings.environment');
assert($environment instanceof Environment);
$pui_enabled = $pui_product_status->is_active();
$enabled_status_text = esc_html__('Status: Available', 'woocommerce-paypal-payments');
$disabled_status_text = esc_html__('Status: Not yet enabled', 'woocommerce-paypal-payments');
$enable_pui_url = $environment->is_production() ? $container->get('wcgateway.enable-pui-url-live') : $container->get('wcgateway.enable-pui-url-sandbox');
$pui_button_url = $pui_enabled ? admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-pay-upon-invoice-gateway') : $enable_pui_url;
$pui_button_text = $pui_enabled ? esc_html__('Settings', 'woocommerce-paypal-payments') : esc_html__('Enable Pay upon Invoice', 'woocommerce-paypal-payments');
return sprintf('%1$s %2$s
%5$s
', $pui_enabled ? $enabled_status_text : $disabled_status_text, $pui_enabled ? '' : '', $pui_enabled ? '_self' : '_blank', esc_url($pui_button_url), esc_html($pui_button_text));
},
'installments.status-cache' => static function (ContainerInterface $container): Cache {
return new Cache('ppcp-paypal-installments-status-cache');
},
'wcgateway.button.locations' => static function (ContainerInterface $container): array {
return array('product' => 'Single Product', 'cart' => 'Classic Cart', 'checkout' => 'Classic Checkout', 'mini-cart' => 'Mini Cart');
},
'wcgateway.button.default-locations' => static function (ContainerInterface $container): array {
$button_locations = $container->get('wcgateway.button.locations');
unset($button_locations['mini-cart']);
return array_keys($button_locations);
},
'wcgateway.button.recommended-styling-notice' => static function (ContainerInterface $container): string {
if (CartCheckoutDetector::has_block_checkout()) {
$block_checkout_page_string_html = '' . __('Checkout block', 'woocommerce-paypal-payments') . '';
} else {
$block_checkout_page_string_html = __('Checkout block', 'woocommerce-paypal-payments');
}
$notice_content = sprintf(
/* translators: %1$s: URL to the Checkout edit page. */
__('Important: The Cart & Express Checkout Smart Button Stylings may be controlled by the %1$s configuration.', 'woocommerce-paypal-payments'),
$block_checkout_page_string_html
);
return '';
},
'wcgateway.settings.pay-later.messaging-locations' => static function (ContainerInterface $container): array {
$button_locations = $container->get('wcgateway.button.locations');
unset($button_locations['mini-cart']);
return array_merge($button_locations, array('shop' => did_action('init') ? __('Shop', 'woocommerce-paypal-payments') : 'Shop', 'home' => did_action('init') ? __('Home', 'woocommerce-paypal-payments') : 'Home'));
},
'wcgateway.settings.pay-later.default-messaging-locations' => static function (ContainerInterface $container): array {
$locations = $container->get('wcgateway.settings.pay-later.messaging-locations');
unset($locations['home']);
return array_keys($locations);
},
'wcgateway.settings.pay-later.button-locations' => static function (ContainerInterface $container): array {
$settings_provider = $container->get('settings.settings-provider');
assert($settings_provider instanceof SettingsProvider);
$button_locations = $container->get('wcgateway.button.locations');
$smart_button_selected_locations = $settings_provider->smart_button_locations();
return array_intersect_key($button_locations, array_flip($smart_button_selected_locations));
},
'wcgateway.settings.pay-later.default-button-locations' => static function (ContainerInterface $container): array {
return $container->get('wcgateway.button.default-locations');
},
'wcgateway.ppcp-gateways' => static function (ContainerInterface $container): array {
return array(PayPalGateway::ID, CreditCardGateway::ID, PayUponInvoiceGateway::ID, CardButtonGateway::ID, OXXOGateway::ID, AxoGateway::ID, GooglePayGateway::ID, ApplePayGateway::ID);
},
'wcgateway.gateway-repository' => static function (ContainerInterface $container): GatewayRepository {
return new GatewayRepository($container->get('wcgateway.ppcp-gateways'));
},
'wcgateway.is-fraudnet-enabled' => static function (ContainerInterface $container): bool {
return \true;
},
'wcgateway.fraudnet-assets' => function (ContainerInterface $container): FraudNetAssets {
return new FraudNetAssets($container->get('wcgateway.asset_getter'), $container->get('ppcp.asset-version'), $container->get('wcgateway.fraudnet'), $container->get('settings.environment'), $container->get('settings.settings-provider'), $container->get('wcgateway.gateway-repository'), $container->get('session.handler'), $container->get('wcgateway.is-fraudnet-enabled'), $container->get('button.helper.context'));
},
'wcgateway.wp-paypal-locales-map' => static function (ContainerInterface $container): array {
return apply_filters('woocommerce_paypal_payments_button_locales', array('' => __('Browser language', 'woocommerce-paypal-payments'), 'ar_DZ' => __('Arabic (Algeria)', 'woocommerce-paypal-payments'), 'ar_BH' => __('Arabic (Bahrain)', 'woocommerce-paypal-payments'), 'ar_EG' => __('Arabic (Egypt)', 'woocommerce-paypal-payments'), 'ar_JO' => __('Arabic (Jordan)', 'woocommerce-paypal-payments'), 'ar_KW' => __('Arabic (Kuwait)', 'woocommerce-paypal-payments'), 'ar_MA' => __('Arabic (Morocco)', 'woocommerce-paypal-payments'), 'ar_SA' => __('Arabic (Saudi Arabia)', 'woocommerce-paypal-payments'), 'cs_CZ' => __('Czech', 'woocommerce-paypal-payments'), 'zh_CN' => __('Chinese (Simplified)', 'woocommerce-paypal-payments'), 'zh_HK' => __('Chinese (Hong Kong)', 'woocommerce-paypal-payments'), 'zh_TW' => __('Chinese (Traditional)', 'woocommerce-paypal-payments'), 'da_DK' => __('Danish', 'woocommerce-paypal-payments'), 'nl_NL' => __('Dutch', 'woocommerce-paypal-payments'), 'en_AU' => __('English (Australia)', 'woocommerce-paypal-payments'), 'en_GB' => __('English (United Kingdom)', 'woocommerce-paypal-payments'), 'en_US' => __('English (United States)', 'woocommerce-paypal-payments'), 'fi_FI' => __('Finnish', 'woocommerce-paypal-payments'), 'fr_CA' => __('French (Canada)', 'woocommerce-paypal-payments'), 'fr_FR' => __('French (France)', 'woocommerce-paypal-payments'), 'de_DE' => __('German (Germany)', 'woocommerce-paypal-payments'), 'de_CH' => __('German (Switzerland)', 'woocommerce-paypal-payments'), 'de_AT' => __('German (Austria)', 'woocommerce-paypal-payments'), 'de_LU' => __('German (Luxembourg)', 'woocommerce-paypal-payments'), 'el_GR' => __('Greek', 'woocommerce-paypal-payments'), 'he_IL' => __('Hebrew', 'woocommerce-paypal-payments'), 'hu_HU' => __('Hungarian', 'woocommerce-paypal-payments'), 'id_ID' => __('Indonesian', 'woocommerce-paypal-payments'), 'it_IT' => __('Italian', 'woocommerce-paypal-payments'), 'ja_JP' => __('Japanese', 'woocommerce-paypal-payments'), 'ko_KR' => __('Korean', 'woocommerce-paypal-payments'), 'no_NO' => __('Norwegian', 'woocommerce-paypal-payments'), 'es_ES' => __('Spanish (Spain)', 'woocommerce-paypal-payments'), 'es_MX' => __('Spanish (Mexico)', 'woocommerce-paypal-payments'), 'pl_PL' => __('Polish', 'woocommerce-paypal-payments'), 'pt_BR' => __('Portuguese (Brazil)', 'woocommerce-paypal-payments'), 'pt_PT' => __('Portuguese (Portugal)', 'woocommerce-paypal-payments'), 'ru_RU' => __('Russian', 'woocommerce-paypal-payments'), 'sk_SK' => __('Slovak', 'woocommerce-paypal-payments'), 'sv_SE' => __('Swedish', 'woocommerce-paypal-payments'), 'th_TH' => __('Thai', 'woocommerce-paypal-payments')));
},
'wcgateway.endpoint.capture-card-payment' => static function (ContainerInterface $container): CaptureCardPayment {
return new CaptureCardPayment($container->get('api.host'), $container->get('api.bearer'), $container->get('api.factory.order'), $container->get('api.factory.purchase-unit'), $container->get('settings.settings-provider'), $container->get('wcgateway.builder.experience-context'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.endpoint.capture-paypal-payment' => static function (ContainerInterface $container): CapturePayPalPayment {
return new CapturePayPalPayment($container->get('api.host'), $container->get('api.bearer'), $container->get('api.factory.order'), $container->get('api.factory.purchase-unit'), $container->get('settings.settings-provider'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.settings.wc-tasks.simple-redirect-task-factory' => static function (): SimpleRedirectTaskFactoryInterface {
return new SimpleRedirectTaskFactory();
},
'wcgateway.settings.wc-tasks.task-registrar' => static function (): TaskRegistrarInterface {
return new TaskRegistrar();
},
'wcgateway.settings.wc-tasks.pay-later-task-config' => static function (ContainerInterface $container): array {
$section_id = PayPalGateway::ID;
if ($container->has('paylater-configurator.is-available') && $container->get('paylater-configurator.is-available')) {
return array(array('id' => 'pay-later-messaging-task', 'title' => __('Configure PayPal Pay Later messaging', 'woocommerce-paypal-payments'), 'description' => __('Decide where you want dynamic Pay Later messaging to show up and how you want it to look on your site.', 'woocommerce-paypal-payments'), 'redirect_url' => admin_url("admin.php?page=wc-settings&tab=checkout§ion={$section_id}")));
}
return array();
},
'wcgateway.settings.wc-tasks.connect-task-config' => static function (ContainerInterface $container): array {
$is_connected = $container->get('settings.flag.is-connected');
$is_current_country_send_only = $container->get('wcgateway.is-send-only-country');
if (!$is_connected && !$is_current_country_send_only) {
return array(array('id' => 'connect-to-paypal-task', 'title' => __('Connect PayPal to complete setup', 'woocommerce-paypal-payments'), 'description' => __('PayPal Payments is almost ready. To get started, connect your account with the Activate PayPal Payments button.', 'woocommerce-paypal-payments'), 'redirect_url' => admin_url('admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway')));
}
return array();
},
'wcgateway.settings.wc-tasks.working-capital-config' => static function (ContainerInterface $container): array {
$settings_provider = $container->get('settings.settings-provider');
assert($settings_provider instanceof SettingsProvider);
$settings_provider = $container->get('settings.settings-provider');
assert($settings_provider instanceof SettingsProvider);
$is_working_capital_feature_flag_enabled = apply_filters(
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores -- feature flags use this convention
'woocommerce.feature-flags.woocommerce_paypal_payments.working_capital_enabled',
\true
);
$is_working_capital_eligible = $container->get('api.shop.country') === 'US' && $settings_provider->stay_updated();
if (!$settings_provider->merchant_connected() || !$is_working_capital_feature_flag_enabled || !$is_working_capital_eligible) {
return array();
}
return array(array('id' => 'ppcp-working-capital-task', 'title' => __('Fuel your business growth with a PayPal Working Capital loan. Check eligibility', 'woocommerce-paypal-payments'), 'description' => '', 'redirect_url' => 'https://www.paypal.com/us/business/financial-services/working-capital?partner_camp_id=woocommerce_ppwc'));
},
'wcgateway.settings.wc-tasks.task-config-services' => static function (): array {
return array('wcgateway.settings.wc-tasks.pay-later-task-config', 'wcgateway.settings.wc-tasks.connect-task-config', 'wcgateway.settings.wc-tasks.working-capital-config');
},
/**
* A configuration for simple redirect wc tasks.
*
* @returns array
*/
'wcgateway.settings.wc-tasks.simple-redirect-tasks-config' => static function (ContainerInterface $container): array {
$list_of_config = array();
$task_config_services = $container->get('wcgateway.settings.wc-tasks.task-config-services');
foreach ($task_config_services as $service_id) {
if ($container->has($service_id)) {
$task_config = $container->get($service_id);
$list_of_config = array_merge($list_of_config, $task_config);
}
}
return $list_of_config;
},
/**
* Retrieves the list of simple redirect task instances.
*
* @returns SimpleRedirectTask[]
*/
'wcgateway.settings.wc-tasks.simple-redirect-tasks' => static function (ContainerInterface $container): array {
$simple_redirect_tasks_config = $container->get('wcgateway.settings.wc-tasks.simple-redirect-tasks-config');
$simple_redirect_task_factory = $container->get('wcgateway.settings.wc-tasks.simple-redirect-task-factory');
assert($simple_redirect_task_factory instanceof SimpleRedirectTaskFactoryInterface);
$simple_redirect_tasks = array();
foreach ($simple_redirect_tasks_config as $config) {
$id = $config['id'] ?? '';
$title = $config['title'] ?? '';
$description = $config['description'] ?? '';
$redirect_url = $config['redirect_url'] ?? '';
$simple_redirect_tasks[] = $simple_redirect_task_factory->create_task($id, $title, $description, $redirect_url);
}
return $simple_redirect_tasks;
},
'wcgateway.settings.inbox-note-factory' => static function (): InboxNoteFactory {
return new InboxNoteFactory();
},
'wcgateway.settings.inbox-note-registrar' => static function (ContainerInterface $container): InboxNoteRegistrar {
return new InboxNoteRegistrar($container->get('wcgateway.settings.inbox-notes'), $container->get('ppcp.base-name'));
},
/**
* Retrieves the list of inbox note instances.
*
* @returns InboxNoteInterface[]
*/
'wcgateway.settings.inbox-notes' => static function (ContainerInterface $container): array {
$inbox_note_factory = $container->get('wcgateway.settings.inbox-note-factory');
assert($inbox_note_factory instanceof InboxNoteFactory);
$settings = $container->get('wcgateway.settings');
assert($settings instanceof Settings);
$settings_model = $container->get('settings.data.settings');
assert($settings_model instanceof SettingsModel);
$messages_apply = $container->get('button.helper.messages-apply');
assert($messages_apply instanceof MessagesApply);
$settings_provider = $container->get('settings.settings-provider');
assert($settings_provider instanceof SettingsProvider);
$is_working_capital_feature_flag_enabled = apply_filters(
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores -- feature flags use this convention
'woocommerce.feature-flags.woocommerce_paypal_payments.working_capital_enabled',
\true
);
return array($inbox_note_factory->create_note(__('PayPal Working Capital', 'woocommerce-paypal-payments'), __('Business loans from $1k to $230k for first-time borrowers. Looking to fuel your business growth? With a PayPal Working Capital loan, approved loans are funded in minutes and repaid as a share of your sales. Minimum payment required every 90 days. The lender for PayPal Working Capital is WebBank.', 'woocommerce-paypal-payments'), Note::E_WC_ADMIN_NOTE_INFORMATIONAL, 'ppcp-working-capital-inbox-note', Note::E_WC_ADMIN_NOTE_UNACTIONED, $is_working_capital_feature_flag_enabled && $container->get('api.shop.country') === 'US' && $settings_model->get_stay_updated(), new InboxNoteAction('learn_more', __('Learn More', 'woocommerce-paypal-payments'), 'https://www.paypal.com/us/business/financial-services/working-capital?partner_camp_id=woocommerce_ppwc', Note::E_WC_ADMIN_NOTE_UNACTIONED, \true)));
},
'wcgateway.void-button.assets' => function (ContainerInterface $container): VoidButtonAssets {
return new VoidButtonAssets($container->get('wcgateway.asset_getter'), $container->get('ppcp.asset-version'), $container->get('api.endpoint.order.cached'), $container->get('wcgateway.processor.refunds'));
},
'wcgateway.void-button.endpoint' => function (ContainerInterface $container): VoidOrderEndpoint {
return new VoidOrderEndpoint($container->get('button.request-data'), $container->get('api.endpoint.order'), $container->get('wcgateway.processor.refunds'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.settings.admin-settings-enabled' => static function (ContainerInterface $container): bool {
return $container->has('settings.asset_getter');
},
'wcgateway.contact-module.eligibility.check' => static function (ContainerInterface $container): callable {
$feature_enabled = (bool) apply_filters(
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores -- feature flags use this convention
'woocommerce.feature-flags.woocommerce_paypal_payments.contact_module_enabled',
getenv('PCP_CONTACT_MODULE_ENABLED') !== '0'
);
/**
* Decides, whether the current merchant is eligible to use the
* "Contact Module" feature on this site.
*/
return static function () use ($feature_enabled, $container) {
if (!$feature_enabled) {
return \false;
}
$details = $container->get('settings.merchant-details');
assert($details instanceof MerchantDetails);
$enable_contact_module = 'US' === $details->get_merchant_country();
/**
* The contact module is enabled for US-based merchants by default.
* This filter provides the official way to opt-out of using it on this store.
*/
return (bool) apply_filters('woocommerce_paypal_payments_contact_module_enabled', $enable_contact_module);
};
},
/**
* Returns a centralized list of feature eligibility checks.
*
* This is a helper service which is used by the `MerchantDetails` class and
* should not be directly accessed.
*/
'wcgateway.feature-eligibility.list' => static function (ContainerInterface $container): array {
return array(FeaturesDefinition::FEATURE_SAVE_PAYPAL_AND_VENMO => $container->get('save-payment-methods.eligibility.check'), FeaturesDefinition::FEATURE_ADVANCED_CREDIT_AND_DEBIT_CARDS => $container->get('card-fields.eligibility.check'), FeaturesDefinition::FEATURE_GOOGLE_PAY => $container->get('googlepay.eligibility.check'), FeaturesDefinition::FEATURE_APPLE_PAY => $container->get('applepay.eligibility.check'), FeaturesDefinition::FEATURE_CONTACT_MODULE => $container->get('wcgateway.contact-module.eligibility.check'));
},
/**
* Returns a prefix for the site, ensuring the same site always gets the same prefix (unless the URL changes).
*/
'wcgateway.settings.invoice-prefix' => static function (ContainerInterface $container): string {
$site_url = get_site_url(get_current_blog_id());
$hash = md5($site_url);
$letters = preg_replace('~\d~', '', $hash) ?? '';
$prefix = substr($letters, 0, 6);
return $prefix ? $prefix . '-' : '';
},
/**
* Returns random 6 characters length alphabetic prefix, followed by a hyphen.
*/
'wcgateway.settings.invoice-prefix-random' => static function (ContainerInterface $container): string {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$prefix = '';
for ($i = 0; $i < 6; $i++) {
$prefix .= $characters[wp_rand(0, strlen($characters) - 1)];
}
return $prefix . '-';
},
'wcgateway.store-api.endpoint.cart' => static function (ContainerInterface $container): CartEndpoint {
return new CartEndpoint($container->get('wcgateway.store-api.factory.cart'), $container->get('woocommerce.logger.woocommerce'));
},
'wcgateway.store-api.factory.cart' => static function (ContainerInterface $container): CartFactory {
return new CartFactory($container->get('wcgateway.store-api.factory.cart-totals'), $container->get('wcgateway.store-api.factory.shipping-rates'));
},
'wcgateway.store-api.factory.cart-totals' => static function (ContainerInterface $container): CartTotalsFactory {
return new CartTotalsFactory($container->get('wcgateway.store-api.factory.money'));
},
'wcgateway.store-api.factory.shipping-rates' => static function (ContainerInterface $container): ShippingRatesFactory {
return new ShippingRatesFactory($container->get('wcgateway.store-api.factory.money'));
},
'wcgateway.store-api.factory.money' => static function (ContainerInterface $container): MoneyFactory {
return new MoneyFactory();
},
'wcgateway.shipping.callback.endpoint' => static function (ContainerInterface $container): ShippingCallbackEndpoint {
return new ShippingCallbackEndpoint($container->get('wcgateway.store-api.endpoint.cart'), $container->get('api.factory.amount'), $container->get('woocommerce.logger.woocommerce'), $container->get('button.session.storage.card-data.transient'));
},
'wcgateway.shipping.callback.factory.url' => static function (ContainerInterface $container): ShippingCallbackUrlFactory {
return new ShippingCallbackUrlFactory($container->get('wcgateway.store-api.endpoint.cart'), $container->get('wcgateway.shipping.callback.endpoint'));
},
'wcgateway.server-side-shipping-callback-enabled' => static function (ContainerInterface $container): bool {
// SSSC depends on Woo's Store API, which currently doesn't work with plain permalinks because of the rest_get_url_prefix bug.
$has_plain_permalinks = empty(get_option('permalink_structure'));
$last_webhook_storage = $container->get('webhook.last-webhook-storage');
assert($last_webhook_storage instanceof WebhookEventStorage);
// Not directly related, but if webhooks are not arriving then SSSC probably is not accessible too.
$webhooks_working = !$last_webhook_storage->is_empty();
$enabled = getenv('PCP_SERVER_SIDE_SHIPPING_CALLBACK_ENABLED') !== '0' && !$has_plain_permalinks && $webhooks_working;
return apply_filters(
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
'woocommerce.feature-flags.woocommerce_paypal_payments.server_side_shipping_callback_enabled',
$enabled
);
},
'wcgateway.appswitch-enabled' => static function (ContainerInterface $container): bool {
return apply_filters(
// phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
'woocommerce.feature-flags.woocommerce_paypal_payments.appswitch_enabled',
getenv('PCP_APPSWITCH_ENABLED') !== '0'
);
},
);