Використання Magento 2 REST API з прикладами


Відповіді:


13

Magento 2 підтримує REST (Представницький стан передачі) та SOAP (Простий протокол доступу до об’єктів), як і стару версію Magento, до якої ми звикли. Офіційна документація здебільшого базується на необробленому запиті на вигин без прикладів якоюсь конкретною мовою. PHP - це те, що ми робимо, і багато людей також використовуватиме його, тому ми постаралися дати вам справжні приклади PHP, як підключити та використовувати API Magento 2.

У Magento є три типи користувачів, які мають доступ до API:

1) Гість користувача У них є доступ до ресурсів з анонімним дозволом.

2) Адміністратор / інтеграція Вони мають доступ до ресурсів, для яких дозволено конфігурацією.

3) Клієнт У них є доступ до ресурсів з дозволу самостійно чи анонімно.

Ми можемо використовувати три типи аутентифікації: 1) Аутентифікація на основі маркера

Ідея тут полягає в тому, щоб надати ім'я користувача та пароль під час початкового з'єднання та отримати маркер, який буде використовуватися для запитів, які випливають, доки термін не закінчиться.

Ось приклад використання відпочинку 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 ). У цьому випадку розгляньте API Magento як послугу, яка дозволяє отримати доступ до ресурсів сторонній стороні через схвалення, отримане від власників ресурсів. Наприклад, отримання інформації про клієнта (власника ресурсу) від 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, які нам потрібні для використання критеріїв пошуку:

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


Завітайте сюди, щоб побачити мою проблему: - magento.stackexchange.com/q/260229/49733
wakar Ahamad

5

в пошті нижче конфігурації потрібно зробити введіть тут опис зображення


У якій версії Magento був зроблений цей скріншот? Я не можу знайти цю сторінку.
AdamJones

@AdamJones - це "Поштальон" на знімку екрану, а не Magento 2.
DomainSoil

0

Для завершення вже наведеного прикладу, але використовуйте параметри 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.