Opprett en egendefinert API i OpenCart

Du må opprette egendefinerte APIer for unike krav i prosjektutviklingen din når som helst, og det er det vi skal dekke gjennom hele løpet av denne opplæringen. I vår egendefinerte API-modul henter vi listen over alle tilgjengelige produkter i butikken, og det vil være en JSON-kodet utgang som kreves av REST-standardene i OpenCart.

Jeg antar at du er kjent med den grunnleggende modulutviklingsprosessen i OpenCart. Her er en fin artikkel som gir omfattende innblikk i emnet, bare hvis du ønsker å hoppe over det. Et annet viktig poeng: Jeg bruker den nyeste versjonen av OpenCart, som er 2.1.0.2 som å skrive dette, og du bør også gjøre det for å sikre kompatibiliteten til kjerne-APIer.

Uten å kaste bort mye av tiden din, drar jeg straks inn i det praktiske, og det er det neste avsnittet handler om.

Et blikk på filoppsettet

La oss se på listen over filer som kreves for ønsket oppsett.

  • katalog / styreenhet / api / custom.php: Det er en kontrollerfil, og det meste av vår programlogikk ligger i denne filen.
  • Katalog / language / nb-no / api / custom.php: Det er en språkfil som inneholder språkvariabler.
  • common.php: Denne filen inneholder den vanlige koden for gjenbrukningsformål.
  • login.php: Det er en fil som demonstrerer hvordan du logger inn i butikken ved hjelp av REST API.
  • products.php: Det er en fil som demonstrerer hvordan du henter produkter ved hjelp av vår egendefinerte API-modul.

Så det er alt som trengs for å sette opp vår egendefinerte API-modul og teste den ved hjelp av PHP CURL-biblioteket.

Vi starter med kontrollerfilen, fortsett og lag en fil katalog / styreenhet / api / custom.php med følgende innhold.

last> språk ( 'API / custom'); $ json = array (); hvis (! isset ($ this-> session-> data ['api_id'])) $ json ['error'] ['warning'] = $ this-> language-> get ('error_permission');  ellers // laste modell $ this-> load-> modell ('katalog / produkt'); // få produkter $ products = $ this-> model_catalog_product-> getProducts (); $ json ['suksess'] ['produkter'] = $ produkter;  hvis (isset ($ this-> request-> server ['HTTP_ORIGIN'])) $ this-> response-> addHeader ('Access-Control-Tillat-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'); $ Dette-> response-> setOutput (json_encode ($ JSON)); 

Sannsynligvis bør det være ganske kjente ting hvis du er klar over strukturen av OpenCart-modulfiler. Vi diskuterer imidlertid de viktige utdragene fra Produkter metode.

Først av alt må vi sjekke autentisiteten til forespørselen, og den er kontrollert av eksistensen av api_id variabel i den aktive økten. I tilfelle av en gyldig og autentisert forespørsel, vil vi fortsette å hente alle produktene ved hjelp av getProducts kjernemetode Produkt modell. Selvfølgelig vil det gi en tillatelse nektet feilmelding ved ugyldig pålogging.

Deretter er det generisk sikkerhetskontroll for å beskytte mot CSRF-angrep. Det er oppnådd ved å kontrollere eksistensen av HTTP_ORIGIN variabel og legge til passende overskrifter hvis det eksisterer.

Til slutt har vi brukt json_encode funksjon for å kode inn $ produkter array, og resultatet er bestått som et argument av setOutput metode.

Deretter fortsetter vi og lager en språkfil for modulen vår på Katalog / language / nb-no / api / custom.php med følgende innhold.

Så det er det så langt som OpenCart-relatert filoppsett er opptatt. Fra neste avsnitt og fremover lager vi filene som hjelper oss med å teste vår egendefinerte API ved hjelp av PHP CURL-biblioteket.

Hvordan det fungerer

Før vi går videre og tester vår egendefinerte API-modul, bør du sørge for at du har opprettet API-brukerens legitimasjon fra baksiden av OpenCart.

Hvis du ikke har gjort det ennå, er det ganske enkelt. Gå over til bakenden, naviger til System> Brukere> API, og legg til en ny API-bruker. Når du gjør det, er det viktig å merke seg at du også må legge til en IP-adresse fra hvilken du skal lage API-anrop.

