Introduction
Si vous travaillez sur une application mobile, un site sans tête ou si vous souhaitez connecter WooCommerce avec un système externe, vous aurez probablement besoin d’un moyen sécurisé d’accéder aux données via l’API.
WooCommerce donne déjà l’API REST par défaut, mais il fonctionne sur les touches API, qui est un peu à l’ancienne maintenant. Pas aussi flexible aussi, surtout lorsque vous souhaitez gérer les flux de connexion.
Donc, une meilleure façon consiste à créer vos propres points de terminaison API REST et à les protéger à l’aide de JWT (jeton Web JSON). JWT est facile, propre et prend en charge les flux d’autheurs modernes comme la connexion, la déconnexion, l’accès basé sur les jetons, etc.
Ici, je suis simplement en train de construire une API de repos personnalisée pour WooCommerce et de la valider avec JWT pour la sécurité. De cette façon, les applications externes peuvent se connecter en toute sécurité sans gâcher avec les touches API WooCommerce traditionnelles. Pas besoin de s’appuyer sur l’API hérité de WooCommerce ou de générer des clés API manuellement.
Pourquoi utiliser JWT au lieu des clés API WooCommerce?
L’API REST par défaut de WooCommerce utilise l’authentification clé / secrète, mais cette configuration a certaines limites:
- Nécessite une configuration de clé manuelle via l’administrateur WooCommerce
- Pas d’expiration de jeton ou de logique de session
- Non adapté aux applications modernes à page unique (SPA) ou aux applications mobiles
Au lieu de cela, JWT (JSON Web Token) est une solution moderne et apatride qui permet:
- Génération de jetons basés sur la connexion
- Contrôle du rôle / de l’autorisation
- Sessions basées sur l’expiration
- Intégration facile avec les applications mobiles / javascript
Exigences
Assurez-vous que les choses suivantes sont prêtes dans votre configuration de développement:
- Plugin WooCommerce installé et actif
- Les permaliens fixés sur tout sauf « plain »
Aller à Paramètres > Permaliennes [select Post name or Day and name] - PHP Version 7.4+
- Compositeur installé mondial (nous l’utiliserons pour installer la bibliothèque JWT)
Présentation de la structure du dossier du plugin
Nous allons créer un plugin personnalisé appelé JWT-Token-WC-API . Voici à quoi ressemblera la disposition du dossier:
Dans Root du projet: WP-Content / Plugin /
Créez un dossier nommé – JWT-Token-WC-API /
- JWT-Token-wc-api.php
- comprend /
– classe-jwt-token-helper.php - fournisseur/
– autoload.php
Étape 1: Tout d’abord, installez la bibliothèque PHP pour JWT à l’aide du compositeur
Pour la bibliothèque, nous avons juste besoin d’ouvrir notre terminal, et dans le dossier du plugin, nous devons exécuter la commande ci-dessous dans le terminal:
composer require firebase/php-jwt
Cette commande créera un package JWT Firebase dans le dossier du fournisseur que nous utiliserons pour générer un jeton plus tard.
Étape 2: Ajoutez maintenant la touche secrète JWT Token dans ce fichier (WP-Config.php)
Dans le projet WordPress, ouvrez le fichier WP-Config.php et ajoutez le code suivant.
define('JWT_Token_AUTH_SECRET_KEY', 'secure-jwt-secret-key');
Étape 3: Créez une classe de jeton JWT
Nous allons maintenant créer une classe d’assistance qui gérera JWT Logic comme la génération et la vérification des jetons.
Nous allons créer un nouveau fichier à l’intérieur de notre plugin: inclut / classe-jwt-token-helper.php
<?php // Block file accessed if directly trying to open it. if (!defined('ABSPATH')) { exit; } // Load the Composer autoloader class. require_once plugin_dir_path(__DIR__) . '../vendor/autoload.php'; use Firebase\JWT\JWT; use Firebase\JWT\Key; class JWT_Token_Manager { // Getting jwt token secret key from wp-config const JWT_Token_Key= JWT_Token_AUTH_SECRET_KEY; /** * Function to create token for given user-id. * 1 hour token validity */ public static function create_user_jwt_token($user_id) { $jwt_token_data = [ 'issuer' => get_site_url(), 'issued_at' => time(), 'expires_at' => time() + 3600, 'user_id' => $user_id, ]; return JWT::encode($jwt_token_data, self::JWT_Token_Key, 'HS256'); } /** * Check JWT Token from Incoming API Request. */ public static function validate_request_token(WP_REST_Request $request) { $auth_header = $request->get_header('authorization'); // If no jwt token found then showing this error. if (!$auth_header || !preg_match('/Bearer\\s(\\S+)/', $auth_header, $matches)) { return new WP_Error('token_missing', 'Authorization header is missing.', ['status' => 401]); } $jwt_token = sanitize_text_field($matches[1]); try { // Decoding and verify the jwt token. $decoded_jwt_token = JWT::decode($jwt_token, new Key(self::JWT_Token_Key, 'HS256')); return true; } catch (Exception $e) { return new WP_Error('token_invalid', 'The provided token is invalid or expired.', ['status' => 403]); } } }
Étape 4: Créez maintenant le fichier de plugin principal.
Nous allons maintenant créer un nouveau fichier à l’intérieur de notre dossier de plugin nommé: JWT-Token-wc-api.php
<?php /** * Plugin Name: Secure WooCommerce API with JWT Token * Description: Adds custom WooCommerce REST API with JWT login – handy if you're building mobile apps or need to connect outside system. * Version: 1.0.0 * Author: TO THE NEW Private Limited */ // Block file accessed if directly trying to open it. if (!defined('ABSPATH')) { exit; } // Load the jwt token helper class file. require_once plugin_dir_path(__FILE__) . 'includes/class-jwt-token-helper.php'; /** * Registering the login route to issue secure JWT token. */ add_action('rest_api_init', function () { register_rest_route('jwt-token/v1', '/login', [ 'methods' => 'POST', 'callback' => 'handle_jwt_user_api_login', 'permission_callback' => '__return_true', 'args' => [ 'username' => ['required' => true], 'password' => ['required' => true], ], ]); }); /** * Callback funciton to authenticate username & password and return JWT token. */ function handle_jwt_user_api_login(WP_REST_Request $request) { $username = sanitize_text_field($request->get_param('username')); $password = $request->get_param('password'); $user = wp_authenticate($username, $password); if (is_wp_error($user)) { return new WP_Error('login_failed', 'Username or password is incorrect.', ['status' => 403]); } if (!user_can($user, 'read')) { return new WP_Error('not_allowed', 'You do not have permission to use the API.', ['status' => 403]); } $jwt_token = JWT_Token_Manager::create_user_jwt_token($user->ID); return [ 'token' => $jwt_token, 'user' => [ 'email' => $user->user_email, 'name' => $user->display_name, ], ]; } /** * Registering a secure API endpoint to fetch WooCommerce order details by order id. */ add_action('rest_api_init', function () { register_rest_route('order-jwt-api/v1', '/order', [ 'methods' => 'GET', 'callback' => 'get_woocommerce_order_data_by_id', 'permission_callback' => ['JWT_Token_Manager', 'validate_request_token'], 'args' => [ 'order_id' => ['required' => true, 'type' => 'integer'], ], ]); }); /** * Fetch WooCommerce order data by order-id (JWT protected). */ function get_woocommerce_order_data_by_id(WP_REST_Request $request) { $order_id = $request->get_param('order_id'); $order = wc_get_order($order_id); if (!$order) { return new WP_Error('order_not_found', 'No order found for this ID.', ['status' => 404]); } return [ 'order_id' => $order->get_id(), 'status' => $order->get_status(), 'total' => $order->get_total(), 'customer' => $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(), 'items' => array_map(function ($item) { return [ 'product_id' => $item->get_product_id(), 'name' => $item->get_name(), 'quantity' => $item->get_quantity(), 'line_total' => $item->get_total(), ]; }, $order->get_items()), ]; }
Testons maintenant notre API personnalisée à l’aide de Postman:
Étape 1: Tout d’abord, obtenez le jeton JWT en utilisant le nom d’utilisateur et le mot de passe
Ouvrez simplement Postman et faites une demande de poste à ce point de terminaison: Post / wp-json / jwt-token / v1 / connexion
Générer un jeton
Vous pouvez voir dans l’image ci-dessus que nous obtenons la valeur de jeton sur le point de terminaison de connexion avec le nom d’utilisateur / mot de passe correct
Étape 2: Obtenez des données de commande à l’aide du jeton JWT
Nous avons maintenant un jeton JWT, récupérons les détails de la commande en utilisant.
Nous allons maintenant demander ce point de terminaison: Get / wp-json / order-jwt-api / v1 / order? Order_id =
Dans Postman, accédez à l’onglet Autorisation, choisissez le jet de support et collez notre jeton JWT là-bas.
Données de commande
Conclusion
JWT Login est tout simplement plus facile, honnêtement. Vous n’avez pas besoin de gérer les clés d’API par défaut de WooCommerce et tout ça. Une fois que cela fonctionne, vous touchez vos itinéraires personnalisés avec le jeton – pas de jeton, pas de données, c’est tout.
Je l’ai utilisé dans quelques projets comme la réalisation des données des commandes pour les applications mobiles, la synchronisation avec d’autres plates-formes, peu importe. Il garde les choses en sécurité et vous n’avez pas besoin d’envoyer votre nom d’utilisateur / mot de passe partout. Fonctionne mieux pour les configurations personnalisées.
Source link