Introducción
DoctorRecetas API es la API REST de DoctorRecetas.com. Permite registrar usuarios, procesar pagos con tarjeta de crédito (Authorize.Net) y ATH Móvil, gestionar órdenes médicas y consultar el catálogo de productos. Todas las peticiones y respuestas usan JSON.
- Autenticar usuario con
POST /api/login.phppara obtener el token JWT. - Usar el token en el header
Authorization: Bearer <token>en todos los endpoints protegidos. - Crear la intención de compra con
POST /api/crear_compra.php. - Procesar el pago con
POST /api/pagar.phpoPOST /api/pago_ath.php. - Consultar las órdenes con
GET /api/mis_ordenes.php.
Autenticación JWT
El token se genera en POST /api/login.php y tiene una duración de 7 días (604,800 segundos). Envíalo en el header Authorization para acceder a los endpoints protegidos.
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
Formato de respuesta
Todas las respuestas siguen la misma estructura JSON:
✔ Éxito
{
"success": true,
"data": { ... }
}
✖ Error
{
"success": false,
"message": "Descripción del error."
}
Códigos de estado HTTP
| Código | Significado |
|---|---|
| 200 | Petición exitosa |
| 201 | Recurso creado correctamente |
| 401 | Token inválido o expirado |
| 403 | Sin permisos para el recurso |
| 404 | Recurso no encontrado |
| 409 | Conflicto — el recurso ya existe |
| 422 | Datos de entrada inválidos |
| 500 | Error interno del servidor |
/api/login.php
Autenticación de usuario
Autentica al usuario con su usuario y clave. Devuelve un token JWT válido por 7 días.
Body (JSON)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
usuario | string | ✔ | Usuario o email |
clave | string | ✔ | Contraseña del usuario |
POST /api/login.php
Content-Type: application/json
{
"usuario": "juanperez",
"clave": "MiPassword123"
}
{
"success": true,
"data": {
"us_id": 123,
"us_nombres":"Juan Pérez",
"es_vip": 1,
"token": "eyJ0eXAiOiJKV1Qi...",
"expires_in":604800
}
}
/api/registro.php
Registro de nuevo usuario
Registra un nuevo usuario en el sistema.
Body (JSON)
| Campo | Tipo | Req. |
|---|---|---|
us_nombres | string | ✔ |
us_email | string | ✔ |
us_usuario | string | ✔ |
us_clave | string | ✔ |
us_telefono | string | — |
us_direccion | string | — |
POST /api/registro.php
Content-Type: application/json
{
"us_nombres": "Juan Pérez",
"us_email": "juan@ejemplo.com",
"us_usuario": "juanperez",
"us_clave": "MiPassword123",
"us_telefono": "787-555-1234"
}
{
"success": true,
"data": { "us_id": 85 }
}
/api/verificar_o_registrar_usuario.php
Verificar o registrar usuario por email
Consulta si un usuario existe por correo. Si existe, envía un código de verificación de 6 dígitos (válido 10 min) vía email. Si no existe, lo registra y también envía el código. El token JWT se obtiene en el siguiente paso con /api/verificar_codigo.php.
Caso 1 — Solo verificar (correo existente)
| Campo | Tipo | Req. |
|---|---|---|
us_email | string | ✔ |
Caso 2 — Registrar (correo nuevo)
| Campo | Tipo | Req. |
|---|---|---|
us_email | string | ✔ |
us_nombres | string | ✔ |
us_telefono | string | ✔ |
us_clave | string | ✔ |
{
"status": "success",
"data": {
"existe": true,
"us_id": 42,
"us_nombres": "Andrés López",
"codigo_enviado": true
},
"message": "Usuario encontrado. Ingresa el código enviado a tu correo para continuar."
}
{
"status": "success",
"data": {
"existe": false,
"us_id": 85,
"codigo_enviado": true
},
"message": "Usuario registrado correctamente. Ingresa el código enviado a tu correo para obtener acceso."
}
/api/verificar_codigo.php
Verificar código y obtener token JWT
Recibe el correo y el código de 6 dígitos enviado al usuario. Si el código es válido y no ha expirado, devuelve el token JWT de sesión.
| Campo | Tipo | Req. |
|---|---|---|
us_email | string | ✔ |
codigo | string (6 dígitos) | ✔ |
{
"status": "success",
"data": {
"us_id": 42,
"us_nombres": "Andrés López",
"token": "eyJ0eXAiOiJKV1Qi...",
"expires_in": 604800
},
"message": "Código verificado correctamente. Sesión iniciada."
}
{ "status": "error", "message": "Código incorrecto" }
{ "status": "error", "message": "El código ha expirado. Solicita uno nuevo" }
/api/logout.php
Cerrar sesión e invalidar token
Cierra la sesión e invalida el token JWT activo.
Header requerido
Authorization: Bearer {token}
{
"success": true,
"message": "Sesión cerrada exitosamente"
}
/api/sesiones.php
Validar sesión activa
Valida el token JWT y devuelve la información del usuario autenticado.
{
"success": true,
"data": {
"us_id": 123,
"us_nombres": "Juan Pérez",
"us_email": "juan@ejemplo.com",
"token_valido":true
}
}
/api/solicitar_recuperacion.php
Solicitar email de recuperación
Envía un email con un token de recuperación al correo registrado.
Body (JSON)
| Campo | Tipo | Req. |
|---|---|---|
email | string | ✔ |
{
"success": true,
"message": "Email de recuperación enviado"
}
/api/validar_token_recuperacion.php
Validar token de recuperación
| Campo | Tipo | Req. |
|---|---|---|
token | string | ✔ |
{
"success": true,
"valid": true,
"message": "Token válido"
}
/api/restablecer_contrasena.php
Restablecer contraseña con token
| Campo | Tipo | Req. |
|---|---|---|
token | string | ✔ |
nueva_clave | string | ✔ |
{
"success": true,
"message": "Contraseña actualizada exitosamente"
}
/api/pagar.php
Procesar pago con tarjeta (Authorize.Net)
Procesa un pago con tarjeta de crédito/débito a través de Authorize.Net en producción. Soporta Visa, MasterCard, Amex y Discover.
Body (JSON)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
pq_id | array | ✔ | IDs de los productos |
anombre_de | array | ✔ | Nombres por producto |
pq_precio | number | ✔ | Monto total |
card_number | string | ✔ | Número de tarjeta |
card_exp_month | string | ✔ | Mes expiración (MM) |
card_exp_year | string | ✔ | Año expiración (YYYY) |
card_cvc | string | ✔ | Código de seguridad |
card_name | string | ✔ | Nombre en la tarjeta |
POST /api/pagar.php
Authorization: Bearer eyJ...
Content-Type: application/json
{
"pq_id": [1, 2],
"anombre_de": ["Juan Pérez"],
"pq_precio": 75.00,
"card_number": "4111111111111111",
"card_exp_month":"12",
"card_exp_year": "2027",
"card_cvc": "123",
"card_name": "Juan Pérez"
}
{
"success": true,
"data": {
"cp_code": "DR80V0Z6GC",
"transaction_id": "60123456789",
"monto": 75.00,
"metodo": "tarjeta"
}
}
/api/pago_ath.php
Procesar pago con ATH Móvil
Procesa un pago mediante ATH Móvil. Soporta estados completed y pending.
Body (JSON)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
data.status | string | ✔ | completed | pending |
data.transaction_id | string | ✔ | ID de ATH Móvil |
pq_id | array | ✔ | IDs de productos |
anombre_de | array | ✔ | Nombres por producto |
pq_precio | number | ✔ | Monto total |
iny_fecha | string | — | Fecha inyección |
iny_direccion | string | — | Dirección inyección |
pi_id | array | — | IDs inyección |
pp_id | int | — | ID pueblo inyección |
{
"success": true,
"data": {
"mensaje": "Pago ATH procesado exitosamente",
"cp_code": "DR80V0Z6GC",
"transaction_id": "ATH123456789",
"monto": 29.99,
"metodo": "ATH Móvil",
"orden_enviada": true
}
}
/api/mis_pagos.php
Historial de pagos del usuario
Devuelve el historial completo de pagos del usuario autenticado.
Parámetros opcionales (query string)
| Param | Tipo | Descripción |
|---|---|---|
estado | int | 1 = aprobado · 0 = rechazado |
{
"success": true,
"data": {
"pagos": [
{
"cp_code": "DR80V0Z6GC",
"fecha": "2026-05-13 14:30:00",
"estado": "aprobado",
"metodo": "tarjeta",
"transaction_id": "60123456789",
"total": 75.00
}
],
"total": 5
}
}
/api/cancelar_membresia.php
Cancelar membresía en Authorize.Net
Cancela la suscripción activa del usuario en Authorize.Net. Valida que la membresía pertenezca al usuario autenticado.
Body (JSON)
| Campo | Tipo | Req. |
|---|---|---|
subscriptionId | string | ✔ |
{
"success": true,
"data": {
"message": "Membresía cancelada exitosamente",
"subscriptionId": "66228033"
}
}
/api/detalle_pago.php?cp_code=DR80V0Z6GC
Detalle de un pago específico
Query param
| Param | Tipo | Req. |
|---|---|---|
cp_code | string | ✔ |
{
"success": true,
"data": {
"cp_code": "DR80V0Z6GC",
"cp_fecha": "2026-05-13",
"cp_metodo": "tarjeta",
"items": [
{
"pq_id": 1,
"anombre_de": "Juan Pérez",
"txn_id": "60123456789"
}
]
}
}
/api/enviar_orden.php
Enviar orden médica por email
Envía la orden médica por email al usuario tras un pago exitoso. Se ejecuta automáticamente después de pagar.php y pago_ath.php.
Body (JSON)
| Campo | Tipo | Req. |
|---|---|---|
cp_code | string | ✔ |
{
"success": true,
"message": "Orden enviada exitosamente",
"cp_code": "DR80V0Z6GC",
"email": "juan@ejemplo.com",
"ordenes_enviadas":2
}
/api/crear_compra.php
Registrar intención de compra
Registra una intención de compra en paquetes_compras. Genera automáticamente el cp_code (prefijo DR + 8 chars) y un token único url_generado_pago.
Body (JSON)
| Campo | Tipo | Req. |
|---|---|---|
pq_id | int | ✔ |
us_id | int | ✔ |
anombre_de | string | — |
{
"status": "success",
"data": {
"cp_id": 15,
"cp_code": "DR80V0Z6GC",
"pq_id": 1,
"cp_est": 0,
"cp_fecha": "2026-05-13 10:30:00",
"anombre_de": "Juan Pérez",
"url_generado_pago": "MTc0MjM5Nj..."
}
}
/api/mis_ordenes.php
Órdenes del usuario agrupadas por código
Devuelve las órdenes del usuario agrupadas por cp_code. Incluye URLs de descarga por producto según el tipo de orden.
Tipos de orden y descarga
| Tipo | Nombre | Descargable |
|---|---|---|
1 | Orden Médica | ✔ url_orden |
2 | Cita de Evaluación | — sin URL |
3 | Certificado Médico | — sin URL |
4 | Paquete | ✔ url_paquetes[] |
5 | Programas | ✔ url_orden |
6 | Inyecciones | — sin URL |
{
"success": true,
"data": [{
"cp_code": "DR80V0Z6GC",
"cp_id": "15",
"cp_fecha": "05/13/2026",
"cp_est": 1,
"pq_precio_total": 75.00,
"productos": [{
"pq_titulo": "Orden Médica General",
"pq_tipo_orden": "1",
"descargable": true,
"url_orden": "https://doctorrecetas.host/pdf/..."
}]
}]
}
{
"productos": [{
"pq_tipo_orden": "4",
"descargable": true,
"url_paquetes": [
{ "titulo":"Labs Básicos", "url":"https://..." },
{ "titulo":"Consulta", "url":"https://..." }
]
}]
}
/api/todas_las_ordenes.php
Todas las órdenes del sistema (admin)
Devuelve todas las órdenes del sistema. Solo usuarios con rol de administrador pueden acceder.
Parámetros opcionales
| Param | Tipo | Descripción |
|---|---|---|
limit | int | Default: 100 |
offset | int | Default: 0 |
fecha_desde | date | YYYY-MM-DD |
fecha_hasta | date | YYYY-MM-DD |
estado | int | 1 = pagado · 0 = pendiente |
{
"success": true,
"data": [
{
"cp_code": "DR80V0Z6GC",
"us_nombres": "Juan Pérez",
"cp_fecha": "2026-05-13",
"cp_est": 1,
"total_pagado": 75.00
}
],
"total_registros": 150
}
/api/perfil.php
Perfil del usuario autenticado
Devuelve la información del perfil del usuario.
{
"success": true,
"data": {
"us_id": 123,
"us_nombres": "Juan Pérez",
"us_email": "juan@ejemplo.com",
"us_telefono": "787-123-4567",
"us_direccion": "123 Main St",
"us_ciudad": "San Juan",
"us_code_postal": "00901"
}
}
/api/actualizar_perfil.php
Actualizar perfil con soporte de archivos
| Campo | Tipo | Req. |
|---|---|---|
us_nombres | string | ✔ |
us_telefono | string | — |
us_pais | string | — |
us_direccion | string | — |
us_ciudad | string | — |
us_fech_nac | date | — |
us_code_postal | string | — |
num_id | string | — |
num_id_tipo | string | — |
archivo | file | — |
{
"success": true,
"data": {
"mensaje": "Perfil actualizado exitosamente",
"usuario": {
"us_id": 123,
"us_nombres": "Juan Pérez Updated",
"archivo_url":"https://doctorrecetas.com/upload/..."
}
}
}
/api/ver_uploads.php
Ver archivos subidos del usuario
Devuelve los datos del usuario y la información del archivo de identificación subido.
{
"success": true,
"data": {
"usuario": {
"us_id": 123,
"num_id": "123456789",
"num_id_tipo":"Licencia"
},
"archivo": {
"url": "https://doctorrecetas.com/upload/...",
"existe": true,
"tamano_legible":"240.11 KB"
}
}
}
/api/categorias_principales.php
Categorías principales de productos
Devuelve las categorías principales activas del catálogo.
{
"success": true,
"data": [
{
"ct_id": 1,
"ct_nombre": "Certificados Médicos",
"ct_descripcion": "Certificados para trabajo, escuela",
"ct_activo": 1
}
]
}
/api/lista_categorias.php
Listado con subcategorías
Devuelve todas las categorías con sus subcategorías anidadas.
{
"success": true,
"data": [{
"ct_id": 1,
"ct_nombre": "Certificados Médicos",
"subcategorias": [{
"sc_id": 10,
"sc_nombre": "Certificado de Trabajo",
"sc_precio": 29.99
}]
}]
}
/api/obtener_productos.php
Productos filtrados por categoría
Query params opcionales
| Param | Tipo | Descripción |
|---|---|---|
ct_id | int | ID de categoría |
activo | int | 1 = activos · 0 = inactivos |
{
"success": true,
"data": [{
"pq_id": 1,
"pq_nombre": "Certificado Médico",
"pq_precio": 29.99,
"ct_nombre": "Certificados Médicos",
"pq_tiempo_entrega": "24 horas"
}]
}
/api/productos_todos.php
Todos los productos del catálogo
Devuelve el catálogo completo de productos sin filtros.
{
"success": true,
"data": [ { "pq_id": 1, ... }, ... ]
}
/api/estados.php
Listado de estados / países
Devuelve los estados y países disponibles para selección de dirección.
{
"success": true,
"data": [
{ "es_id":1, "es_nombre":"Puerto Rico", "es_codigo":"PR" },
{ "es_id":2, "es_nombre":"Estados Unidos", "es_codigo":"US" }
]
}
/api/pueblos.php
Pueblos / ciudades por estado
Query params opcionales
| Param | Tipo | Descripción |
|---|---|---|
es_id | int | ID del estado para filtrar |
{
"success": true,
"data": [
{ "pl_id":1, "pl_nomb":"San Juan", "pl_code_postal":"00901" },
{ "pl_id":2, "pl_nomb":"Bayamón", "pl_code_postal":"00956" }
]
}
/api/chat-ana.php
Chat con asistente virtual Ana (Gemini AI)
Interactúa con la asistente virtual Ana, impulsada por Google Gemini AI. Especializada en consultas sobre los servicios de DoctorRecetas.
Body (JSON)
| Campo | Tipo | Req. | Descripción |
|---|---|---|---|
mensaje | string | ✔ | Pregunta del usuario |
historial | array | — | Mensajes previos del chat |
POST /api/chat-ana.php
Content-Type: application/json
{
"mensaje": "¿Qué servicios médicos ofrecen?",
"historial": []
}
{
"success": true,
"data": {
"respuesta": "Ofrecemos certificados médicos, recetas...",
"timestamp": "2026-05-13 10:30:00"
}
}