Tutorial 12: Obteniendo tu API Key de OpenAI
Tutorial 12: Obteniendo tu API Key de OpenAI
¡Hola y bienvenido de nuevo!
En esta lección vamos a obtener nuestra API Key de OpenAI y configurarla en nuestra aplicación. Esta clave nos permitirá acceder a los servicios de Whisper AI de forma segura y controlada. ¡Vamos a ello!
📋 Contenido del Tutorial
¿Qué es una API Key y por qué la necesitamos?
Creando una cuenta en OpenAI
Generando la API Key
Configurando la API Key en nuestra aplicación
Buenas prácticas de seguridad
Código completo
Próximos pasos
🔑 1. ¿Qué es una API Key y por qué la necesitamos?
¿Qué es una API Key?
Una API Key (Clave de API) es un código único que identifica a un usuario o aplicación cuando se comunica con un servicio en la nube. Es como una contraseña que permite a la plataforma saber quién está haciendo las solicitudes y gestionar el uso.
¿Por qué necesitamos una API Key para Whisper?
| Razón | Explicación |
|---|---|
| Autenticación | Verifica que eres un usuario autorizado |
| Facturación | Asocia el uso con tu cuenta para cobros |
| Control | Permite limitar el uso y prevenir abusos |
| Seguimiento | Te permite ver cuánto estás usando el servicio |
| Seguridad | Previene que personas no autorizadas usen el servicio |
¿Es obligatorio?
Para usar la API de OpenAI (incluyendo Whisper en la nube), sí necesitas una API Key. Sin embargo, recuerda que también puedes usar Whisper de forma local y gratuita con el modelo de código abierto, como vimos en tutoriales anteriores.
📝 2. Creando una cuenta en OpenAI
Paso 1: Acceder a la plataforma OpenAI
Ve a la página de registro de OpenAI:
https://platform.openai.com/signup
Paso 2: Crear la cuenta
Completa el formulario de registro:
Puedes usar tu correo electrónico
O usar tu cuenta de Google/Microsoft
Verifica tu correo electrónico:
OpenAI te enviará un correo de verificación
Haz clic en el enlace para confirmar
Configura tu perfil:
Completa la información básica
Acepta los términos de servicio
Paso 3: Configurar el método de pago (obligatorio para API)
Importante: Aunque tengas una cuenta gratuita, para usar la API necesitas añadir un método de pago.
Ve a Configuración:
Haz clic en el ícono de engranaje (⚙️) en la esquina superior derecha
Accede a Facturación:
En el menú izquierdo, selecciona "Billing" (Facturación)
Añade un método de pago:
Puedes añadir una tarjeta de crédito
O comprar créditos prepagados
Establece límites de uso:
Configura límites para evitar cargos inesperados
Puedes hacerlo en "Usage limits"
¿Cuánto cuesta usar Whisper?
| Modelo | Precio por minuto |
|---|---|
| Whisper API | $0.006 / minuto |
| Modelos de texto | Varía según el modelo |
Nota: Los precios pueden cambiar. Consulta la página oficial de OpenAI para precios actualizados.
🔐 3. Generando la API Key
Paso 1: Navegar a la sección de API Keys
Inicia sesión en platform.openai.com
Haz clic en el ícono de configuración (engranaje) en la esquina superior derecha
Paso 2: Crear una nueva clave
Haz clic en el botón:
+ Create new secret key
Asigna un nombre descriptivo:
My Whisper App
Ejemplos de nombres:
whisper-appmi-web-whisperwhisper-transcripciones
Opcionalmente, establece permisos:
Puedes limitar a ciertos endpoints
Por ahora, deja los permisos por defecto
Haz clic en "Create secret key"
Paso 3: Copiar y guardar la clave
⚠️ ¡IMPORTANTE! OpenAI solo muestra la clave una vez. Si la pierdes, tendrás que generar una nueva.
Copia la clave inmediatamente
Guárdala en un lugar seguro (como un archivo de texto en tu computadora)
Haz clic en "Done" (Listo)
Ejemplo de formato de API Key
sk-proj-ABC123def456GHI789jklMNO012pqrSTU345vwxYZ678
Características:
Comienza con
sk-(Secret Key)Es una cadena alfanumérica larga
Es sensible (distingue mayúsculas/minúsculas)
💻 4. Configurando la API Key en nuestra aplicación
Método 1: Usando constantes en init.php (Recomendado)
El método más sencillo para nuestro proyecto es definir una constante en el archivo de inicialización.
Archivo: backend/init.php
<?php // ============================================= // CONFIGURACIÓN DE LA APLICACIÓN // ============================================= // 1. Definir la API Key de OpenAI define('OPENAI_API_KEY', 'sk-proj-AQUI_VA_TU_API_KEY'); // 2. Cargar las clases require 'classes/DB.php'; require 'classes/Whisper.php'; // 3. Crear instancias $whisperObj = new Whisper(); // 4. (Opcional) Verificar que la API Key está configurada if (!defined('OPENAI_API_KEY') || OPENAI_API_KEY === '') { die('Error: La API Key de OpenAI no está configurada'); } ?>
Método 2: Usando variables de entorno (Más seguro)
Para mayor seguridad, especialmente si compartes tu código en GitHub, es mejor usar variables de entorno.
Paso 1: Crear archivo .env en la raíz
# Archivo: .env (NO subir a GitHub) OPENAI_API_KEY=sk-proj-AQUI_VA_TU_API_KEY
Paso 2: Modificar init.php para cargar .env
<?php // ============================================= // CARGAR VARIABLES DE ENTORNO // ============================================= // Cargar el archivo .env manualmente function loadEnv($path) { if (!file_exists($path)) { return false; } $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { if (strpos($line, '=') !== false && strpos($line, '#') !== 0) { list($key, $value) = explode('=', $line, 2); putenv(trim($key) . '=' . trim($value)); } } return true; } // Cargar variables de entorno loadEnv(__DIR__ . '/../.env'); // 1. Definir la API Key de OpenAI define('OPENAI_API_KEY', getenv('OPENAI_API_KEY') ?: ''); // 2. Cargar las clases require 'classes/DB.php'; require 'classes/Whisper.php'; // 3. Crear instancias $whisperObj = new Whisper(); // 4. Verificar que la API Key está configurada if (!defined('OPENAI_API_KEY') || OPENAI_API_KEY === '') { die('Error: La API Key de OpenAI no está configurada en .env'); } ?>
Paso 3: Crear .gitignore para excluir .env
# Archivo: .gitignore .env *.log files/
Paso 4: Crear .env.example como plantilla
# Archivo: .env.example (compartir en GitHub) OPENAI_API_KEY=tu_api_key_aqui
Método 3: Almacenar en la base de datos
Si necesitas que el usuario pueda cambiar la clave desde la interfaz, puedes almacenarla en la base de datos .
// Guardar en la base de datos function saveApiKey($key) { global $pdo; $sql = "INSERT INTO settings (setting_key, setting_value) VALUES ('openai_api_key', ?) ON DUPLICATE KEY UPDATE setting_value = ?"; $stmt = $pdo->prepare($sql); return $stmt->execute([$key, $key]); } // Obtener de la base de datos function getApiKey() { global $pdo; $sql = "SELECT setting_value FROM settings WHERE setting_key = 'openai_api_key'"; $stmt = $pdo->prepare($sql); $stmt->execute(); $result = $stmt->fetch(); return $result ? $result['setting_value'] : null; }
🛡️ 5. Buenas prácticas de seguridad
❌ Lo que NO debes hacer
// ❌ NUNCA hardcodees la API Key en archivos públicos $apiKey = "sk-proj-ABC123"; // ¡MAL! Esto está en el código // ❌ NUNCA subas la API Key a GitHub // Si está en el código, cualquiera puede verla // ❌ NUNCA expongas la API Key en la interfaz echo $apiKey; // ¡MAL! Los usuarios podrían verla
✅ Lo que SÍ debes hacer
// ✅ Usar constantes o variables de entorno define('OPENAI_API_KEY', getenv('OPENAI_API_KEY')); // ✅ Mantener la clave fuera del repositorio // Usar .gitignore para excluir .env // ✅ Rotar las claves regularmente // Generar nuevas claves periódicamente // ✅ Usar HTTPS en producción // Siempre usa conexiones seguras // ✅ Limitar los permisos de la API Key // Configurar solo lo que necesitas
¿Qué hacer si se filtra tu API Key?
Ve a platform.openai.com
Ve a API Keys
Busca la clave comprometida
Genera una nueva clave
Actualiza tu aplicación con la nueva clave
📝 6. Código completo
Archivo: backend/init.php (Versión final)
<?php /** * Archivo de inicialización de la aplicación * * Este archivo carga todas las configuraciones, * clases y conexiones necesarias para la aplicación. */ // ============================================= // 1. CONFIGURACIÓN DE LA API KEY // ============================================= /** * Método 1: Definir directamente (más simple) * * NOTA: Reemplaza 'tu_api_key_aqui' con tu clave real */ // define('OPENAI_API_KEY', 'sk-proj-tu_api_key_aqui'); /** * Método 2: Usar variable de entorno (más seguro) * * Crea un archivo .env en la raíz con: * OPENAI_API_KEY=sk-proj-tu_api_key_aqui */ // Cargar variables de entorno desde .env function loadEnv($path = __DIR__ . '/../.env') { if (!file_exists($path)) { return false; } $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { // Ignorar comentarios if (strpos($line, '#') === 0) { continue; } // Buscar pares clave=valor if (strpos($line, '=') !== false) { list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); // Eliminar comillas si las tienen $value = trim($value, '"\''); putenv("$key=$value"); $_ENV[$key] = $value; } } return true; } // Cargar el archivo .env loadEnv(); // Definir constante para la API Key if (!defined('OPENAI_API_KEY')) { define('OPENAI_API_KEY', getenv('OPENAI_API_KEY') ?: ''); } // Verificar que la API Key está configurada if (OPENAI_API_KEY === '') { // En desarrollo, mostrar advertencia if ($_SERVER['SERVER_NAME'] === 'localhost') { die('⚠️ Error: La API Key de OpenAI no está configurada. <br>1. Crea un archivo .env en la raíz del proyecto <br>2. Añade: OPENAI_API_KEY=sk-proj-tu_api_key'); } else { // En producción, usar un log error_log('OpenAI API Key not configured'); die('Error de configuración del servidor'); } } // ============================================= // 2. CARGAR CLASES Y CONEXIONES // ============================================= // Cargar las clases necesarias require 'classes/DB.php'; require 'classes/Whisper.php'; // Crear instancia de Whisper (conexión a BD incluida) $whisperObj = new Whisper(); // ============================================= // 3. CONFIGURACIÓN ADICIONAL // ============================================= // Configurar zona horaria date_default_timezone_set('America/Mexico_City'); // Configurar manejo de errores error_reporting(E_ALL); ini_set('display_errors', 0); // No mostrar errores en producción ini_set('log_errors', 1); ini_set('error_log', __DIR__ . '/../logs/error.log'); // ============================================= // 4. CONSTANTES GLOBALES // ============================================= define('APP_NAME', 'My Whisper AI'); define('APP_VERSION', '1.0.0'); define('MAX_FILE_SIZE', 20 * 1024 * 1024); // 20 MB define('UPLOAD_DIR', __DIR__ . '/../files/'); // Crear directorios necesarios if (!is_dir(UPLOAD_DIR)) { mkdir(UPLOAD_DIR, 0777, true); } if (!is_dir(__DIR__ . '/../logs')) { mkdir(__DIR__ . '/../logs', 0777, true); } ?>
Archivo: .env (crear en la raíz)
# Archivo de configuración de entorno # ¡NUNCA subas este archivo a GitHub! # OpenAI API Key OPENAI_API_KEY=sk-proj-AQUI_VA_TU_API_KEY_REAL # Configuración de la base de datos (opcional) # DB_HOST=localhost # DB_NAME=MyWhisper # DB_USER=root # DB_PASS=
Archivo: .env.example (compartir en repositorio)
# Archivo de ejemplo para .env # Copia este archivo como .env y añade tus valores reales # OpenAI API Key - Obténla en https://platform.openai.com/api-keys OPENAI_API_KEY=sk-proj-tu_api_key_aqui # Configuración de la base de datos DB_HOST=localhost DB_NAME=MyWhisper DB_USER=root DB_PASS=
Archivo: .gitignore (en la raíz)
# Archivos de entorno .env .env.local # Directorios de archivos files/ logs/ *.log # Archivos de sistema .DS_Store Thumbs.db # Archivos de editor .vscode/ .idea/ *.sublime-* # Archivos temporales *.tmp *.temp
📖 7. Explicación detallada
¿Por qué usar constantes?
define('OPENAI_API_KEY', 'valor');
| Ventaja | Explicación |
|---|---|
| Global | Accesible en toda la aplicación |
| Inmutable | No se puede cambiar accidentalmente |
| Simple | Fácil de usar: OPENAI_API_KEY |
| Rápido | Más rápido que variables normales |
¿Por qué usar variables de entorno?
| Ventaja | Explicación |
|---|---|
| Seguridad | La clave no está en el código fuente |
| Portabilidad | Fácil de cambiar por entorno |
| Git-friendly | Puedes ignorar .env en .gitignore |
| Estándar | Práctica común en la industria |
¿Qué hace putenv()?
putenv('OPENAI_API_KEY=sk-proj-...');
Establece una variable de entorno
Accesible con
getenv('OPENAI_API_KEY')Persiste durante la ejecución del script
🧪 8. Probando la configuración
Prueba 1: Verificar que la constante existe
// Código de prueba en index.php if (defined('OPENAI_API_KEY')) { echo "✅ API Key configurada correctamente<br>"; echo "Longitud: " . strlen(OPENAI_API_KEY) . " caracteres"; } else { echo "❌ API Key NO configurada"; }
Prueba 2: Verificar formato de la API Key
function validateApiKey($key) { // Verificar que comienza con sk- if (strpos($key, 'sk-') !== 0) { return false; } // Verificar que tiene una longitud razonable if (strlen($key) < 20) { return false; } // Verificar que contiene caracteres válidos if (!preg_match('/^[a-zA-Z0-9_\-]+$/', substr($key, 3))) { return false; } return true; } if (validateApiKey(OPENAI_API_KEY)) { echo "✅ Formato de API Key válido"; } else { echo "❌ Formato de API Key inválido"; }
Prueba 3: Verificar que la clave funciona
// Prueba rápida con cURL function testApiKey($key) { $ch = curl_init('https://api.openai.com/v1/models'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $key ]); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $httpCode === 200; } if (testApiKey(OPENAI_API_KEY)) { echo "✅ API Key válida y funcionando"; } else { echo "❌ API Key inválida o sin permisos"; }
🎯 9. Próximos pasos
Lo que hemos logrado
✅ Cuenta de OpenAI creada
✅ API Key generada
✅ API Key configurada en la aplicación
✅ Seguridad implementada
✅ Verificación de configuración
Lo que viene en la próxima lección
En la siguiente lección vamos a:
Integrar Whisper API en nuestra aplicación
Enviar archivos a la API de OpenAI
Recibir y procesar las transcripciones
Guardar los resultados en la base de datos
Avance del código de la próxima lección
// En Whisper.php public function transcribeWithAPI($filePath) { $apiKey = OPENAI_API_KEY; $file = curl_file_create($filePath); $ch = curl_init('https://api.openai.com/v1/audio/transcriptions'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bearer ' . $apiKey ]); curl_setopt($ch, CURLOPT_POSTFIELDS, [ 'file' => $file, 'model' => 'whisper-1', 'language' => 'es' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true)['text'] ?? false; }
❓ Preguntas frecuentes
¿Necesito una cuenta de pago para obtener la API Key?
¿La API Key es gratuita?
Tienes créditos gratuitos al crear la cuenta
Después, pagas por uso ($0.006/minuto para Whisper)
Consulta el pricing oficial de OpenAI
¿Puedo compartir mi API Key con otros?
NO, es personal y confidencial
Cada desarrollador debe tener su propia clave
¿Qué pasa si alguien roba mi API Key?
¿Puedo usar Whisper sin API Key?
Sí, usando el modelo de código abierto localmente
No necesitas API Key para la versión offline
¿Dónde guardo mi API Key de forma segura?
Usa variables de entorno o archivo .env
NUNCA la guardes en el código fuente
🎓 Ejercicio práctico
Ejercicio 1: Configurar tu API Key
Crea tu cuenta en platform.openai.com
Genera tu API Key
Configúrala en tu aplicación usando .env
Ejercicio 2: Probar la conexión
Crea un script de prueba:
<?php // test_api.php require 'backend/init.php'; function testConnection($apiKey) { // Probar conexión con la API // ... } testConnection(OPENAI_API_KEY); ?>
Ejercicio 3: Crear un sistema de rotación
Implementa la capacidad de rotar la API Key desde la interfaz:
// En el panel de administración function updateApiKey($newKey) { // Validar y guardar la nueva clave // Crear respaldo de la anterior // Notificar si hay problemas }
¡Excelente trabajo! Ahora tienes tu API Key de OpenAI configurada de forma segura. En la próxima lección, la usaremos para transcribir archivos directamente desde nuestra aplicación.
Comentarios
Publicar un comentario