Как создать пользовательский API в OpenCart
Создание пользовательского API в OpenCart Создать пользовательские API для уникальных требований необходимо на определенном этапе разработки интернет-магазина или иного вашего проекта. В нашем модуле пользовательского API мы извлечем список всех продуктов, доступных в магазине, и это будет вы...
Создание пользовательского API в OpenCart
Создать пользовательские API для уникальных требований необходимо на определенном этапе разработки интернет-магазина или иного вашего проекта.
В нашем модуле пользовательского API мы извлечем список всех продуктов, доступных в магазине, и это будет вывод в формате JSON, как того требуют стандарты REST в OpenCart.
Я предполагаю, что вы знакомы с базовым процессом разработки модулей в OpenCart. Еще один важный момент: я использую версию OpenCart 2.1.0.2 на момент написания этой статьи, и вы должны сделать это тоже, чтобы обеспечить совместимость основных API.
Не тратя впустую много времени, я сразу же углублюсь в практические вещи.
Настройка файла для создания API OpenCart
Давайте посмотрим на список файлов, необходимых для желаемой настройки:- catalog/controller/api/custom.php: это файл контроллера, и большая часть нашей логики приложения находится в этом файле.
- catalog/language/en-gb/api/custom.php: Это языковой файл, который содержит языковые переменные.
- common.php: Этот файл содержит общий код для повторного использования.
- login.php: это файл, который демонстрирует, как войти в магазин, используя REST API.
- products.php: это файл, который демонстрирует, как получать продукты с помощью нашего пользовательского модуля API.
Итак, это все, что нужно для настройки нашего пользовательского модуля API и его тестирования с использованием библиотеки PHP CURL.
Мы начнем с файла контроллера, продолжим и создадим файл catalog/controller/api/custom.php со следующим содержимым.
<?php
// catalog/controller/api/custom.php
class
ControllerApiCustom
extends
Controller {
public
function
products() {
$this
->load->language(
'api/custom'
);
$json
=
array
();
if
(!isset(
$this
->session->data[
'api_id'
])) {
$json
[
'error'
][
'warning'
] =
$this
->language->get(
'error_permission'
);
}
else
{
// load model
$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 со следующим содержимым.
<?php
// catalog/language/english/api/custom.php
// Error
$_
[
'error_permission'
] =
'Warning: You do not have permission to access the API!'
;
Итак, вот и все, что касается настройки файлов, связанной с OpenCart. В следующем разделе мы создадим файлы, которые помогут нам протестировать наш пользовательский API с использованием библиотеки PHP CURL.
Тестирование созданного API для OpenCart
Прежде чем мы продолжим тестирование нашего пользовательского модуля API, вы должны убедиться, что вы создали учетные данные пользователя API из серверной части OpenCart.Если вы еще этого не сделали, это довольно просто. Перейдите на сервер, перейдите в Система> Пользователи> API и добавьте нового пользователя API. При этом важно отметить, что вам также необходимо добавить IP-адрес, с которого вы должны выполнять вызовы API.
Теперь создайте файл common.php и вставьте в него следующее содержимое.
<?php
function
do_curl_request(
$url
,
$params
=
array
()) {
$ch
= curl_init();
curl_setopt(
$ch
,CURLOPT_URL,
$url
);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURLOPT_COOKIEJAR,
'/tmp/apicookie.txt'
);
curl_setopt(
$ch
, CURLOPT_COOKIEFILE,
'/tmp/apicookie.txt'
);
$params_string
=
''
;
if
(
is_array
(
$params
) &&
count
(
$params
)) {
foreach
(
$params
as
$key
=>
$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-адреса, переданного аргументом $urll. Второй аргумент - это массив параметров на случай, если вам нужно POST-данные.
Другие важные вещи, на которые следует обратить внимание, это настройки CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE. Они устанавливают файл, в котором файлы cookie будут храниться и считываться. Поскольку нам нужно совершать аутентифицированные звонки, это обязательно! Конечно, вы хотите изменить путь /tmp/apicookie.txt в соответствии с настройками вашей системы. Убедитесь, что он также доступен для записи на веб-сервере!
Наконец, функция возвращает ответ на запрос CURL!
Очевидно, что первое, что нужно сделать, это начать сеанс, и вам нужно будет использовать метод входа в систему. Давайте посмотрим на пример. Давайте создадим файл login.php со следующим содержимым.
<?php
require
"common.php"
;
$fields
=
array
(
'username'
=>
'demouser'
,
'key'
=>
'ysvj7Ai4XudDH70E7hKGNJcXPiY5RfgFI8PQ8eLg1FZJ'
,
);
$json
= do_curl_request(
$url
,
$fields
);
var_dump(
$json
);
Во-первых, мы включили файл common.php, созданный в предыдущем разделе. Затем переменная $url определяет URL-адрес входа API магазина OpenCart. Далее, массив $fields содержит учетные данные пользователя API, созданные ранее.
Наконец, мы вызываем метод do_curl_request для входа в систему. Важно, что вы должны увидеть переменную токена в объекте $json. Запишите значение этой переменной, поскольку нам нужно будет передать его при выполнении последующих вызовов API.
Далее, давайте создадим файл products.php со следующим содержимым.
<?php
require
"common.php"
;
$json
= do_curl_request(
$url
,
$fields
);
$data
= json_decode(
$json
);
var_dump(
$data
);
Важный фрагмент, который следует отметить в приведенном выше примере, - это переменная строки запроса маршрута. Для него установлено значение api/custom/products, которое по соглашению вызывает метод products, определенный в файле контроллера custom.php, созданном в начале этого урока. Кроме того, мы передали переменную токена вместе с ее значением, чтобы убедиться, что у нас есть доступ к API.
В любом случае, нас интересует правильный кодированный в JSON вывод в переменной $data. И это то, что вы должны увидеть, запустив файл products.php! Он должен работать сразу после установки, если вы создали надлежащие учетные данные пользователя и настроили файлы, как описано.
Это лишь поверхностное представление о том, на что способен REST API в OpenCart. В нашем случае это был довольно простой, но эффективный пример для демонстрации темы. Сказав это, вы можете расширить его и реализовать индивидуальные решения в соответствии с вашими требованиями.
Вот и все для сегодняшней статьи. Не стесняйтесь задавать вопросы и оставлять свои предложения, поскольку они ценны!
Есть вопросы? Давайте, мы перезвоним Вам в течение 40 секунд!
ЗАКАЗАТЬ ЗВОНОК