Gå videre og opprett en common.php fil og lim inn følgende innhold i den filen.

$ verdi) $ params_string. = $ key. '='. $ verdi. '&';  rtrim ($ params_string, '&'); curl_setopt ($ ch, CURLOPT_POST, telle ($ params)); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params_string);  // utfør innlegg $ result = curl_exec ($ ch); // Lukk forbindelse curl_close ($ ch); returnere $ resultat; 

Som du kan se, inneholder den bare en funksjon, do_curl_request, som vil gjøre et CURL-anrop til nettadressen som er passert av $ url argument. Det andre argumentet er en rekke parametere hvis du må POST dataene.

De andre viktige tingene å merke seg er CURLOPT_COOKIEJAR og  CURLOPT_COOKIEFILE innstillinger. Disse angir filen der informasjonskapslene skal lagres og leses fra. Som vi må gjøre godkjente samtaler, er det et must! Selvfølgelig vil du endre banen /tmp/apicookie.txt i henhold til systeminnstillingene dine. Pass på at den også skrives av webserveren!

Endelig returnerer funksjonen svaret fra CURL-forespørselen!

Åpenbart, det første du må gjøre er å starte økten, og du må bruke påloggingsmetoden. La oss ta en titt på et eksempel. Gå videre og opprett en login.php fil med følgende innhold.

 'Demouser', 'nøkkel' => 'ysvF7M1nqNYiZV3GFtU252jhn0FrCWMdH8Kw8qR6DApZ7RSJWCN7S0IvIxnti1QP2wUNsYCaG6vHa2l2q8FTFbWNwNYQUO58CfSYJHHJRG0vt7OBN60BnE5MdEVLBSSJVBZJ7ioFuiAmQN1dmBO56dmaawULlY8lnWFXQimecZznUo7NCJHp3rkL1tOAYgeIUl1oVjzrZ7cayikQEvUtwIGj7Ai4XudDH70E7hKGNJcXPiY5RfgFI8PQ8eLg1FZJ',); $ json = do_curl_request ($ url, $ felt); var_dump ($ JSON);

Først har vi tatt med common.php fil opprettet i forrige seksjon. Deretter $ url variabel definerer API-innloggingsadressen til OpenCart-butikken. Deretter $ felt array holder API-brukerens legitimasjonsinformasjon opprettet tidligere. 

Til slutt kaller vi do_curl_request metode for å logge inn. Viktig, bør du se en pollett variabel i $ json gjenstand. Merk ned verdien av den variabelen som vi må passere den mens du gjør påfølgende API-anrop.

Neste, la oss lage en products.php fil med følgende innhold.

Den viktige brikken som skal noteres i eksemplet ovenfor, er variabelen Ruteforespørsel. Den er satt til api / custom / produkter verdi, som etter konvensjon kaller Produkter metode definert i custom.php kontrollerfilen opprettet i begynnelsen av denne opplæringen. Vi har også passert pollett variabel sammen med verdien sin for å sikre at vi har tilgang til API.

Uansett, det vi er interessert i er riktig JSON-kodet utgang i $ data variabel. Og det er det du bør se når du kjører products.php fil! Det bør fungere ut av boksen hvis du har opprettet riktig brukeropplysninger og satt opp filene som forklart.

Dette skraper bare overflaten av hva REST API i OpenCart er i stand til. I vårt tilfelle var det et ganske enkelt, men likevel effektivt eksempel for å demonstrere emnet. Når det er sagt, kan du utvide det og implementere skreddersydde løsninger i henhold til dine krav.

Det er det for dagens artikkel. Ikke nøl med å stille spørsmål og la forslagene dine være som de er verdifulle!

Konklusjon

I dag har vi diskutert hvordan du kan opprette en tilpasset API i OpenCart ved å opprette en tilpasset modul. I prosessen gikk vi gjennom hele arbeidsflyten for å oppnå den nevnte funksjonaliteten.

Du kan nå meg via feed-delen nedenfor, og jeg bruker også litt tid på Twitter hvis du foretrekker å kontakte meg der!