Integrando Moodle y Prestashop

escrito por un humano, no por la IA clock12 min

Moodle es una estupenda plataforma de aprendizaje de código abierto, pero monetizar los cursos creados en Moodle siempre ha sido un problema. Hasta la versión 3.10 no se incorporó la opción de matricularse en un curso realizando un pago y actualmente el número de plugins para procesar pagos disponibles es muy pequeño.

Si creas cursos a título individual y tienes una pequeña plataforma Moodle para publicarlos, puede que las pasarelas de pago de PayPal o Stripe (disponibles para Moodle) sean suficientes, y a pesar de sus abultadas comisiones no necesites complicarte mas la vida.

Pero si tienes una plataforma de aprendizaje de un tamaño moderado o grande, varios creadores de contenidos y especialmente si no solo vendes cursos, lo mejor es que tus cursos se vendan a través de una plataforma de eCommerce especializada, como por ejemplo Prestashop.

En este artículo te presento un módulo gratuito para Prestashop que te ayudará a integrar ambas plataformas, completando la matriculación del alumno en un curso dentro de la plataforma Moodle, tras haber completado el pago de un pedido en tu plataforma de eCommerce Prestashop. También se encargará de registrar a tu cliente como alumno de la plataforma, en el caso de que aún no lo fuese.

Instalando el módulo

El módulo moodlecon es un módulo gratuito y no lo encontrarás en Addons Marketplace. Puedes descargarte aquí la última release del módulo y este es su repositorio Github completo.

Instalar el módulo es un proceso sencillo y funciona como con cualquier otro módulo externo:

  1. Entra en el área de administración de tu Prestashop
  2. Vete al Module Manager.
  3. Haz click en el botón Subir un módulo.
  4. Arrastra y suelta hasta la caja de diálogo el fichero moodlecon.zip o haz click sobre el diálogo y navega hasta la ubicación del módulo para luego selecciónalo.
  5. Espera a que Prestashop instale el módulo y te lo confirme con este mensaje:
módulo prestashop instalado con éxito

Preparando Moodle para la integración

Esta puede resultar la parte mas compleja del proceso. Necesitarás de un usuario con permisos de administrador de tu plataforma Moodle y deberás saber desenvolverte por los menús de administración de Moodle.

El módulo moodlecon se integra con tu plataforma Moodle a través del servició web que ésta provee. Para poder usar el módulo de Prestashop es necesario que habilites el servicio web, que crees un token de acceso para tu Prestashop, que autorices una serie de acciones a través del servicio web y que instales un plugin de Moodle requerido.

Voy a describir el proceso paso a paso sobre una instancia de Moodle recién instalada. La historia de tu instancia de Moodle puede ser otra y puede que tengas que adaptar alguno de los pasos a tu caso particular.

Instalando el plugin local_wsgetroles

El plugin «Webservice get roles» es una extensión del servicio web que cubre una carencia del propio servicio web de Moodle y que es requerido por nuestro módulo de Prestashop.

Puedes descargarte el plugin en este enlace. Usa el botón Download para descargarte la última versión disponible (actualmente v0.9.0.1 (2020073000)).

En Moodle vete a Administración del sitio > Extensiones > Instalar complementos

instalar un plugin de moodle

Arrastra y suelta el archivo local_wsgetroles_moodle39_2020073000.zip descargado anteriormente en el área con el borde discontinuo. Pulsa en Instalar complemento desde archivo ZIP.

Pulsa en Continuar en la ventana de confirmación.

Pulsa Continuar en la ventana de Información de la versión (si aparece)

Pulsa en Actualizar base de datos de Moodle ahora en la ventana de Comprobación de ‘plugins’.

actualizar la base de datos de moodle

Debe aparecer un mensaje indicando que se ha actualizado la versión y que el plugin local_wsgetroles se ha añadido con éxito. Pulsa Continuar para finalizar.

Habilitar el servicio web

Vete a Administración del sitio > Opciones avanzadas y busca el setting Habilitar servicios web (enablewebservices). asegúrate de que la casilla esté marcada (habilitado).

habilitar el servicio web

Vete a Administración del sitio > Servidor > Servicios Web > Administrar protocolos y asegúrate de que al menos el protocolo REST esté habilitado:

habilitar el protocolo rest

