Closed slash1andy closed 4 months ago
Note that cURL
is required as the underlying Square PHP SDK uses that. We have an existing check in place for that, along with a few other dependencies, and this will render an admin notice:
In testing though, these admin notices never show in the new onboarding flow so a user is never made aware of this requirement.
I tested the previous version of Square (4.6.3) and while that admin notice shows, we still allow a user to try and connect, which will then throw the same fatal error. So this isn't an entirely new issue but can definitely be handled more gracefully.
I can see two approaches here:
Note that we should ensure that the above works for all required dependencies, not just cURL
Describe the bug
To reproduce
Fatal error: Uncaught Error: Undefined constant "Unirest\CURLAUTH_BASIC" in /var/www/html/wp-content/plugins/woocommerce-square/vendor/apimatic/unirest-php/src/Configuration.php:54 Stack trace: #0 /var/www/html/wp-content/plugins/woocommerce-square/vendor/square/square/src/SquareClient.php(162): Unirest\Configuration::init(Object(Square\SquareClient)) #1 /var/www/html/wp-content/plugins/woocommerce-square/includes/API.php(71): Square\SquareClient->__construct(Array) #2 /var/www/html/wp-content/plugins/woocommerce-square/includes/Plugin.php(689): WooCommerce\Square\API->__construct('EAAAljYyrWz7dhj...', false) #3 /var/www/html/wp-content/plugins/woocommerce-square/includes/Settings.php(791): WooCommerce\Square\Plugin->get_api('EAAAljYyrWz7dhj...', false) #4 /var/www/html/wp-content/plugins/woocommerce-square/includes/Gateway.php(1051): WooCommerce\Square\Settings->get_locations() #5 /var/www/html/wp-includes/class-wp-hook.php(324): WooCommerce\Square\Gateway->filter_available_gateways(Array) #6 /var/www/html/wp-includes/plugin.php(205): WP_Hook->apply_filters(Array, Array) #7 /var/www/html/wp-content/plugins/woocommerce/includes/class-wc-payment-gateways.php(333): apply_filters('woocommerce_ava...', Array) #8 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/Payments.php(89): WC_Payment_Gateways->get_available_payment_gateways() #9 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/Payments.php(67): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\Payments::has_gateways() #10 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/Tasks/WooCommercePayments.php(106): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\Payments->is_complete() #11 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskList.php(305): Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\WooCommercePayments->can_view() #12 [internal function]: Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskList->Automattic\WooCommerce\Admin\Features\OnboardingTasks\{closure}(Object(Automattic\WooCommerce\Admin\Features\OnboardingTasks\Tasks\WooCommercePayments)) #13 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskList.php(306): array_filter(Array, Object(Closure)) #14 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskList.php(240): Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskList->get_viewable_tasks() #15 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php(412): Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskList->is_complete() #16 /var/www/html/wp-content/plugins/woocommerce/src/Admin/Features/OnboardingTasks/TaskLists.php(434): Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskLists::setup_tasks_remaining() #17 /var/www/html/wp-includes/class-wp-hook.php(324): Automattic\WooCommerce\Admin\Features\OnboardingTasks\TaskLists::menu_task_count('') #18 /var/www/html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array) #19 /var/www/html/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #20 /var/www/html/wp-admin/includes/menu.php(161): do_action('admin_menu', '') #21 /var/www/html/wp-admin/menu.php(422): require_once('/var/www/html/w...') #22 /var/www/html/wp-admin/admin.php(158): require('/var/www/html/w...') #23 /var/www/html/wp-admin/index.php(10): require_once('/var/www/html/w...') #24 {main} thrown in /var/www/html/wp-content/plugins/woocommerce-square/vendor/apimatic/unirest-php/src/Configuration.php on line 54
Expected behavior
If cURL is not installed, failing with a banner notice letting them know or similar would be preferred. If this plugin is installed on a server without cURL, it will bring the site down after completing onboarding.
Environment (please complete the following information):
Additional details
This happened on Studio, but we assume this will be replicable on any host without cURL.