Vous aurez besoin de créer des API personnalisées pour des exigences uniques dans le développement de votre projet à un moment donné, et c'est ce que nous couvrirons tout au long de ce didacticiel. Dans notre module API personnalisé, nous allons extraire la liste de tous les produits disponibles dans le magasin. Il s'agira d'une sortie codée JSON, comme l'exigent les normes REST d'OpenCart..
Je suppose que vous connaissez le processus de développement de modules de base dans OpenCart. Voici un bel article fournissant un aperçu complet du sujet au cas où vous souhaiteriez le sauter. Un autre point important: j’utilise la dernière version d’OpenCart, c’est-à-dire 2.1.0.2, et vous devriez le faire aussi pour assurer la compatibilité des principales API..
Sans perdre beaucoup de votre temps, je vais tout de suite plonger dans les aspects pratiques, et c’est le sujet de la section suivante..
Regardons la liste des fichiers nécessaires à la configuration souhaitée.
catalogue / contrôleur / api / custom.php
: Il s’agit d’un fichier de contrôleur et la plupart de nos logiciels d’application résident dans ce fichier.catalogue / langue / fr-fr / api / custom.php
: C'est un fichier de langue qui contient les variables de langue.common.php
: Ce fichier contient le code commun à des fins de réutilisation.login.php
: C'est un fichier qui montre comment se connecter au magasin à l'aide de l'API REST.produits.php
: C'est un fichier qui montre comment récupérer des produits à l'aide de notre module API personnalisé.C'est tout ce qu'il faut pour configurer notre module d'API personnalisé et le tester à l'aide de la bibliothèque PHP CURL.
Nous allons commencer avec le fichier du contrôleur, allez-y et créez un fichier catalogue / contrôleur / api / custom.php
avec le contenu suivant.
charge-> langue ('api / custom'); $ json = array (); if (! isset ($ this-> session-> data ['api_id'])) $ json ['error'] ['warning'] = $ this-> language-> get ('error_permission'); else // charger modèle $ this-> charger-> modèle ('catalogue / produit'); // récupère les produits $ products = $ this-> model_catalog_product-> getProducts (); $ json ['success'] ['products'] = $ products; if (isset ($ this-> request-> server ['HTTP_ORIGIN'])) $ this-> response-> addHeader ('Access-Control-Allow-Origin:'. $ this-> request-> server [ 'HTTP_ORIGIN']); $ this-> response-> addHeader ('Méthodes d'accès-contrôle-autoriser: GET, PUT, POST, DELETE, OPTIONS'); $ this-> response-> addHeader ('Access-Control-Max-Age: 1000'); $ this-> response-> addHeader ('En-têtes de contrôle d'accès: type de contenu, autorisation, demande X avec "); $ this-> response-> addHeader ('Content-Type: application / json'); $ this-> response-> setOutput (json_encode ($ json));
Si vous connaissez la structure des fichiers de module OpenCart, cela devrait probablement être assez familier. Cependant, nous allons discuter des extraits importants de la des produits
méthode.
Tout d’abord, nous devons vérifier l’authenticité de la demande, et celle-ci est vérifiée par l’existence du api_id
variable dans la session active. Dans le cas d’une demande valide et authentifiée, nous allons aller chercher tous les produits en utilisant le getProducts
méthode du noyau Produit
modèle. Bien sûr, cela donnera un message d'erreur d'autorisation refusée en cas de connexion invalide.
Ensuite, il y a une vérification de sécurité générique pour se protéger contre les attaques CSRF. C'est accompli en vérifiant l'existence du HTTP_ORIGIN
variable, et l'ajout d'en-têtes appropriés s'il existe.
Enfin, nous avons utilisé le json_encode
fonction pour encoder le $ produits
tableau, et le résultat est passé comme un argument de la setOutput
méthode.
Ensuite, nous allons créer un fichier de langue pour notre module à catalogue / langue / fr-fr / api / custom.php
avec le contenu suivant.
Donc, c'est tout ce qui concerne l'installation du fichier lié à OpenCart. À partir de la section suivante, nous créerons les fichiers qui nous aideront à tester notre API personnalisée à l'aide de la bibliothèque PHP CURL..
Comment ça marche
Avant de tester notre module API personnalisé, vous devez vous assurer que vous avez créé les informations d'identification de l'utilisateur de l'API à partir du back-end d'OpenCart..
Si vous ne l'avez pas encore fait, c'est assez facile. Dirigez-vous vers le back-end, naviguez vers Système> Utilisateurs> API, et ajoutez un nouvel utilisateur d'API. Ce faisant, il est important de noter que vous devez également ajouter une adresse IP à partir de laquelle vous êtes censé effectuer des appels API..
Allez-y et créez un
common.php
déposer et coller le contenu suivant dans ce fichier.$ valeur) $ params_string. = $ key. '='. $ valeur. '&'; rtrim ($ params_string, '&'); curl_setopt ($ ch, CURLOPT_POST, compte ($ params)); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params_string); // exécutez post $ result = curl_exec ($ ch); // connexion étroite curl_close ($ ch); return $ result;Comme vous pouvez le constater, il ne contient qu'une fonction,
do_curl_request
, qui fera un appel CURL à l’URL passée par le$ url
argument. Le second argument est un tableau de paramètres au cas où vous auriez besoin de POST les données.Les autres choses importantes à noter sont les
CURLOPT_COOKIEJAR
etCURLOPT_COOKIEFILE
réglages. Ceux-ci définissent le fichier dans lequel les cookies seront stockés et lus. Comme nous devrons faire des appels authentifiés, c'est un must! Bien sûr, vous voulez changer le chemin/tmp/apicookie.txt
en fonction de vos paramètres système. Assurez-vous qu'il est également accessible en écriture par le serveur Web.!Enfin, la fonction retourne la réponse par la requête CURL!
Évidemment, la première chose à faire est de démarrer la session et vous devrez utiliser la méthode de connexion. Regardons un exemple. Allez-y et créez un
login.php
fichier avec le contenu suivant.'Demouser', 'touche' => 'ysvF7M1nqNYiZV3GFtU252jhn0FrCWMdH8Kw8qR6DApZ7RSJWCN7S0IvIxnti1QP2wUNsYCaG6vHa2l2q8FTFbWNwNYQUO58CfSYJHHJRG0vt7OBN60BnE5MdEVLBSSJVBZJ7ioFuiAmQN1dmBO56dmaawULlY8lnWFXQimecZznUo7NCJHp3rkL1tOAYgeIUl1oVjzrZ7cayikQEvUtwIGj7Ai4XudDH70E7hKGNJcXPiY5RfgFI8PQ8eLg1FZJ',); $ json = do_curl_request ($ url, $ fields); var_dump ($ json);Premièrement, nous avons inclus le
common.php
fichier créé dans la section précédente. Ensuite, le$ url
variable définit l'URL de connexion à l'API du magasin OpenCart. Ensuite, lechamps $
tableau contient les informations d'identification de l'utilisateur de l'API créées précédemment.Enfin, nous appelons le
do_curl_request
méthode de connexion. Surtout, vous devriez voir un jeton variable dans le$ json
objet. Notez la valeur de cette variable car nous devrons la transmettre lors d'appels d'API ultérieurs..Ensuite, créons un
produits.php
fichier avec le contenu suivant.L'extrait de code important à noter dans l'exemple ci-dessus est la variable de chaîne de requête d'itinéraire. Il est réglé sur le
api / custom / produits
valeur qui, par convention, appelle lades produits
méthode définie dans lecustom.php
fichier contrôleur créé au début de ce tutoriel. En outre, nous avons passé le jeton variable ainsi que sa valeur pour nous assurer que nous avons accès à l'API.Quoi qu’il en soit, ce qui nous intéresse, c’est la sortie codée JSON appropriée dans le
$ data
variable. Et c’est ce que vous devriez voir lorsque vous exécutez leproduits.php
fichier! Cela devrait fonctionner immédiatement si vous avez créé les informations d'identification utilisateur appropriées et configuré les fichiers comme expliqué..Cela ne fait qu'effleurer la surface de ce que l'API REST d'OpenCart est capable de. Dans notre cas, c’était un exemple simple mais efficace pour illustrer le sujet. Cela dit, vous pouvez l'étendre et mettre en œuvre des solutions sur mesure en fonction de vos besoins..
Voilà pour l'article d'aujourd'hui. N'hésitez pas à poser des questions et à laisser vos suggestions car elles sont précieuses!
Conclusion
Aujourd'hui, nous avons expliqué comment créer une API personnalisée dans OpenCart en créant un module personnalisé. Au cours du processus, nous avons parcouru l'intégralité du flux de travail pour atteindre les fonctionnalités susmentionnées..
Vous pouvez me joindre via la section de flux ci-dessous, et je passe aussi un peu de temps sur Twitter si vous préférez me contacter!