/** * External dependencies */ import { __ } from '@wordpress/i18n'; import apiFetch from '@wordpress/api-fetch'; import { Fragment } from '@wordpress/element'; import { filter, some } from 'lodash'; import interpolateComponents from 'interpolate-components'; import { getAdminLink, WC_ASSET_URL as wcAssetUrl, } from '@woocommerce/wc-admin-settings'; import { Link } from '@woocommerce/components'; import { WC_ADMIN_NAMESPACE } from '@woocommerce/data'; /** * Internal dependencies */ import Bacs from './bacs'; import BacsIcon from './images/bacs'; import CodIcon from './images/cod'; import { createNoticesFromResponse } from '../../../lib/notices'; import Stripe from './stripe'; import Square from './square'; import WCPay from './wcpay'; import WCPayIcon from './images/wcpay'; import PayPal from './paypal'; import Klarna from './klarna'; import PayFast from './payfast'; import EWay from './eway'; import WCPayUsageModal from './wcpay-usage-modal'; export function installActivateAndConnectWcpay( resolve, reject, createNotice, installAndActivatePlugins ) { const errorMessage = __( 'There was an error connecting to WooCommerce Payments. Please try again or connect later in store settings.', 'woocommerce-admin' ); const connect = () => { apiFetch( { path: WC_ADMIN_NAMESPACE + '/plugins/connect-wcpay', method: 'POST', } ) .then( ( response ) => { window.location = response.connectUrl; } ) .catch( () => { createNotice( 'error', errorMessage ); reject(); } ); }; installAndActivatePlugins( [ 'woocommerce-payments' ] ) .then( () => connect() ) .catch( ( error ) => { createNoticesFromResponse( error ); reject(); } ); } export function getPaymentMethods( { activePlugins, countryCode, createNotice, installAndActivatePlugins, onboardingStatus, options, profileItems, } ) { const { stripeSupportedCountries = [], wcPayIsConnected = false, } = onboardingStatus; const hasCbdIndustry = some( profileItems.industry, { slug: 'cbd-other-hemp-derived-products', } ) || false; const methods = []; if ( window.wcAdminFeatures.wcpay ) { const tosLink = ( ); const tosPrompt = interpolateComponents( { mixedString: __( 'By clicking "Set up," you agree to the {{link}}Terms of Service{{/link}}', 'woocommerce-admin' ), components: { link: tosLink, }, } ); const wcPayDocLink = ( ); const wcPayDocPrompt = interpolateComponents( { mixedString: __( 'Setting up a store for a client? {{link}}Start here{{/link}}', 'woocommerce-admin' ), components: { link: wcPayDocLink, }, } ); const wcPaySettingsLink = ( { __( 'Settings', 'woocommerce-admin' ) } ); methods.push( { key: 'wcpay', title: __( 'WooCommerce Payments', 'woocommerce-admin' ), content: ( { __( 'Accept credit card payments the easy way! No setup fees. No ' + 'monthly fees. Just 2.9% + $0.30 per transaction ' + 'on U.S. issued cards. ', 'woocommerce-admin' ) } { wcPayIsConnected && wcPaySettingsLink } { ! wcPayIsConnected && { tosPrompt } } { profileItems.setup_client && { wcPayDocPrompt } } ), before: , onClick: ( resolve, reject ) => { return installActivateAndConnectWcpay( resolve, reject, createNotice, installAndActivatePlugins ); }, visible: [ 'US', 'PR' ].includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'woocommerce-payments' ], container: , isConfigured: wcPayIsConnected, isEnabled: options.woocommerce_woocommerce_payments_settings && options.woocommerce_woocommerce_payments_settings.enabled === 'yes', optionName: 'woocommerce_woocommerce_payments_settings', } ); } // Whether publishable and secret keys are filled for given mode. const isStripeConfigured = options.woocommerce_stripe_settings && ( options.woocommerce_stripe_settings.testmode === 'no' ? options.woocommerce_stripe_settings.publishable_key && options.woocommerce_stripe_settings.secret_key : options.woocommerce_stripe_settings.test_publishable_key && options.woocommerce_stripe_settings.test_secret_key ); methods.push( { key: 'stripe', title: __( 'Credit cards - powered by Stripe', 'woocommerce-admin' ), content: ( { __( 'Accept debit and credit cards in 135+ currencies, methods such as Alipay, ' + 'and one-touch checkout with Apple Pay.', 'woocommerce-admin' ) } ), before: , visible: stripeSupportedCountries.includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'woocommerce-gateway-stripe' ], container: , isConfigured: isStripeConfigured, isEnabled: options.woocommerce_stripe_settings && options.woocommerce_stripe_settings.enabled === 'yes', optionName: 'woocommerce_stripe_settings', }, { key: 'paypal', title: __( 'PayPal Checkout', 'woocommerce-admin' ), content: ( { __( "Safe and secure payments using credit cards or your customer's PayPal account.", 'woocommerce-admin' ) } ), before: , visible: ! hasCbdIndustry, plugins: [ 'woocommerce-gateway-paypal-express-checkout' ], container: , isConfigured: options.woocommerce_ppec_paypal_settings && ( ( options.woocommerce_ppec_paypal_settings.reroute_requests && options.woocommerce_ppec_paypal_settings.email ) || ( options.woocommerce_ppec_paypal_settings.api_username && options.woocommerce_ppec_paypal_settings .api_password ) ), isEnabled: options.woocommerce_ppec_paypal_settings && options.woocommerce_ppec_paypal_settings.enabled === 'yes', optionName: 'woocommerce_ppec_paypal_settings', }, { key: 'klarna_checkout', title: __( 'Klarna Checkout', 'woocommerce-admin' ), content: __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce-admin' ), before: ( ), visible: [ 'SE', 'FI', 'NO', 'NL' ].includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'klarna-checkout-for-woocommerce' ], container: , // @todo This should check actual Klarna connection information. isConfigured: activePlugins.includes( 'klarna-checkout-for-woocommerce' ), isEnabled: options.woocommerce_kco_settings && options.woocommerce_kco_settings.enabled === 'yes', optionName: 'woocommerce_kco_settings', }, { key: 'klarna_payments', title: __( 'Klarna Payments', 'woocommerce-admin' ), content: __( 'Choose the payment that you want, pay now, pay later or slice it. No credit card numbers, no passwords, no worries.', 'woocommerce-admin' ), before: ( ), visible: [ 'DK', 'DE', 'AT' ].includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'klarna-payments-for-woocommerce' ], container: , // @todo This should check actual Klarna connection information. isConfigured: activePlugins.includes( 'klarna-payments-for-woocommerce' ), isEnabled: options.woocommerce_klarna_payments_settings && options.woocommerce_klarna_payments_settings.enabled === 'yes', optionName: 'woocommerce_klarna_payments_settings', }, { key: 'square', title: __( 'Square', 'woocommerce-admin' ), content: ( { __( 'Securely accept credit and debit cards with one low rate, no surprise fees (custom rates available). ' + 'Sell online and in store and track sales and inventory in one place.', 'woocommerce-admin' ) } { hasCbdIndustry && ( { __( ' Selling CBD products is only supported by Square.', 'woocommerce-admin' ) } ) } ), before: ( ), visible: ( hasCbdIndustry && [ 'US' ].includes( countryCode ) ) || ( [ 'brick-mortar', 'brick-mortar-other' ].includes( profileItems.selling_venues ) && [ 'US', 'CA', 'JP', 'GB', 'AU' ].includes( countryCode ) ), plugins: [ 'woocommerce-square' ], container: , isConfigured: options.wc_square_refresh_tokens && options.wc_square_refresh_tokens.length, isEnabled: options.woocommerce_square_credit_card_settings && options.woocommerce_square_credit_card_settings.enabled === 'yes', optionName: 'woocommerce_square_credit_card_settings', hasCbdIndustry, }, { key: 'payfast', title: __( 'PayFast', 'woocommerce-admin' ), content: ( { __( 'The PayFast extension for WooCommerce enables you to accept payments by Credit Card and EFT via one of South Africa’s most popular payment gateways. No setup fees or monthly subscription costs.', 'woocommerce-admin' ) } { __( 'Selecting this extension will configure your store to use South African rands as the selected currency.', 'woocommerce-admin' ) } ), before: ( ), visible: [ 'ZA' ].includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'woocommerce-payfast-gateway' ], container: , isConfigured: options.woocommerce_payfast_settings && options.woocommerce_payfast_settings.merchant_id && options.woocommerce_payfast_settings.merchant_key && options.woocommerce_payfast_settings.pass_phrase, isEnabled: options.woocommerce_payfast_settings && options.woocommerce_payfast_settings.enabled === 'yes', optionName: 'woocommerce_payfast_settings', }, { key: 'eway', title: __( 'eWAY', 'woocommerce-admin' ), content: ( { __( 'The eWAY extension for WooCommerce allows you to take credit card payments directly on your store without redirecting your customers to a third party site to make payment.', 'woocommerce-admin' ) } ), before: ( ), visible: [ 'AU', 'NZ' ].includes( countryCode ) && ! hasCbdIndustry, plugins: [ 'woocommerce-gateway-eway' ], container: , isConfigured: options.woocommerce_eway_settings && options.woocommerce_eway_settings.customer_api && options.woocommerce_eway_settings.customer_password, isEnabled: options.woocommerce_eway_settings && options.woocommerce_eway_settings.enabled === 'yes', optionName: 'woocommerce_eway_settings', }, { key: 'cod', title: __( 'Cash on delivery', 'woocommerce-admin' ), content: __( 'Take payments in cash upon delivery.', 'woocommerce-admin' ), before: , visible: ! hasCbdIndustry, isEnabled: options.woocommerce_cod_settings && options.woocommerce_cod_settings.enabled === 'yes', optionName: 'woocommerce_cod_settings', }, { key: 'bacs', title: __( 'Direct bank transfer', 'woocommerce-admin' ), content: __( 'Take payments via bank transfer.', 'woocommerce-admin' ), before: , visible: ! hasCbdIndustry, container: , isConfigured: options.woocommerce_bacs_accounts && options.woocommerce_bacs_accounts.length, isEnabled: options.woocommerce_bacs_settings && options.woocommerce_bacs_settings.enabled === 'yes', optionName: 'woocommerce_bacs_settings', } ); return filter( methods, ( method ) => method.visible ); }
{ tosPrompt }
{ wcPayDocPrompt }
{ __( 'Selecting this extension will configure your store to use South African rands as the selected currency.', 'woocommerce-admin' ) }