REST API에 대한 정보를 찾으려고했습니다. magento 리소스 및 일부 개인 블로그에 몇 가지 예가 있습니다. 모두 동일합니다 !!
REST API를 통해 제품을 업데이트하려는 경우 기본 정보로 관리자 권한 끝점을 사용해야합니다. (/ admin / oauth_authorize) 고객 또는 게스트를 사용하는 경우 데이터를 검색 할 수 있습니다.
샘플 코드를 작성하고 확인하려고 시도했으며 브라우저를 통해 코드를 실행할 때 관리자를 먼저 로그인해야하고 액세스 권한을 수락해야하며 API 리소스를 사용할 수 있음을 알았습니다.
왜 먼저 관리자로 로그인하도록 요청하는지 모르겠습니다. 액세스하기 위해 로그인 해야하는 경우 서버간에 내부적으로 작동하는 방식.
아래 블로그를 사용하여 샘플 코드를 만들려고했습니다.
잘 작동하고 응답을 제공합니다.
실제로 두 서버 사이에서 내부적으로 작동하는 방법과 클라이언트가 REST API를 magento에 호출하여 인증 방법과 magento가 응답을 반환하는 방법을 찾고 있습니다.
조언을 찾고 있습니다.
답변
Magento REST API에 대한 자세한 설명은 여기를 참조하십시오 . 로그인 한 고객으로 제품을 검색하는 방법에 대한 예도 있습니다. 대답을 더 길게 만들기 위해 여기에서 재현하겠습니다.
<?php
/**
* Example of products list retrieve using Customer account via Magento REST API. OAuth authorization is used
*/
$callbackUrl = "http://yourhost/oauth_customer.php";
$temporaryCredentialsRequestUrl = "http://magentohost/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://magentohost/oauth/authorize';
$accessTokenRequestUrl = 'http://magentohost/oauth/token';
$apiUrl = 'http://magentohost/api/rest';
$consumerKey = 'yourconsumerkey';
$consumerSecret = 'yourconsumersecret';
session_start();
if (!isset($_GET['oauth_token']) && isset($_SESSION['state']) && $_SESSION['state'] == 1) {
$_SESSION['state'] = 0;
}
try {
$authType = ($_SESSION['state'] == 2) ? OAUTH_AUTH_TYPE_AUTHORIZATION : OAUTH_AUTH_TYPE_URI;
$oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1, $authType);
$oauthClient->enableDebug();
if (!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$requestToken = $oauthClient->getRequestToken($temporaryCredentialsRequestUrl);
$_SESSION['secret'] = $requestToken['oauth_token_secret'];
$_SESSION['state'] = 1;
header('Location: ' . $adminAuthorizationUrl . '?oauth_token=' . $requestToken['oauth_token']);
exit;
} else if ($_SESSION['state'] == 1) {
$oauthClient->setToken($_GET['oauth_token'], $_SESSION['secret']);
$accessToken = $oauthClient->getAccessToken($accessTokenRequestUrl);
$_SESSION['state'] = 2;
$_SESSION['token'] = $accessToken['oauth_token'];
$_SESSION['secret'] = $accessToken['oauth_token_secret'];
header('Location: ' . $callbackUrl);
exit;
} else {
$oauthClient->setToken($_SESSION['token'], $_SESSION['secret']);
$resourceUrl = "$apiUrl/products";
$oauthClient->fetch($resourceUrl);
$productsList = json_decode($oauthClient->getLastResponse());
print_r($productsList);
}
} catch (OAuthException $e) {
print_r($e);
}
답변
위의 코드에서 토큰과 토큰 비밀을 복사 할 수 있습니다.
...........
echo 'token:---'.$_SESSION['token'].'----secret----'.$_SESSION['secret'];
........
따라서 제품을 생성 / 편집 할 수있는 아래와 같은 코드를 준비 할 수 있습니다.
<?php
$apiUrl = 'APIURL';
$consumerKey = 'CONSUMERKEY';
$consumerSecret = 'CONSUMERSECRED';
$token = 'TOCKEN';
$tokensecret = 'TOKENSCRET';
try {
$oauthClient = new OAuth($consumerKey, $consumerSecret, OAUTH_SIG_METHOD_HMACSHA1);
$oauthClient->setToken($token, $tokensecret);
$oauthClient->enableDebug();
$productData = json_encode(array(
'name' => 'TEST PRODUCT',
'price' => 11.11
));
$resourceUrl = "$apiUrl/products/222";
$oauthClient->fetch($resourceUrl, $productData , 'PUT', array('Content-Type' => 'application/json'));
$responseArr = json_decode($oauthClient->getLastResponse());
print_r($responseArr);
} catch (OAuthException $e) {
print_r($e);
}
?>