fix: Mejorar el manejo de errores en la respuesta del servicio REPUVE
This commit is contained in:
parent
9ebc3f4167
commit
92b64887bd
@ -77,7 +77,8 @@ private function parseVehicleResponse(string $soapResponse, string $niv)
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '108',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : 'El resultado que devuelve el Web service es de un formato distinto al esperado',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? 'Error al parsear respuesta',
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'niv' => $niv,
|
||||
'repuve_response' => null,
|
||||
@ -86,24 +87,21 @@ private function parseVehicleResponse(string $soapResponse, string $niv)
|
||||
|
||||
$contenido = trim($matches[1]);
|
||||
|
||||
// Verificar si hay error de REPUVE Nacional
|
||||
if (str_starts_with($contenido, 'ERROR:')) {
|
||||
$errorMessage = str_replace('ERROR:', '', $contenido);
|
||||
// Verificar si hay error de REPUVE Nacional (cualquier formato con ERR o ERROR)
|
||||
if (preg_match('/(ERR|ERROR|err|error):(-?\d+)/i', $contenido, $errorMatch)) {
|
||||
$errorCode = $errorMatch[2];
|
||||
|
||||
$errorCode = '-1';
|
||||
if (preg_match('/^(\d+)\|/', $errorMessage, $codeMatch)) {
|
||||
$errorCode = $codeMatch[1];
|
||||
$errorMessage = substr($errorMessage, strlen($errorCode) + 1);
|
||||
}
|
||||
// Buscar el error completo en la base de datos
|
||||
$errorFromDb = Error::where('code', $errorCode)->first();
|
||||
|
||||
// Mensaje directo de REPUVE Nacional
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => $errorCode,
|
||||
'error_message' => trim($errorMessage), // Mensaje directo de REPUVE
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error código {$errorCode} - no catalogado",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'niv' => $niv,
|
||||
'repuve_response' => null,
|
||||
'repuve_response' => $contenido,
|
||||
];
|
||||
}
|
||||
|
||||
@ -160,7 +158,8 @@ private function parseVehicleResponse(string $soapResponse, string $niv)
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '108',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : 'El resultado que devuelve el Web service es de un formato distinto al esperado',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? 'Error al parsear respuesta',
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'niv' => $niv,
|
||||
'repuve_response' => null,
|
||||
@ -282,7 +281,8 @@ public function inscribirVehiculo(array $datos)
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '103',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : "Error de conexión al Web Service: {$curlError}",
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error de conexión: {$curlError}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
@ -294,7 +294,8 @@ public function inscribirVehiculo(array $datos)
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '-1',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : "Error interno del web service. Código HTTP {$httpCode}",
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? "Error interno HTTP {$httpCode}",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'http_code' => $httpCode,
|
||||
'raw_response' => $response,
|
||||
@ -317,7 +318,8 @@ private function parsearRespuestaInscripcion(string $soapResponse)
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '108',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : 'El resultado que devuelve el Web service es de un formato distinto al esperado',
|
||||
'error_name' => $errorFromDb?->name,
|
||||
'error_message' => $errorFromDb?->description ?? 'Error al parsear respuesta',
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'raw_response' => $soapResponse,
|
||||
'repuve_response' => null,
|
||||
@ -326,26 +328,41 @@ private function parsearRespuestaInscripcion(string $soapResponse)
|
||||
|
||||
$contenido = trim($matches[1]);
|
||||
|
||||
if (str_starts_with($contenido, 'ERROR:')) {
|
||||
$errorMessage = str_replace('ERROR:', '', $contenido);
|
||||
// Buscar patrones de error: ERR:, ERROR:, err:, error:
|
||||
if (preg_match('/(ERR|ERROR|err|error):(-?\d+)/i', $contenido, $errorMatch)) {
|
||||
$errorCode = $errorMatch[2];
|
||||
|
||||
$errorCode = '-1';
|
||||
if (preg_match('/^(\d+)\|/', $errorMessage, $codeMatch)) {
|
||||
$errorCode = $codeMatch[1];
|
||||
$errorMessage = substr($errorMessage, strlen($errorCode) + 1);
|
||||
// Buscar el error completo en la base de datos
|
||||
$errorFromDb = Error::where('code', $errorCode)->first();
|
||||
|
||||
if ($errorFromDb) {
|
||||
// Retornar nombre y descripción de la BD
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => $errorCode,
|
||||
'error_name' => $errorFromDb->name,
|
||||
'error_message' => $errorFromDb->description,
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'raw_response' => $soapResponse,
|
||||
'repuve_response' => $contenido,
|
||||
];
|
||||
}
|
||||
|
||||
// Mensaje directo de REPUVE Nacional
|
||||
// Si no existe en BD, retornar el código sin descripción
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => $errorCode,
|
||||
'error_message' => trim($errorMessage), // Mensaje directo de REPUVE
|
||||
'error_name' => null,
|
||||
'error_message' => "Error código {$errorCode} - no catalogado",
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'raw_response' => $soapResponse,
|
||||
'repuve_response' => null,
|
||||
'repuve_response' => $contenido,
|
||||
];
|
||||
} elseif (str_starts_with($contenido, 'OK:')) {
|
||||
$datos = str_replace('OK:', '', $contenido);
|
||||
}
|
||||
|
||||
// Si empieza con OK: es éxito
|
||||
if (preg_match('/^OK:/i', $contenido)) {
|
||||
$datos = preg_replace('/^OK:/i', '', $contenido);
|
||||
|
||||
return [
|
||||
'has_error' => false,
|
||||
@ -358,16 +375,20 @@ private function parsearRespuestaInscripcion(string $soapResponse)
|
||||
'data' => $datos,
|
||||
],
|
||||
];
|
||||
} else {
|
||||
$errorFromDb = Error::where('code', '108')->first();
|
||||
return [
|
||||
'has_error' => true,
|
||||
'error_code' => '108',
|
||||
'error_message' => $errorFromDb ? $errorFromDb->description : 'El resultado que devuelve el Web service es de un formato distinto al esperado',
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'raw_response' => $soapResponse,
|
||||
'repuve_response' => null,
|
||||
];
|
||||
}
|
||||
|
||||
// Si no hay ERR/ERROR y no es OK, asumir que es respuesta exitosa
|
||||
return [
|
||||
'has_error' => false,
|
||||
'error_code' => null,
|
||||
'error_name' => null,
|
||||
'error_message' => null,
|
||||
'timestamp' => now()->toDateTimeString(),
|
||||
'raw_response' => $soapResponse,
|
||||
'repuve_response' => [
|
||||
'status' => 'OK',
|
||||
'data' => $contenido,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user