Створення кастомного API в OpenCart

477

Від автора: в якийсь момент вимоги до вашого проекту змусять вас створити кастомні API OpenCart. Про це ми і поговоримо в цьому уроці. У кастомном модулі API ми будемо отримувати всі доступні товари магазину. Список буде у вигляді закодованої JSON рядка – це вимога REST стандартів в OpenCart.

Ви повинні знати основи модульної розробки в OpenCart. Ще один важливий момент, у вас повинна бути встановлена остання версія OpenCart 2.1.0.2 (на момент написання статті) для забезпечення сумісності з API ядра. Не буду витрачати ваш час, перейдемо відразу до практики в наступній секції.

Створення файлів

Поглянемо на список файлів, які нам потрібні.

catalog/controller/api/custom.php: файл контролера, тут лежить велика частина логіки програми

catalog/language/en-gb/api/custom.php: мовний файл з мовними змінними

Створення кастомного API в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

common.php: у файлі зберігається загальний код для повторного використання

login.php: файл для авторизації в магазині через REST API

products.php: у файлі витягуються товари через кастомный модуль API

Це все що потрібно для створення кастомного модуля API і для тестування за допомогою PHP CURL бібліотеки.

Почнемо з контролера. Створіть файл catalog/controller/api/custom.php з таким кодом.

load->language(‘api/custom’);
$json = array();
if (!isset($this->session->data[‘api_id’])) {
$json[‘error’][‘warning’] = $this->language->get(‘error_permission’);
} else {
// model load
$this->load->model(‘catalog/product’);
// get products
$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(‘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->setOutput(json_encode($json));
}
}

Якщо ви знайомі зі структурою файлів модулів в OpenCart, код вам буде знаком. Але ми все ж пояснимо важливі моменти в методі products.

Спочатку нам потрібно перевірити справжність запиту, що робиться через змінну api_id в активній сесії. Якщо запит правильний і справжній, ми йдемо далі і отримуємо всі товари через метод getProducts моделі ядра Product. Якщо не пройдена авторизація, метод поверне повідомлення про помилку доступу.

Далі йде загальна перевірка безпеки на CSRF атаки. Перевірка проводиться через змінну HTTP_ORIGIN і додавання відповідних заголовків, якщо змінна існує.

Наприкінці за допомогою функції json_encode ми кодуємо масив $products, результат передається як аргумент на метод setOutput.

Далі необхідно створити мовний файл catalog/language/en-gb/api/custom.php для модуля з наступним кодом.

З створенням файлів в OpenCart закінчили. Починаючи з наступного розділу, ми почнемо створювати файли для тестування кастомного API через PHP бібліотеку CURL.

Принцип роботи

Перш ніж перейти до тестування модуля API необхідно створити дані для авторизації API через back end OpenCart.

Створення кастомного API в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

Якщо ви цього ще не зробили, то це не складно. Перейдіть на back end і далі System > Users > API. Додати нового користувача API. Також необхідно додати IP-адресу, з якої ви будете здійснювати API виклики.

Створіть файл common.php з таким кодом.

$value) {
$params_string .= $key.’=’.$value.’&’;
}
rtrim($params_string, ‘&’);
curl_setopt($ch,CURLOPT_POST, count($params);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params_string);
}
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
return $result;
}

Як бачите, у файлі всього одна функція do_curl_request, яка робить CURL запит на URL, переданий як аргумент $url. Другий аргумент – масив параметрів, якщо вам потрібні POST дані.

Важливо зауважити CURLOPT_COOKIEJAR і CURLOPT_COOKIEFILE. Вони встановлюють файл, в якому будуть зберігатися і зчитуватися куки. Наші виклики будуть авторизовані, тому нам ці змінні потрібні! Потрібно лише змінити шлях /tmp/apicookie.txt на ваш власний. Файл повинен бути доступний для запису сервера!

Функція повертає відповідь на CURL запит!

Спочатку необхідно розпочати сесію. Для цього необхідно авторизуватись. Розберемо приклад. Створіть файл login.php з таким кодом.

‘demouser’,
‘key’ = > ‘ysvF7M1nqNYiZV3GFtU252jhn0FrCWMdh8kw8qr6dapz7rsjwcn7s0ivixnti1qp2wunsycag6vha2l2q8ftfbwnwnyquo58cfsyjhhjrg0vt7obn60bne5mdevlbssjvbzj7iofuiamqn1dmbo56dmaawully8lnwfxqimeczznuo7ncjhp3rkl1toaygeiul1ovjzrz7cayikqevutwigj7ai4xuddh70e7hkgnjcxpiy5rfgfi8pq8elg1fzj’,
);
$json = do_curl_request($url, $fields);
var_dump($json);

Спочатку ми підключили файл common.php з попередньої секції. Далі змінна $url визначає URL авторизації API магазину OpenCart. Далі масив $fields зберігає дані для авторизації користувача API.

В кінці ми викликаємо метод do_curl_request для авторизації. Зверніть увагу на змінну token в об’єкті $json. Збережіть значення змінної, пізніше нам доведеться передавати його в API запити.

Створіть файл products.php з таким кодом.

Звернемо увагу на змінну рядка запиту роута. Вона задана в значення api/custom/products і викликає метод products з файлу контролера custom.php, який ми створили на початку уроку. Ми передали змінну token зі значенням, щоб у нас був доступ до API.

Нам важливо отримати правильно закодований JSON в змінній $data, що відбудеться, якщо запустити файл products.php! Якщо ви правильно створили користувача та файли, все запрацює.

Це лише дрібка того, на що здатне REST API в OpenCart. Це був дуже простий, але ефективний приклад демонстрації теми. Ви можете розширити його і реалізувати свої рішення під вимоги.

На сьогодні все. Не соромтеся задавати питання і писати пропозиції, ми їх дуже цінуємо!

Висновок

Сьогодні ми обговорили, як створити кастомный API в OpenCart через кастомный модуль. Ми пройшли повний процес для створення функціональності.

Створення кастомного API в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення