U moet op een bepaald moment aangepaste API's maken voor unieke vereisten voor uw projectontwikkeling, en dat is wat we in de loop van deze zelfstudie zullen bespreken. In onze aangepaste API-module halen we de lijst met alle producten op die beschikbaar zijn in de winkel, en het zal een JSON-gecodeerde uitvoer zijn zoals vereist door de REST-normen in OpenCart.
Ik ga ervan uit dat je bekend bent met het basismoduulontwikkelingsproces in OpenCart. Hier is een leuk artikel met een uitgebreid inzicht in het onderwerp voor het geval u het zou willen overslaan. Nog een belangrijk punt: ik gebruik de nieuwste versie van OpenCart, dat wil zeggen 2.1.0.2, en dit zou je ook moeten doen om de compatibiliteit van kern-API's te verzekeren.
Zonder veel van je tijd te verspillen, duik ik meteen in de praktische dingen, en dat is waar het volgende deel over gaat.
Laten we eens kijken naar de lijst met bestanden die nodig zijn voor de gewenste opstelling.
catalogus / controller / api / custom.php
: Het is een controllerbestand en de meeste van onze toepassingslogica bevindt zich in dit bestand.catalogus / language / nl-nl / api / custom.php
: Het is een taalbestand met taalvariabelen.common.php
: Dit bestand bevat de gemeenschappelijke code voor herbruikbaarheidsdoeleinden.login.php
: Het is een bestand dat laat zien hoe u zich bij de winkel aanmeldt met behulp van de REST API.products.php
: Het is een bestand dat laat zien hoe je producten kunt ophalen met onze aangepaste API-module.Dus dat is alles wat nodig is om onze aangepaste API-module in te stellen en deze te testen met de PHP CURL-bibliotheek.
We beginnen met het controllerbestand, ga je gang en maak een bestand aan catalogus / controller / api / custom.php
met de volgende inhoud.
load> taal ( 'api / custom'); $ json = array (); if (! isset ($ this-> session-> data ['api_id'])) $ json ['error'] ['warning'] = $ this-> language-> get ('error_permission'); else // laadmodel $ this-> load-> model ('catalogus / product'); // krijg producten $ products = $ this-> model_catalog_product-> getProducts (); $ json ['succes'] ['producten'] = $ producten; if (isset ($ this-> request-> server ['HTTP_ORIGIN'])) $ this-> response-> addHeader ('Access-Control-Allow-Origin:'. $ this-> request-> server [ 'HTTP_ORIGIN']); $ this-> response-> addHeader ('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); $ this-> response-> addHeader ('Access-Control-Max-Age: 1000'); $ this-> response-> addHeader ('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With'); $ this-> response-> addHeader ('Content-type: application / json'); $ This-> response-> Inschakeling (json_encode ($ json));
Waarschijnlijk zullen het vrij bekende dingen zijn als je je bewust bent van de structuur van OpenCart-modulebestanden. We bespreken de belangrijke fragmenten van de producten
methode.
Allereerst moeten we de echtheid van het verzoek controleren en dit wordt gecontroleerd door het bestaan van het api_id
variabele in de actieve sessie. In het geval van een geldig en geverifieerd verzoek, gaan we door en halen alle producten op met behulp van de getProducts
methode van de kern Artikel
model. Natuurlijk zal het een ongeldig gemaakt foutmelding geven in het geval van ongeldige login.
Vervolgens is er een generieke beveiligingscontrole om te beschermen tegen CSRF-aanvallen. Het wordt bereikt door het bestaan van de te controleren HTTP_ORIGIN
variabele en het toevoegen van geschikte headers als deze bestaat.
Ten slotte hebben we de json_encode
functie om het te coderen $ producten
array, en het resultaat wordt doorgegeven als een argument van de Inschakeling
methode.
Vervolgens gaan we door met het maken van een taalbestand voor onze module op catalogus / language / nl-nl / api / custom.php
met de volgende inhoud.
Dus dat is het voor zover het de OpenCart-gerelateerde bestandsinstellingen betreft. Vanaf het volgende gedeelte maken we de bestanden waarmee we onze aangepaste API kunnen testen met behulp van de PHP CURL-bibliotheek.
Hoe het werkt
Voordat we doorgaan en onze aangepaste API-module testen, moet u ervoor zorgen dat u API-gebruikersreferenties hebt gemaakt vanaf de achterkant van OpenCart.
Als je dat nog niet hebt gedaan, is het vrij eenvoudig. Ga naar het back-end, navigeer naar Systeem> Gebruikers> API, en voeg een nieuwe API-gebruiker toe. Daarbij is het belangrijk op te merken dat u ook een IP-adres moet toevoegen waarvan u verondersteld wordt om API-aanroepen te doen.
Ga je gang en maak een
common.php
bestand en plak de volgende inhoud in dat bestand.$ waarde) $ params_string. = $ sleutel. '='. $ waarde. '&'; rtrim ($ params_string, '&'); curl_setopt ($ ch, CURLOPT_POST, count ($ params)); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params_string); // voer post $ result = curl_exec ($ ch) uit; // close-verbinding curl_close ($ ch); return $ resultaat;Zoals u kunt zien, bevat deze slechts één functie,
do_curl_request
, die een CURL-oproep doet naar de URL die wordt doorgegeven door de$ url
argument. Het tweede argument is een reeks parameters voor het geval u de gegevens POSTt.De andere belangrijke dingen om op te merken zijn de
CURLOPT_COOKIEJAR
enCURLOPT_COOKIEFILE
instellingen. Hiermee wordt het bestand ingesteld waarin de cookies worden opgeslagen en gelezen. Aangezien we geverifieerde oproepen moeten maken, is dit een must! Natuurlijk wilt u het pad wijzigen/tmp/apicookie.txt
volgens uw systeeminstellingen. Zorg ervoor dat het ook door de webserver kan worden beschreven!Ten slotte retourneert de functie de reactie door de CURL-aanvraag!
Uiteraard is het eerste wat u moet doen de sessie starten en moet u de aanmeldmethode gebruiken. Laten we een voorbeeld bekijken. Ga je gang en maak een
login.php
bestand met de volgende inhoud.'Demouser', 'key' => 'ysvF7M1nqNYiZV3GFtU252jhn0FrCWMdH8Kw8qR6DApZ7RSJWCN7S0IvIxnti1QP2wUNsYCaG6vHa2l2q8FTFbWNwNYQUO58CfSYJHHJRG0vt7OBN60BnE5MdEVLBSSJVBZJ7ioFuiAmQN1dmBO56dmaawULlY8lnWFXQimecZznUo7NCJHp3rkL1tOAYgeIUl1oVjzrZ7cayikQEvUtwIGj7Ai4XudDH70E7hKGNJcXPiY5RfgFI8PQ8eLg1FZJ',); $ json = do_curl_request ($ url, $ velden); var_dump ($ json);Ten eerste hebben we de
common.php
bestand gemaakt in het vorige gedeelte. Vervolgens de$ url
variabele definieert de API-inlog-URL van de OpenCart-winkel. Vervolgens de$ velden
array bevat de API-gebruikersreferenties die eerder zijn gemaakt.Ten slotte noemen we het
do_curl_request
methode om in te loggen. Belangrijk is dat u een blijk variabele in de$ json
voorwerp. Noteer de waarde van die variabele, want we zullen deze moeten doorgeven tijdens volgende API-aanroepen.Laten we vervolgens een maken
products.php
bestand met de volgende inhoud.Het belangrijkste fragment dat in het bovenstaande voorbeeld moet worden vermeld, is de route-querystringvariabele. Het is ingesteld op de
api / custom / products
waarde, die volgens afspraak deproducten
methode gedefinieerd in decustom.php
controllerbestand gemaakt aan het begin van deze tutorial. Ook hebben we de blijk variabele en de waarde ervan om ervoor te zorgen dat we toegang hebben tot de API.Hoe dan ook, we zijn geïnteresseerd in de juiste JSON-gecodeerde uitvoer in de
$ data
variabel. En dat is wat u zou moeten zien als u hetproducts.php
het dossier! Het zou uit de doos moeten werken als u de juiste gebruikersreferenties hebt gemaakt en de bestanden hebt ingesteld zoals uitgelegd.Dit is slechts het oppervlak aan het krassen van wat de REST-API in OpenCart kan. In ons geval was het een vrij eenvoudig maar effectief voorbeeld om het onderwerp te demonstreren. Dat gezegd hebbende, kunt u het uitbreiden en maatwerkoplossingen implementeren volgens uw vereisten.
Dat is het voor het artikel van vandaag. Aarzel niet om vragen te stellen en uw suggesties te laten zoals ze waardevol zijn!
Conclusie
Vandaag hebben we besproken hoe u een aangepaste API in OpenCart kunt maken door een aangepaste module te maken. Tijdens dit proces hebben we de volledige workflow doorlopen om de bovengenoemde functionaliteit te bereiken.
Je kunt me bereiken via de onderstaande feedsectie, en ik breng ook wat tijd op Twitter door als je daar liever contact met me opneemt!