Trabajar con la API REST de WooCommerce es sencillo, pero desafortunadamente no tiene un endpoint parar “iniciar” sesión. Hay plugins para hacerlo, pero sinceramente no los he probado. Al final, considero que es algo muy básico y específico para tirar de la instalación de plugins.
Así que como ejercicio, veremos cómo crear una API en WordPress. La usaremos para validar si los datos enviados para validar un usuario y su contraseña son válidos.
Pasos para crear la API en WordPress
Primero que nada, debemos localizar el child theme
y modificar el archivo functions.php
. Lo recomiendo así para evitar modificar el tema padre y luego tener problemas con actualizaciones.
custom-api.php
Para tenerlo todo mejor organizado, hay que crear el archivo custom-api.php
en el mismo directoio de functions.php
y dentro escribiremos el código que agregará el nuevo recurso.
Tú puedes crear la estructura de carpetas que quieras y de acuerdo a la complejidad de tus endpoints. Para este ejemplo, vamos sencillo.
<?php
add_action('rest_api_init', function () {
register_rest_route(
'custom-api-url/v1',
'/users/',
array(
'methods' => 'POST',
'callback' => 'custom_api_login'
)
);
});
Con esto hemos indicado a WordPress que habrá una ruta llamada /custom-api-url/v1/users/
que será gestionada por la función custom_api_login
, cuya lógica vamos a declarar en el siguiente paso.
Para esta función debemos usar el método POST
para que responda, de lo contrario se lanzará el mensaje de error indicando que la ruta no existe.
// ...
function custom_api_login($req)
{
$data = $req->get_json_params();
$username = $data["username"];
$password = $data["password"];
$user = get_user_by('login', $username);
if ($user && wp_check_password($password, $user->data->user_pass, $user->ID)) {
$user_info = get_userdata($user->data->ID);
$first_name = $user_info->first_name;
$last_name = $user_info->last_name;
$userData = array(
'id' => $user->data->ID,
'email' => $user->data->user_email,
'first_name' => $first_name,
'last_name' => $last_name,
);
return array('message' => 'success', 'data' => $userData);
} else {
return array('message' => 'error');
}
}
// ...
Se encargará de buscar al usuario, validar el password y devolver información en caso de que todo haya salido bien. Este código no tiene validaciones, así que te recomiendo que hagas las que sean necesarias para no comprometer el código.
functions.php
Una vez que hayamos finalizado con el archivo anterior, hay que mandarla llamar en functions.php
.
// functions.php
require_once(__DIR__ . '/custom-api.php');
Probar API en WordPress
Con esto deberíamos ser capaces de mandar llamar la API simple en WordPress mediante Postman o como yo lo hice.
Usamos cURL:
curl -X POST https://example.com/wp-json/custom-api-url/v1/users/ \
-H 'Content-Type: application/json' \
-d '{"username":"admin", "password":"pass"}'
Debemos recordar que para que este funcione, no debe estar bloqueada la funcionalidad que hace posible comunicarse con WordPress mediante API.
Saludos.