false, 'message' => 'Método no permitido']); exit(); } // 2. Leer datos JSON $input = json_decode(file_get_contents('php://input'), true); if (!isset($input['id'])) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Falta el ID de la reserva']); exit(); } $id = (int)$input['id']; try { // 3. Verificar que la reserva existe y está en estado pendiente_pago $stmt = $pdo->prepare(" SELECT id, estado, codigo, importe, referencia_bizum, cabina_id FROM reservas WHERE id = ? "); $stmt->execute([$id]); $reserva = $stmt->fetch(PDO::FETCH_ASSOC); if (!$reserva) { http_response_code(404); echo json_encode(['success' => false, 'message' => 'Reserva no encontrada']); exit(); } if ($reserva['estado'] !== 'pendiente_pago') { http_response_code(400); echo json_encode([ 'success' => false, 'message' => 'La reserva no está en estado pendiente_pago (estado actual: ' . $reserva['estado'] . ')' ]); exit(); } // 4. Cambiar el estado a pagada_pendiente_aprobacion $stmt = $pdo->prepare(" UPDATE reservas SET estado = 'pagada_pendiente_aprobacion' WHERE id = ? "); $stmt->execute([$id]); if ($stmt->rowCount() === 0) { http_response_code(500); echo json_encode(['success' => false, 'message' => 'No se pudo actualizar la reserva']); exit(); } // 5. Respuesta exitosa echo json_encode([ 'success' => true, 'message' => 'Pago Bizum verificado correctamente. La reserva pasa a estado "Pagada pendiente de aprobación".', 'data' => [ 'id' => $id, 'codigo' => $reserva['codigo'], 'estado_anterior' => 'pendiente_pago', 'estado_nuevo' => 'pagada_pendiente_aprobacion', 'importe' => $reserva['importe'], 'referencia_bizum' => $reserva['referencia_bizum'] ] ]); } catch (PDOException $e) { http_response_code(500); echo json_encode([ 'success' => false, 'message' => 'Error en el servidor', 'error' => $e->getMessage() ]); } ?>