Prepara las credenciales y el documento
Crea una cuenta verificada y genera una API Key con permiso para el endpoint RUC. Define DATOSPERU_API_KEY en el entorno del servidor, fuera del repositorio. Define DATOSPERU_RUC con un número de once dígitos que estés autorizado a consultar.
PHP debe tener habilitada la extensión cURL. El ejemplo mantiene la verificación TLS de cURL y limita la espera a 30 segundos. En Laravel, obtén la credencial desde config() después de cargarla en un archivo de configuración del servidor.
Distingue errores de transporte y de API
curl_exec puede fallar antes de recibir una respuesta HTTP. Si sí recibes una respuesta, revisa CURLINFO_RESPONSE_CODE y el campo success. Un 422 requiere corregir la entrada; un 401 requiere revisar el token. No reintentes esos casos de forma automática.
Para consultar DNI, cambia la ruta a /api/v1/dni y utiliza el campo dni con ocho dígitos. Los campos devueltos son distintos: consulta el esquema específico antes de leer nombres o razón social.
Ejemplo de código
<?php
$token = getenv('DATOSPERU_API_KEY');
$ruc = getenv('DATOSPERU_RUC');
if (!$token || !preg_match('/^[0-9]{11}$/', $ruc ?: '')) {
throw new RuntimeException('Configura la clave y un RUC autorizado.');
}
$ch = curl_init('https://api.datosperu.net/api/v1/ruc');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
],
CURLOPT_POSTFIELDS => json_encode(['ruc' => $ruc], JSON_THROW_ON_ERROR)
]);
$raw = curl_exec($ch);
if ($raw === false) throw new RuntimeException('Fallo de conexión.');
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
if ($status >= 400 || !($result['success'] ?? false)) {
throw new RuntimeException($result['error']['message'] ?? 'Consulta fallida.');
}
$empresa = $result['data']; // Revisa los campos opcionales antes de utilizarlos.
Este ejemplo realiza una solicitud real cuando configuras tus credenciales y lo ejecutas. No contiene resultados simulados.