Crea un usuario específico para el servicio web, a través de Administración del sitio > Usuarios > Cuentas > Crear un nuevo usuario. Establece una contraseña segura para dicho usuario.

crear una nueva cuenta de usuario

Verificar los permisos del usuario, para ello vete a Administración del sitio > Usuarios > Permisos > Comprobar los permisos del sistema y busca y selecciona el usuario que acabas de crear (web_service_user). Pulsa en Mostrar los permisos de este usuario.

Navega a la sección Servicio Web: Protocolo REST y comprueba que el valor de Usar protocolo REST (webservice/rest:use) sea .

Permitir protocolo rest para el usuario

Ahora vamos a crear nuestro servicio de acceso a través del servicio web, para ello vamos a Administración del sitio > Servidor > Servicios Web > Servicios externos y pulsamos en Agregar.

Rellena los campos como se muestra abajo y pulsa en Agregar servicio.

crear un servicio externo

Lo siguiente es agregar las funciones que podremos ejecutar a través de este servicio, para ello vamos a Administración del sitio > Servidor > Servicios Web > Servicios externos, localizamos el servicio que acabamos de crear y le damos al botón de Funciones y en la siguiente pantalla a Agregar funciones.

lista de servicios externos

Hay que añadir las siguientes y pulsar el botón Agregar funciones:

  • core_webservice_get_site_info
  • core_course_get_courses
  • core_user_get_users_by_field
  • core_user_create_users
  • core_role_assign_roles
  • enrol_manual_enrol_users
  • local_wsgetroles_get_roles (del plugin local_wsgetroles)
agregar funciones al servicio externo

El siguiente paso consiste en asociar el usuario que creamos anteriormente (web_service_user) con este nuevo servicio (ps_moodlecon). Para ello vamos de nuevo a Administración del sitio > Servidor > Servicios Web > Servicios externos y esta vez usamos el botón Usuarios autorizados dentro de nuestro servicio «Integración Prestahsop».

En la parte de la derecha buscamos a nuestro usuario (web_service_user), lo seleccionamos y le damos a Agregar.

autorizar un usuario al servicio externo

Es posible que nos indique que el usuario que hemos elegido no tiene permisos necesarios para las funciones que hemos añadido al servicio. Lo indicará en la sección Cambiar ajustes para usuarios autorizados como Permisos ausentes. Desplegar la sección y tomar nota de los permisos que nos faltan.

permisos ausentes

Los permisos que faltan debemos añadirlos a un rol, que será el que asignemos luego al usuario. Para ello iremos a Administración del sitio > Usuarios > Permisos > Definir roles y pulsaremos en Añadir un nuevo rol.

En la siguiente ventana, en Usar rol o arquetipo, elegiremos Usuario identificado y pulsaremos en Continuar.

crear un nuevo rol paso inicial

Rellenar los campos de la pantalla de Agregando nuevo rol como se muestra a continuación:

crear un nuevo rol

En la casilla de Permitir asignar roles debemos seleccionar al menos ‘Estudiante’, que como veremos mas adelante será el rol por defecto con el que matricularemos a los alumnos. Si habrá casos en los que matriculemos con otros roles (ej. Profesor) debemos también seleccionarlos aquí.

crear un nuevo rol permitir asignar roles

En la parte de abajo aparecen la lista de capacidades del rol. Aquí es donde tendremos que añadir todas las que se listaban bajo permisos ausentes. Para hacer esto, lo más cómodo es poner el nombre corto en Filtro, y a continuación marcar (check) la capacidad buscada (con el nombre idéntico).

crear un nuevo rol añadir permisos

Además de los permisos ausentes, debes permitir estos otros dos permisos que son necesarios para el funcionamiento del módulo, aunque Moodle no los detecta como ausentes:

  • moodle/site:viewuseridentity
  • moodle/user:viewalldetails

Para terminar de definir este nuevo rol, debemos pulsar en Crear este rol.

El siguiente paso será asignar este nuevo role a nuestro usuario del servicio web, para ello vamos a Administración del sitio > Usuarios > Permisos > Asignar roles de sistema, seleccionamos el rol Módulo Prestahsop, en la parte de la derecha buscamos web_service_user, seleccionamos el usuario y damos a Agregar.

asignar roles de sistema

