API Activa

Doctor Recetas API

API RESTful para Consultas Médicas y Procesamiento de Pagos

Versión 2.6.0 • Producción

31+
Endpoints
99.9%
Uptime
24/7
Disponibilidad
JWT
Autenticación

Características Principales

Autenticación JWT

Tokens seguros con expiración de 7 días

Múltiples Métodos de Pago

Authorize.Net y ATH Móvil en producción

Órdenes Médicas

Recetas y certificados digitales

Recuperación de Contraseña

Sistema seguro por email con tokens

Gestión de Usuarios

Perfiles y sesiones completas

Catálogo de Productos

Gestión de categorías y productos

Información de Conexión

Base URL

https://doctorrecetas.com/

Timezone

America/Puerto_Rico

Email de Soporte

support@doctorrecetas.com

Teléfono

(787) 710-7426

Endpoints Disponibles

Autenticación

POST /api/login.php

Autenticación de usuario y generación de token JWT

Ver detalles

Parámetros:

{ "usuario": "string (required)", "clave": "string (required)" }

Respuesta:

{ "success": true, "data": { "us_id": 123, "us_nombres": "Juan Perez", "es_vip": 1, "token": "eyJ0eXAiOiJKV1QiLCJh...", "expires_in": 604800 } }

es_vip: 1 si tiene membresía activa, 0 si no

POST /api/registro.php

Registro de nuevo usuario en el sistema

Ver detalles

Parámetros:

{ "us_nombres": "string (required)", "us_email": "string (required)", "us_usuario": "string (required)", "us_clave": "string (required)", "us_telefono": "string (optional)", "us_direccion": "string (optional)" }
POST /api/verificar_o_registrar_usuario.php
Envía código

Consulta si un usuario existe por correo y devuelve su us_id. Si existe, envía un código de verificación de 6 dígitos vía PHPMailer. Si no existe, lo registra con los datos proporcionados.

Ver detalles

Caso 1 — Consultar si existe (solo correo):

{ "us_email": "usuario@ejemplo.com" }

Respuesta (usuario encontrado):

{ "status": "success", "message": "Usuario encontrado. Código de confirmación enviado al correo.", "data": { "existe": true, "us_id": 42, "us_nombres": "Andrés López", "codigo_enviado": true, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "expires_in": 604800 } }
Se genera un código aleatorio de 6 dígitos y se envía al correo del usuario vía PHPMailer + Gmail SMTP. El código expira en 10 minutos.

Caso 2 — Registrar nuevo usuario (si no existe):

{ "us_email": "nuevo@ejemplo.com", "us_nombres": "Andrés López", "us_telefono": "787-555-1234", "us_clave": "MiPassword123" }

Respuesta (usuario registrado):

