예제와 함께 Magento 2 REST API 사용법


답변:


13

Magento 2는 이전 버전의 Magento와 마찬가지로 REST (Representational State Transfer) 및 SOAP (Simple Object Access Protocol)를 지원합니다. 공식 문서는 대부분 특정 언어로 된 예제가없는 원시 컬 요청을 기반으로합니다. PHP는 우리가하는 일이며 많은 사람들이 그것을 사용할 것이므로 Magento 2 API를 연결하고 사용하는 방법에 대한 실제 PHP 예제를 제공하려고 노력했습니다.

Magento의 API에 액세스 할 수있는 사용자 유형은 세 가지이며 다음과 같습니다.

1) 게스트 사용자 익명의 권한으로 리소스에 액세스 할 수 있습니다.

2) 관리자 / 통합 구성에 의해 권한이 부여 된 리소스에 액세스 할 수 있습니다.

3) 고객 본인 또는 익명의 권한으로 리소스에 액세스 할 수 있습니다.

사용할 수있는 인증에는 세 가지 유형이 있습니다. 1) 토큰 기반 인증

여기서 아이디어는 초기 연결 중에 사용자 이름과 비밀번호를 제공하고 토큰이 만료 될 때까지 후속 요청에 사용할 토큰을받는 것입니다.

다음은 PHP를 통해 rest API를 사용하는 예입니다

<?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 (서비스)에서 고객 (자원 소유자) 정보를 가져옵니다. 이것은이 기사의 범위를 약간 벗어 났으며 별도의 기사가 준비 중이지만 "ID 링크 URL"및 "콜백 URL"없이 통합을 사용하는 간단한 예가 있습니다.

시스템> 통합으로 이동하여 "ID 링크 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);

우리는 searchCriteria ex를 사용해야하는 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

Magento 2 백엔드가 아닌 스크린 샷의 Postman 인 @AdamJones.
DomainSoil

0

이미 제공된 예제를 완료하지만 URL에 get 매개 변수를 사용하려면 다음을 사용하십시오.

$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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.