Para validar que lo hemos hecho bien, debemos ir a Administración del sitio > Servidor > Servicios Web > Servicios externos, buscar la fila del servicio «Integración Prestahsop» y pulsar en Usuarios autorizados. En la sección de Cambiar ajustes para usuarios autorizados nos aparecerá el usuario Web service user, pero esta vez no debe indicar que haya permisos ausentes.

sin permisos ausentes

Ya casi hemos terminado con esta parte. Lo último que nos queda por hacer es crear un token para el usuario del servicio web que es una forma de empaquetar las credenciales de un usuario de manera que podamos usarlo mas tarde al configurar el módulo Prestashop, sin revelar realmente la contraseña del usuario. Para ello vamos a Administración del sitio > Servidor > Servicios Web > Administrar fichas (tokens) y pulsamos en Crear ficha (token).

En usuario seleccionamos Web service user y en servicio elegimos Integración Prestashop.

crear un token de acceso

Después le damos a Guardar cambios y anotamos el código hexadecimal de la ficha que nos listará para el usuario Web service user:

listado de tokens creados

Las tareas descritas en esta sección se pueden ir siguiendo de forma mas sencilla a través de Administración del sitio > Servidor > Servicios Web > Vista general apartado Permitir un sistema externo para controlar Moodle.

Opcionalmente puedes probar tu configuración con la entrada 10ª de esta lista de tareas. Con las opciones que se muestran a continuación el servicio web debería funcionar y devolver un XML con información sobre tu instancia de Moodle:

cliente de prueba de servicio web
cliente de prueba de servicio web establecer token
cliente de prueba de servicio web resultado correcto

Si te aparece un error como el de abajo, algo no has terminado de configurar adecuadamente. Revisa de nuevo esta guía paso a paso.

cliente de prueba de servicio web resultado erróneo

Configurando el módulo de Prestashop

Si has llegado hasta aquí ya has hecho la parte mas compleja, ¡¡enhorabuena!!

Ahora queda que conectemos el módulo de Prestashop con tu instancia de Moodle, y que indiquemos bajo que condiciones hay que matricular a los usuarios en los cursos.

Configura dónde esta tu instancia de Moodle

Vete al backoffice de tu tienda de Prestashop, a la sección de Module Manager, localiza el módulo ‘Conector con Moodle’ (sección Administración) y pulsa en Configurar.

En la sección Configura cómo acceder a tu instancia de Moodle a través del Servicio Web, introduce lo siguiente:

  • URL del servicio web de Moodle: https://<tu-instancia-de-moodle>/webservice/rest/server.php
    • Si tu instancia de Moodle es (subdominio) moodle.example.com –> https://moodle.example.com/webservice/rest/server.php
    • Si tu instancia de Moodle es (directorio) example.com/moodle –> https://example.com/moodle/webservice/rest/server.php
  • Token del servicio web de Moodle: El código hexadecimal del token de usuario que generamos al habilitar el servicio web en Moodle.

Pulsa el botón Guardar y luego pulsa en Probar Conexión para validar que Prestashop y Moodle se pueden comunicar. Si todo es correcto aparecerá un mensaje como este (con el nombre de tu instancia de Moodle):

cómo acceder a tu instancia moodle a través del servicio web

Si te aparece el mensaje «Errores al tratar de conectarse con Moodle. Revisa los ajustes de conexión.», algo no se ha hecho, o no se ha hecho de la forma indicada en la sección Habilitar el servicio web.

Configura el comportamiento del módulo

La sección Configurar el comportamiento del módulo te permite ajustar algunas características del comportamiento de éste. Te explico que significa cada una de ellas.

Matriculación Automática: Si activas esta opción, cuando un pedido pase a un estado ‘validado’ (ej. Pago aceptado), el módulo va a revisar si incluye algún producto asociado a un curso y matriculará automáticamente al alumno en dicho(s) curso(s). Lo normal es que dejes esta característica a .

Matriculación Manual: Esta opción va a mostrar un botón Matricular ahora en la página de detalles de un pedido en el backoffice de tu tienda. Cuando pulsas el botón se dispara el proceso descrito anteriormente y se matricula al cliente en los cursos que estén asociados a productos presentes en el pedido. El botón solo aparecerá en aquellos pedidos que estén en un estado ‘validado’. Mi recomendación es que dejes esta característica a , incluso si tienes activo el modo automático.

configurar el comportamiento del módulo