{ "status": "success", "message": "Usuario registrado correctamente", "data": { "existe": false, "us_id": 85, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...", "expires_in": 604800 } }

Caso 3 — No existe y faltan campos:

// HTTP 422 { "status": "error", "message": "El usuario no existe. Proporciona us_nombres, us_telefono y us_clave para registrarlo" }
Clave encriptada AES-256-CBC PHPMailer SMTP Código válido 10 min
POST /api/logout.php
Requiere Token

Cierre de sesión e invalidación de token

Ver detalles

Header requerido:

Authorization: Bearer {token}

Respuesta:

{ "success": true, "message": "Sesión cerrada exitosamente" }
GET /api/sesiones.php
Requiere Token

Validar sesión activa y obtener información del usuario

Ver detalles

Header requerido:

Authorization: Bearer {token}

Respuesta:

{ "success": true, "data": { "us_id": 123, "us_nombres": "Juan Perez", "us_email": "juan@ejemplo.com", "token_valido": true } }

Recuperación de Contraseña

POST /api/solicitar_recuperacion.php

Solicitar email de recuperación de contraseña

Ver detalles

Parámetros:

{ "email": "usuario@ejemplo.com" }

Respuesta:

{ "success": true, "message": "Email de recuperación enviado" }
POST /api/validar_token_recuperacion.php

Validar token de recuperación de contraseña

Ver detalles

Parámetros:

{ "token": "abc123xyz789" }

Respuesta:

{ "success": true, "valid": true, "message": "Token válido" }
POST /api/restablecer_contrasena.php

Restablecer contraseña con token válido

Ver detalles

Parámetros:

{ "token": "abc123xyz789", "nueva_clave": "MiNuevaPassword123!" }

Respuesta:

{ "success": true, "message": "Contraseña actualizada exitosamente" }

Procesamiento de Pagos Authorize.Net PRODUCTION

POST /api/pagar.php
Requiere Token

Procesar pago con tarjeta de crédito/débito

Visa MasterCard Amex Discover
Ver detalles

Parámetros:

{ "pq_id": [1, 2], "anombre_de": ["Juan Perez"], "pq_precio": 29.99, "card_number": "4111111111111111", "card_exp_month": "12", "card_exp_year": "2025", "card_cvc": "123", "card_name": "Juan Perez" }

Validación Luhn • AVS • CVV

POST /api/pago_ath.php
Requiere Token

Procesar pago con ATH Móvil

ATH Móvil Digital Wallet
Ver detalles

Parámetros:

{ "data": { "status": "completed", "transaction_id": "ATH123456789" }, "pq_id": [1, 2], "anombre_de": ["Juan Perez"], "pq_precio": 29.99, "cod_vend": "V001", "iny_fecha": "2026-02-15 10:00", "iny_direccion": "Calle Principal 123", "pi_id": [1, 2], "pp_id": 1 }

Respuesta:

{ "success": true, "data": { "mensaje": "Pago ATH procesado exitosamente", "us_id": 123, "cp_code": "CP20260218001", "transaction_id": "ATH123456789", "status": "completed", "monto": 29.99, "metodo": "ATH Móvil", "orden_enviada": true } }

Soporta estados: completed, pending

GET /api/mis_pagos.php
Requiere Token

Obtener historial completo de pagos del usuario

Ver detalles

Parámetros opcionales:

estado: Filtrar por estado (1=aprobado, 0=rechazado)

Respuesta:

{ "success": true, "data": { "pagos": [ { "cp_code": "CP20260206001", "fecha": "2026-02-06 14:30:00", "estado": "aprobado", "metodo": "tarjeta", "transaction_id": "60123456789", "total": 29.99, "items": [ { "titulo": "Certificado Médico", "precio": 29.99, "a_nombre_de": "Juan Perez", "fecha_servicio": "2026-02-15 10:00" } ] } ], "total": 15 } }
POST /api/cancelar_membresia.php
Requiere Token

Cancelar suscripción de membresía activa en Authorize.net

Ver detalles

Parámetros:

{ "subscriptionId": "66228033" }

Respuesta exitosa:

{ "success": true, "data": { "message": "Membresía cancelada exitosamente", "subscriptionId": "66228033" } }

Valida pertenencia y estado activo

GET /api/detalle_pago.php?cp_code=CP20260101
Requiere Token

Obtener detalles completos de un pago específico

Ver detalles

Parámetros requeridos:

cp_code: Código de compra (ej: CP20260206001)

Respuesta:

{ "success": true, "data": { "cp_code": "CP20260206001", "cp_fecha": "2026-02-06", "cp_metodo": "tarjeta", "items": [ { "pq_id": 1, "anombre_de": "Juan Perez", "txn_id": "60123456789", "iny_fecha": "2026-02-15 10:00", "iny_direccion": "123 Main St" } ] } }
POST /api/enviar_orden.php
Requiere Token

Enviar orden médica por email después de un pago exitoso

Email automático HTML + PDF
Ver detalles

Parámetros:

{ "cp_code": "CP202602091234" }

Respuesta exitosa:

{ "success": true, "message": "Orden enviada exitosamente", "us_id": "29582", "cp_code": "CP202602091234", "email": "usuario@example.com", "ordenes_enviadas": 2, "ordenes": [ { "pq_titulo": "Orden Médica General", "anombre_de": "Juan Perez", "cp_id": 123 } ], "html_enviado": "..." }

Este endpoint se ejecuta automáticamente después de un pago exitoso

Órdenes Médicas

POST /api/crear_compra.php
Requiere Token

Registra una intención de compra en paquetes_compras. Genera automáticamente el cp_code (prefijo DR + 8 caracteres) y un token único url_generado_pago para consultar el detalle.

Ver detalles

Parámetros:

{ "pq_id": 1, "us_id": 42, "anombre_de": "Juan Pérez" }

Respuesta:

{ "status": "success", "message": "Compra registrada correctamente", "data": { "cp_id": 15, "cp_code": "DR80V0Z6GC", "pq_id": 1, "us_id": 42, "cp_est": 0, "cp_fecha": "2026-03-19 10:30:00", "anombre_de": "Juan Pérez", "url_generado_pago": "MTc0MjM5NjIwMGFiY2RlZjAxMjM0NTY3" } }
cp_code autogerado DR+8 url_generado_pago único cp_est siempre 0
GET /api/mis_ordenes.php?limit=20&estado=1
Requiere Token

Obtener órdenes médicas del usuario autenticado

Ver detalles

Parámetros opcionales:

limit: Número de resultados (default: 50) offset: Inicio de paginación (default: 0) estado: Filtrar por estado (1=completado, 0=pendiente)

Respuesta:

{ "success": true, "data": [ { "cp_id": 1, "cp_code": "CP20260206001", "cp_fecha": "2026-02-06", "cp_est": 1, "pq_nombre": "Certificado Médico", "anombre_de": "Juan Perez", "txn_id": "60123456789", "iny_fecha": "2026-02-15 10:00", "iny_direccion": "123 Main St" } ] }
GET /api/todas_las_ordenes.php
Requiere Token

Obtener todas las órdenes del sistema (solo administradores)

Ver detalles

Permisos:

Solo usuarios con rol de administrador pueden acceder

Parámetros opcionales:

limit: Número de resultados (default: 100) offset: Inicio de paginación (default: 0) fecha_desde: Filtrar desde fecha (YYYY-MM-DD) fecha_hasta: Filtrar hasta fecha (YYYY-MM-DD) estado: Filtrar por estado

Respuesta:

{ "success": true, "data": [ { "cp_id": 1, "cp_code": "CP20260206001", "us_nombres": "Juan Perez", "us_email": "juan@ejemplo.com", "cp_fecha": "2026-02-06", "cp_est": 1, "pq_nombre": "Certificado Médico", "txn_id": "60123456789", "total_pagado": 29.99 } ], "total_registros": 150 }

Perfil de Usuario

GET /api/perfil.php
Requiere Token

Obtener información del perfil del usuario autenticado

Ver detalles

Respuesta:

{ "success": true, "data": { "us_id": 123, "us_nombres": "Juan Perez", "us_email": "juan@ejemplo.com", "us_telefono": "787-123-4567", "us_direccion": "123 Main St", "us_ciudad": "San Juan", "us_code_postal": "00901" } }
POST /api/actualizar_perfil.php
Requiere Token

Actualizar información del perfil con soporte para subir archivos

Ver detalles

Content-Type:

multipart/form-data

Parámetros:

us_nombres: string (required) us_telefono: string (optional) us_pais: string (optional) us_direccion: string (optional) us_ciudad: string (optional) us_fech_nac: date YYYY-MM-DD (optional) pl_id: int (optional) us_code_postal: string (optional) num_id: string (optional) num_id_tipo: string (optional) archivo: file - imagen JPEG/PNG, max 5MB (optional)

Respuesta:

{ "success": true, "data": { "mensaje": "Perfil actualizado exitosamente", "usuario": { "us_id": 123, "us_nombres": "Juan Perez Updated", "archivo": "123_1234567890_5678.jpg", "archivo_url": "https://doctorrecetas.com/upload/123_1234567890_5678.jpg" } } }

Soporta upload de identificación (JPEG, PNG máx 5MB)

GET /api/ver_uploads.php
Requiere Token

Ver archivos subidos y su información

Ver detalles

Respuesta:

{ "success": true, "data": { "usuario": { "us_id": 123, "us_nombres": "Juan Perez", "us_email": "juan@ejemplo.com", "num_id": "123456789", "num_id_tipo": "Licencia" }, "archivo": { "nombre": "123_1234567890_5678.jpg", "url": "https://doctorrecetas.com/upload/123_1234567890_5678.jpg", "existe": true, "tamano": 245678, "tamano_legible": "240.11 KB", "tipo": "image/jpeg", "fecha_modificacion": "2026-02-06 10:30:00" }, "archivo_existe": true } }

Catálogos y Productos

GET /api/categorias_principales.php

Obtener categorías principales de productos

Ver detalles

Respuesta:

{ "success": true, "data": [ { "ct_id": 1, "ct_nombre": "Certificados Médicos", "ct_descripcion": "Certificados para trabajo, escuela", "ct_activo": 1 }, { "ct_id": 2, "ct_nombre": "Recetas Digitales", "ct_descripcion": "Recetas médicas electrónicas", "ct_activo": 1 } ] }
GET /api/lista_categorias.php

Obtener listado completo de categorías con subcategorías

Ver detalles

Respuesta:

{ "success": true, "data": [ { "ct_id": 1, "ct_nombre": "Certificados Médicos", "subcategorias": [ { "sc_id": 10, "sc_nombre": "Certificado de Trabajo", "sc_precio": 29.99 } ] } ] }
GET /api/obtener_productos.php?ct_id=1

Obtener productos disponibles filtrados por categoría

Ver detalles

Parámetros opcionales:

ct_id: ID de categoría (opcional) activo: Filtrar por productos activos (1/0)

Respuesta:

{ "success": true, "data": [ { "pq_id": 1, "pq_nombre": "Certificado Médico de Trabajo", "pq_descripcion": "Certificado válido para trabajo", "pq_precio": 29.99, "ct_id": 1, "ct_nombre": "Certificados Médicos", "pq_activo": 1, "pq_tiempo_entrega": "24 horas" } ] }

Ubicaciones

GET /api/estados.php

Obtener listado de estados/países disponibles

Ver detalles

Respuesta:

{ "success": true, "data": [ { "es_id": 1, "es_nombre": "Puerto Rico", "es_codigo": "PR", "es_activo": 1 }, { "es_id": 2, "es_nombre": "Estados Unidos", "es_codigo": "US", "es_activo": 1 } ] }
GET /api/pueblos.php?es_id=1

Obtener listado de pueblos/ciudades por estado

Ver detalles

Parámetros opcionales:

es_id: ID del estado para filtrar pueblos (opcional)

Respuesta:

{ "success": true, "data": [ { "pl_id": 1, "pl_nomb": "San Juan", "es_id": 1, "pl_code_postal": "00901", "pl_activo": 1 }, { "pl_id": 2, "pl_nomb": "Bayamón", "es_id": 1, "pl_code_postal": "00956", "pl_activo": 1 } ] }

Asistente Virtual

POST /api/chat-ana.php

Chat con asistente virtual Ana (Gemini AI) para consultas médicas

Ver detalles

Parámetros:

{ "mensaje": "¿Qué servicios médicos ofrecen?", "historial": [] // Opcional: array de mensajes previos }

Respuesta:

{ "success": true, "data": { "respuesta": "Ofrecemos certificados médicos, recetas digitales...", "timestamp": "2026-02-06 10:30:00" } }

Powered by Google Gemini AI - Respuestas inteligentes en tiempo real

Autenticación Requerida

Los endpoints marcados con Requiere Token necesitan un token JWT válido en el header:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

Los tokens expiran después de 7 días (604,800 segundos)

Seguridad

Encriptación SSL/TLS

Todas las comunicaciones están encriptadas

Validación de Tarjetas

Algoritmo Luhn, AVS y CVV

PCI DSS Compliant

Cumplimiento de estándares de seguridad

Tokens JWT Seguros

Autenticación con expiración controlada