Uso de la API REST de Magento 2 con ejemplos

12

necesita llamar a la API de descanso de Magento2 en el nivel de código cómo llamar a la APIS REST predeterminada de magento

Pradeep Kumar
fuente

Respuestas:

13

Magento 2 es compatible con REST (Transferencia de estado de representación) y SOAP (Protocolo simple de acceso a objetos), al igual que la versión anterior de Magento a la que estábamos acostumbrados. La documentación oficial se basa principalmente en la solicitud de curl sin procesar sin ejemplos en algún lenguaje específico. PHP es lo que hacemos y habrá muchas personas que lo usen, así que tratamos de darle ejemplos reales de PHP sobre cómo conectarse y usar la API de Magento 2.

Hay tres tipos de usuarios que tienen acceso a API en Magento y esos son:

1) Usuario invitado Tienen acceso a recursos con permiso anónimo.

2) Administrador / Integración Tienen acceso a recursos para los cuales están autorizados por configuración.

3) Cliente Tienen acceso a recursos con permiso propio o anónimo.

Hay tres tipos de autenticación que podemos usar: 1) Autenticación basada en tokens

La idea aquí es proporcionar el nombre de usuario y la contraseña durante la conexión inicial y recibir el token que se utilizará para las solicitudes que siguen, hasta que el token caduque.

Aquí hay un ejemplo usando API de descanso a través de 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);

Nota: - asegúrese de que el nombre de usuario sea un usuario administrador con los recursos adecuados que se deben asignar

Autenticación basada en OAuth

Se permite el acceso a la API a través de OAuth 1.0a ( https://en.wikipedia.org/wiki/OAuth ). En este caso, piense en la API de Magento como un servicio que permite el acceso a recursos a terceros mediante la aprobación obtenida de los propietarios de los recursos. Por ejemplo, obtener información del cliente (propietario del recurso) de la API de Magento (servicio) de una aplicación de terceros (cliente). Esto está un poco fuera del alcance de este artículo y se está preparando un artículo separado, sin embargo, hay un ejemplo simple de uso de integración sin "URL de enlace de identidad" y "URL de devolución de llamada".

Lo que debe hacer es ir a Sistema> Integraciones y agregar una nueva integración sin "URL de enlace de identidad" y "URL de devolución de llamada". Recuerde editar el acceso a los recursos en la pestaña API.

Luego ejecute este script:

<?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);

pocas API necesitamos usar searchCriteria ej: -

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

consulte http://devdocs.magento.com/guides/v2.1/howdoi/webapi/search-criteria.html

Pradeep Kumar
fuente
Visite aquí para ver mi problema: - magento.stackexchange.com/q/260229/49733
wakar Ahamad
5

en post man debajo de la configuración tiene que hacerse ingrese la descripción de la imagen aquí

Pradeep Kumar
fuente
¿En qué versión de Magento se hizo esta captura de pantalla? No puedo localizar esta página.
AdamJones
@AdamJones es el cartero en la captura de pantalla, no el backend de Magento 2.
DomainSoil
0

Para completar el ejemplo ya dado, pero use los parámetros get en la url, use: -

$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);
Dallas Clarke
fuente