Contraseña por defecto: Antes de matricular un alumno en un curso el módulo validará si hay un alumno dado de alta en Moodle con la misma cuenta de correo que nuestro cliente. Si no existe dicho alumno, lo dará de alta usando la información de nuestro cliente en Prestashop (nombre, apellidos y correo electrónico). Y al crear una cuenta nueva tiene que asignarle una contraseña. Hay dos estrategias:

  • Si fijas un valor para este campo, entonces se usará esta contraseña para los alumnos dados de alta. En este caso te recomiendo que no hagas pública la contraseña y que el alumno cree una contraseña nueva, propia y secreta usando el mecanismo de recuperación de contraseña.
  • Si lo dejas en blanco entonces Moodle le enviará un correo con una contraseña temporal para entrar por primera vez. El alumno tendrá que crear una contraseña nueva tras este primer inicio de sesión en Moodle.

Enviar notificaciones vía e-mail: Si la activas, Prestashop enviará un correo informando de que se ha realizado la matriculación en los cursos de forma efectiva. Este correo no siempre tiene que ir a la par de la confirmación del pedido. Por ejemplo, para los pedidos que se pagan vía transferencia bancaria, la matriculación no se hace efectiva hasta que un empleado confirma la recepción de la transferencia.

Fija los valores que desees para estas características en tu tienda y dale al botón Guardar.

Crea las páginas de producto para tus cursos

En este aspecto no me voy a explayar por que está fuera del objetivo del artículo. Solo comentarte que los casos que sueles encontrarte serán:

  1. El mas frecuente es que puedas crear una página de producto para el curso tal cual, en la que se describa simplemente el curso.
  2. Una variación de la anterior es que tengas varios ‘sabores’ de tu curso (como por ejemplo básico/estándar/avanzado; on-line/(semi-)presencial; con/sin diploma) estando todas las opciones recogidas en una misma ficha de producto.
  3. Otra opción es que el curso sea un regalo o parte de un pack. Por ejemplo, vendes un instrumento de medida, que incluye el curso de manejo; o un libro físico que tiene una serie de extensiones (videos, lecturas, tests, …) en tu plataforma de formación on-line.
  4. Otro caso común es que el curso sea una opción. Serán ejemplos como los anteriores, pero la tienda te deja elegir si quieres o no incluir el curso correspondiente.

Todos estos casos son configurables en el módulo, ya que si tu Prestashop tiene activado las combinaciones de producto, vas a poder asociar el producto como tal sin combinaciones (caso 1), una combinación concreta del producto (casos 2 y 4) o todas las combinaciones posibles del producto (potencialmente caso 3), con tu curso (o cursos) en Moodle.

Lo que si es importante es que anotes el ID del producto de Prestashop que vas a querer asociar al curso. El ID del producto aparece en la columna de mas a la izquierda en los listados de Productos del Catálogo de Prestashop.

obtener el ID de un producto

Asociar tus productos con los cursos

Volvamos a la configuración del módulo Conector con Moodle. Para asociar los productos de tu tienda con cursos de Moodle, usa la sección Crear un nuevo enlace entre un producto y un curso.

Lo básico que necesitarás para crear un enlace es el ID del producto de Prestashop y el ID del curso de Moodle. Introdúcelos en las casillas correspondientes, selecciona como rol de matriculación ‘student’, activa el enlace y pulsa en Añadir para crear tu primer enlace.

crear un nuevo enlace entre un producto y un curso

Nota: Si no sabes cual es el ID de tu curso de Moodle, simplemente entra en el curso y mira la URL de tu navegador. El ID es el número que aparece al final de la misma (2):
https://moodle.example.com/course/view.php?id=2

El resto de las opciones de esta sección son para los casos mas complejos.

Un caso habitual es que tengamos que asociar el curso solo con una combinación concreta del producto (o que el curso que asociemos dependa de la combinación concreta). En este caso, hay que fijar Enlazar una combinación en particular a para luego elegir la combinación concreta en la lista bajo Combinación del Producto.

crear un nuevo enlace entre un producto con combinaciones y un curso

Otro caso frecuente es que tengas que matricular al alumno con un rol para el curso diferente de estudiante. El caso más frecuente es que tengas también el de profesor. En ese caso, deberás elegir el role apropiado dentro de la lista de Rol de Matriculación. Aparecerán listados los roles que hayas definido en tu instancia de Moodle.

