diff --git a/modules/ppcp-settings/src/Endpoint/CommonRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/CommonRestEndpoint.php index 18c9de902..c7345148e 100644 --- a/modules/ppcp-settings/src/Endpoint/CommonRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/CommonRestEndpoint.php @@ -109,11 +109,7 @@ class CommonRestEndpoint extends RestEndpoint { $this->field_map ); - return rest_ensure_response( - array( - 'data' => $js_data, - ) - ); + return $this->return_success( $js_data ); } /** diff --git a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php index 5225b4d13..e394b880b 100644 --- a/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/ConnectManualRestEndpoint.php @@ -126,33 +126,22 @@ class ConnectManualRestEndpoint extends RestEndpoint { $use_sandbox = (bool) ( $data['use_sandbox'] ?? false ); if ( empty( $client_id ) || empty( $client_secret ) ) { - return rest_ensure_response( - array( - 'success' => false, - 'message' => 'No client ID or secret provided.', - ) - ); + return $this->return_error( 'No client ID or secret provided.' ); } try { $payee = $this->request_payee( $client_id, $client_secret, $use_sandbox ); } catch ( Exception $exception ) { - return rest_ensure_response( - array( - 'success' => false, - 'message' => $exception->getMessage(), - ) - ); - + return $this->return_error( $exception->getMessage() ); } - $result = array( - 'merchantId' => $payee->merchant_id, - 'email' => $payee->email_address, - 'success' => true, + return $this->return_success( + array( + 'merchantId' => $payee->merchant_id, + 'email' => $payee->email_address, + 'success' => true, + ) ); - - return rest_ensure_response( $result ); } /** diff --git a/modules/ppcp-settings/src/Endpoint/LoginLinkRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/LoginLinkRestEndpoint.php index cb969c7ca..85ced8276 100644 --- a/modules/ppcp-settings/src/Endpoint/LoginLinkRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/LoginLinkRestEndpoint.php @@ -93,12 +93,9 @@ class LoginLinkRestEndpoint extends RestEndpoint { try { $url = $url_generator->generate( $products ); - return rest_ensure_response( $url ); + return $this->return_success( $url ); } catch ( \Exception $e ) { - return new WP_REST_Response( - array( 'error' => $e->getMessage() ), - 500 - ); + return $this->return_error( $e->getMessage() ); } } } diff --git a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php index 03690d3bf..0a102c178 100644 --- a/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/OnboardingRestEndpoint.php @@ -131,9 +131,9 @@ class OnboardingRestEndpoint extends RestEndpoint { $this->flag_map ); - return rest_ensure_response( + return $this->return_success( + $js_data, array( - 'data' => $js_data, 'flags' => $js_flags, ) ); diff --git a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php index 35b2912fe..76626ac0c 100644 --- a/modules/ppcp-settings/src/Endpoint/RestEndpoint.php +++ b/modules/ppcp-settings/src/Endpoint/RestEndpoint.php @@ -10,6 +10,7 @@ declare( strict_types = 1 ); namespace WooCommerce\PayPalCommerce\Settings\Endpoint; use WC_REST_Controller; +use WP_REST_Response; /** * Base class for REST controllers in the settings module. @@ -31,6 +32,54 @@ abstract class RestEndpoint extends WC_REST_Controller { return current_user_can( 'manage_woocommerce' ); } + /** + * Returns a successful REST API response. + * + * @param mixed $data The main response data. + * @param array $extra Optional, additional response data. + * + * @return WP_REST_Response The successful response. + */ + protected function return_success( $data, array $extra = array() ) : WP_REST_Response { + $response = array( + 'success' => true, + 'data' => $data, + ); + + if ( $extra ) { + foreach ( $extra as $key => $value ) { + if ( isset( $response[ $key ] ) ) { + continue; + } + + $response[ $key ] = $value; + } + } + + return rest_ensure_response( $response ); + } + + /** + * Returns an error REST API response. + * + * @param string $reason The reason for the error. + * @param mixed $details Optional details about the error. + * + * @return WP_REST_Response The error response. + */ + protected function return_error( string $reason, $details = null ) : WP_REST_Response { + $response = array( + 'success' => false, + 'message' => $reason, + ); + + if ( ! is_null( $details ) ) { + $response['details'] = $details; + } + + return rest_ensure_response( $response ); + } + /** * Sanitizes parameters based on a field mapping. *