getResponseBody(), true ); // The API can return either: // 1. A MONEI status code like "E209" (which we translate to user-friendly messages) // 2. An HTTP status code like 400 with a message (which is already user-friendly) $status_code_value = $response_body['statusCode'] ?? null; $raw_message = $response_body['message'] ?? $exception->getMessage(); // Check if statusCode is a MONEI status code (E-prefixed like "E209") // vs HTTP status code (numeric like 400) $is_monei_status_code = $status_code_value && is_string( $status_code_value ) && strpos( $status_code_value, 'E' ) === 0; if ( $is_monei_status_code ) { // We have a MONEI status code - translate it to user-friendly message $message = $this->get_status_message( $status_code_value ); $status_code = $status_code_value; } else { // HTTP status code or no status code - use the raw message as it's already user-friendly $message = $raw_message; $status_code = null; } // Final fallback if ( ! $message ) { $message = $exception->getMessage(); } return array( 'message' => $message, 'statusCode' => $status_code, 'rawMessage' => $raw_message, ); } }