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

  1. ¿Qué es una API Key y por qué la necesitamos?

  2. Creando una cuenta en OpenAI

  3. Generando la API Key

  4. Configurando la API Key en nuestra aplicación

  5. Buenas prácticas de seguridad

  6. Código completo

  7. 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ónExplicación
AutenticaciónVerifica que eres un usuario autorizado
FacturaciónAsocia el uso con tu cuenta para cobros
ControlPermite limitar el uso y prevenir abusos
SeguimientoTe permite ver cuánto estás usando el servicio
SeguridadPreviene que personas no autorizadas usen el servicio

¿Es obligatorio?

Para usar la API de OpenAI (incluyendo Whisper en la nube), 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:

text
https://platform.openai.com/signup

Paso 2: Crear la cuenta

  1. Completa el formulario de registro:

    • Puedes usar tu correo electrónico

    • O usar tu cuenta de Google/Microsoft

  2. Verifica tu correo electrónico:

    • OpenAI te enviará un correo de verificación

    • Haz clic en el enlace para confirmar

  3. 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. 

  1. Ve a Configuración:

    • Haz clic en el ícono de engranaje (⚙️) en la esquina superior derecha

  2. Accede a Facturación:

    • En el menú izquierdo, selecciona "Billing" (Facturación)

  3. Añade un método de pago:

    • Puedes añadir una tarjeta de crédito

    • O comprar créditos prepagados

  4. Establece límites de uso:

    • Configura límites para evitar cargos inesperados

    • Puedes hacerlo en "Usage limits"

¿Cuánto cuesta usar Whisper?

ModeloPrecio por minuto
Whisper API$0.006 / minuto
Modelos de textoVarí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

  1. Inicia sesión en platform.openai.com

  2. Haz clic en el ícono de configuración (engranaje) en la esquina superior derecha

  3. Selecciona "API keys" en el menú izquierdo 

Paso 2: Crear una nueva clave

  1. Haz clic en el botón:

    text
    + Create new secret key

  2. Asigna un nombre descriptivo:

    text
    My Whisper App

    Ejemplos de nombres:

    • whisper-app

    • mi-web-whisper

    • whisper-transcripciones

  3. Opcionalmente, establece permisos:

    • Puedes limitar a ciertos endpoints

    • Por ahora, deja los permisos por defecto

  4. 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. 

  1. Copia la clave inmediatamente

  2. Guárdala en un lugar seguro (como un archivo de texto en tu computadora)

  3. Haz clic en "Done" (Listo)

Ejemplo de formato de API Key

text
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
<?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

bash
# 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
<?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

text
# Archivo: .gitignore
.env
*.log
files/

Paso 4: Crear .env.example como plantilla

text
# 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 .

php
// 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

php
// ❌ 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

php
// ✅ 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?

  1. Ve a platform.openai.com

  2. Ve a API Keys

  3. Busca la clave comprometida

  4. Haz clic en "Revoke" (Revocar) 

  5. Genera una nueva clave

  6. Actualiza tu aplicación con la nueva clave


📝 6. Código completo

Archivo: backend/init.php (Versión final)

php
<?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)

env
# 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)

env
# 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)

text
# 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?

php
define('OPENAI_API_KEY', 'valor');
VentajaExplicación
GlobalAccesible en toda la aplicación
InmutableNo se puede cambiar accidentalmente
SimpleFácil de usar: OPENAI_API_KEY
RápidoMás rápido que variables normales

¿Por qué usar variables de entorno?

VentajaExplicación
SeguridadLa clave no está en el código fuente
PortabilidadFácil de cambiar por entorno
Git-friendlyPuedes ignorar .env en .gitignore
EstándarPráctica común en la industria

¿Qué hace putenv()?

php
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

php
// 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

php
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

php
// 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:

  1. Integrar Whisper API en nuestra aplicación

  2. Enviar archivos a la API de OpenAI

  3. Recibir y procesar las transcripciones

  4. Guardar los resultados en la base de datos

Avance del código de la próxima lección

php
// 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?

  • Sí, aunque la cuenta es gratuita, necesitas añadir un método de pago para usar la API 

¿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?

  • Puede usarla para hacer solicitudes a tu costa

  • Revócala inmediatamente en el dashboard 

¿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

  1. Crea tu cuenta en platform.openai.com

  2. Genera tu API Key

  3. Configúrala en tu aplicación usando .env

Ejercicio 2: Probar la conexión

Crea un script de prueba:

php
<?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:

php
// 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

Entradas más populares de este blog

Cómo usar Whisper para sacar el texto de un video

Tutorial 18: Creando la Página de Visualización de Archivos Recientes

Tutorial 11: ¿Qué es Whisper AI y Cómo Funciona?