El caso de fijar una Duración de la matrícula corresponde generalmente con cursos que se ofrecen de forma gratuita. Al fijarlo se establece una fecha de fin del periodo de matriculación. Si el alumno no ha completado el curso en ese plazo, no podrá seguir accediendo al mismo. Se indica como un número de días que se contarán desde el momento de la matriculación por pate del módulo.

Finalmente el campo Enlace Activo, que de forma genérica se establecerá a , puede ser necesario fijarlo a No cuando queramos definir una serie de enlaces productos-cursos, pero no queramos que se empiecen a hacer las matriculaciones de forma inmediata. Es una característica que podremos modificar a posteriori, una vez creado un enlace, para desactivar su efecto por un tiempo.

Los enlaces añadidos aparecerán en el Listado de enlaces definidos. Desde este listado podremos cambiar el estado de activo o inactivo de un enlace (usando el icono del check/aspa); o eliminarlo cuando ya no sea necesario (usando el botón Eliminar).

listado de enlaces definidos

The one more thing

Ya puestos te comento algunas cosas mas que conviene saber sobre el módulo.

Si tu tienda Prestashop no tiene activadas las combinaciones de productos, la ventana que verás en la sección Crear un nuevo enlace entre un producto y un curso será algo mas sencilla que la que he puesto arriba. Esto no afecta a lo que te he explicado sobre cómo crear los enlaces, pero evidentemente en tu caso siempre será el de «Sin combinaciones».

crear un nuevo enlace entre un producto y un curso sin combinaciones de productos

La página de configuración del módulo tiene una última sección de la que no hemos hablado. En la sección Listado de matriculaciones aparece un registro de las acciones que el módulo ha llevado a cabo y de si estas se han completado con éxito.

listado de matriculaciones

A través de este registro puedes validar si para un pedido determinado se matriculó o no al cliente en uno o varios cursos, y si la acción de matriculación se completó con éxito o si por el contrario sufrió algún tipo de contratiempo.

El modo de matriculación manual es muy útil en aquellos casos en los que la matriculación automática falló (generalmente por una definición incorrecta del enlace o por un problema de comunicación entre Moodle y Prestashop al validar el pedido). Si nos vamos a la pantalla de detalles de un pedido (ya validado), veremos que aparece el botón Matricular Ahora. Al pulsarlo se repite el proceso de buscar los productos del pedido asociados a cursos y matricular al cliente en el curso correspondiente. Además nos confirma los nombres de los cursos en los que se ha matriculado.

matriculación manual

Con el modo de matriculación automática, el módulo se encarga de informar al cliente de que su pedido le da derecho a la matriculación en ciertos cursos. Esta información se muestra en la página de confirmación del pedido (último paso del proceso de checkout):

Este mensaje no implica que la matriculación se haya hecho en ese momento. Dependerá fundamentalmente del método de pago usado. Si hemos activado la opción de Enviar notificaciones vía e-mail, lo que si va a ocurrir es que el cliente recibirá un correo de confirmación con los cursos en los que ha sido matriculado, cuando ya se ha llevado a cabo la matriculación. La notificación es similar a esta:

Conclusión

Moodle es una estupenda plataforma para crear cursos y contenidos de aprendizaje y Prestashop es una estupenda plataforma para poder monetizar los contenidos que crees. A través de éste módulo gratuito, puedes fácilmente automatizar el proceso de matriculación de los alumnos en los cursos, de forma que tus clientes puedan disfrutar inmediatamente del curso adquirido, las 24 horas del día y los 365 días del año.

Instalar y configurar el módulo es sencillo, aunque no ignoro que el proceso de habilitación del servicio web en Moodle, con todos los permisos y funciones adecuadas, es algo bastante laborioso. Pero queda aquí detallado paso a paso de forma que cualquier administrador de Moodle pueda repetirlo.

Este módulo ha sido desarrollado como parte de mi trabajo para PLC Madrid, de forma similar al otro módulo Prestashop gratuito presentado en Fish and Bits (Módulo PrestaShop: Cliente OAuth 2.0 para single SignOn). Los responsables de PLC Madrid, una vez más, no han dudado en ceder este módulo a la comunidad con una licencia de código abierto.

Ahora espero que sea de utilidad para otros miembros de la comunidad. Es mi forma de tratar de devolver algo de lo que recibo de ella.