нужно вызвать Magento2 остальные API на уровне кода, как вызвать по умолчанию magento REST APIS
нужно вызвать Magento2 остальные API на уровне кода, как вызвать по умолчанию magento REST APIS
Ответы:
Magento 2 поддерживает REST (Передача состояния представления) и SOAP (Простой протокол доступа к объектам), так же, как и старая версия Magento, к которой мы привыкли. Официальная документация в основном основана на необработанном запросе curl без примеров на каком-то конкретном языке. PHP - это то, что мы делаем, и многие будут его использовать, поэтому мы постарались дать вам реальные примеры PHP, как подключить и использовать Magento 2 API.
В Magento есть три типа пользователей, которые имеют доступ к API:
1) Гостевой пользователь. У них есть доступ к ресурсам с анонимным разрешением.
2) Администратор / Интеграция У них есть доступ к ресурсам, для которых авторизуется конфигурация.
3) Клиент. У них есть доступ к ресурсам с разрешения пользователя или анонима.
Мы можем использовать три типа аутентификации: 1) Аутентификация на основе токенов
Идея здесь заключается в том, чтобы предоставить имя пользователя и пароль во время первоначального подключения и получить токен, который будет использоваться для последующих запросов, пока токен не истечет.
Вот пример использования rest API через PHP
<?php
$userData = array("username" => "USERNAMe", "password" => "PASSWORD");
$ch = curl_init("http://www.YOUR_DOMIAN.com/rest/V1/integration/admin/token");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($userData));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Lenght: " . strlen(json_encode($userData))));
$token = curl_exec($ch);
$ch = curl_init("http://www.YOUR_DOMIAN.com/rest/V1/products/LC515");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer " . json_decode($token)));
$result = curl_exec($ch);
var_dump($result);
Примечание: - убедитесь, что имя пользователя является администратором, и ему должны быть назначены соответствующие ресурсы
Проверка подлинности на основе OAuth
Доступ к API разрешен через OAuth 1.0a ( https://en.wikipedia.org/wiki/OAuth ). В этом случае представьте, что Magento API - это сервис, который разрешает доступ к ресурсам третьим лицам через одобрение, полученное от владельцев ресурсов. Например, получение информации о клиенте (владельце ресурса) из Magento API (службы) из стороннего приложения (клиента). Это немного выходит за рамки данной статьи, и отдельная статья находится в стадии подготовки, однако есть простой пример использования интеграции без «URL-адреса идентификационной ссылки» и «URL-адреса обратного вызова».
Вам нужно перейти в Система> Интеграции и добавить новую интеграцию без «URL-адреса идентификационной ссылки» и «URL-адреса обратного вызова». Не забудьте отредактировать доступ к ресурсам на вкладке API.
Затем запустите этот скрипт:
<?php
function sign($method, $url, $data, $consumerSecret, $tokenSecret)
{
$url = urlEncodeAsZend($url);
$data = urlEncodeAsZend(http_build_query($data, '', '&'));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
function urlEncodeAsZend($value)
{
$encoded = rawurlencode($value);
$encoded = str_replace('%7E', '~', $encoded);
return $encoded;
}
// REPLACE WITH YOUR ACTUAL DATA OBTAINED WHILE CREATING NEW INTEGRATION
$consumerKey = '0b3d76jra3log3i2dthslvf0fg54avjv';
$consumerSecret = 'yk8ypwrqrjepa01g3bt0f57ii6kgkqb4';
$accessToken = 'pjhpgtv3un78h83wmhcbk0s8nuxbfhx0';
$accessTokenSecret = 'ryf7sqesnrsn23aifragqywttbm3gkch';
$method = 'GET';
$url = 'http://www.YOUR_DOMIAN..com/rest/V1/products/LC515';
//
$data = [
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = sign($method, $url, $data, $consumerSecret, $accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);
Несколько API нам нужно использовать searchCriteria ex: -
GET http://<magento_host>/index.php/rest/V1/products?
searchCriteria[filter_groups][0][filters][0][field]=name&
searchCriteria[filter_groups][0][filters][0][value]=%25Leggings%25&
searchCriteria[filter_groups][0][filters][0][condition_type]=like&
searchCriteria[filter_groups][0][filters][1][field]=name&
searchCriteria[filter_groups][0][filters][1][value]=%25Parachute%25&
searchCriteria[filter_groups][0][filters][1][condition_type]=like
см. http://devdocs.magento.com/guides/v2.1/howdoi/webapi/search-criteria.html
Чтобы завершить приведенный пример, но использовать параметры get в URL, используйте: -
$consumerKey = '2f5jp18p92au5bdfjwp686_somemore';
$consumerSecret = 'x1b48mz2pg1do7gi42aqeb1_somemore';
$accessToken = 'o5msvni7j79t79tl09u18x6_somemore';
$accessTokenSecret = 'f9uhqbf4ym6rv4jdxyymt0u_somemore';
function sign($method, $url, $data, $get, $consumerSecret, $tokenSecret){
$data = array_merge($data,$get);
ksort($data);
$url = str_replace('%7E', '~', rawurlencode($url));
$data = str_replace('%7E', '~', rawurlencode(http_build_query($data, '', '&')));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
$method = 'GET';
$url = 'https://your.host/rest/V1/customers/search';
$params =[
'search_criteria[filter_groups][0][filters][0][field]' => 'firstname',
'search_criteria[filter_groups][0][filters][0][value]' => '%dallas%',
'search_criteria[filter_groups][0][filters][0][condition_type]' => 'like',
'search_criteria[filter_groups][1][filters][0][field]' => 'lastname',
'search_criteria[filter_groups][1][filters][0][value]' => '%clarke%',
'search_criteria[filter_groups][1][filters][0][condition_type]' => 'like',
];
//$url = 'https://your.host/rest/V1/products/sku';
//$params = [];
$data = [
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = sign($method, $url, $data, $params, $consumerSecret, $accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_URL => $url.'?'.http_build_query($params),
CURLOPT_HTTPHEADER => [
'Authorization: Basic '. base64_encode('not:telling'),
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);