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