如何将magento REST API与第三方集成?


9

我只是想查找有关REST API的信息。magento资源和一些私人博客中有一些示例。都一样!

作为基本信息,我发现是否要通过REST API更新产品,因此需要使用管理员授权端点。(/ admin / oauth_authorize),如果我使用客户或访客,则可以检索数据。

我尝试创建示例代码并进行检查,发现通过浏览器运行代码时,我需要先登录管理员,然后需要接受访问权限,然后才能使用API​​资源。

我不知道为什么它要我先登录admin。如果我必须登录才能访问它,那么它将在服务器之间内部运行。

我试图使用下面的博客创建示例代码

http://inchoo.net/ecommerce/magento/using-magento-rest-zend_oauth_consumer/comment-page-1/#comment-66775

而且工作正常,并且也给予了回应。

实际上,我正在寻找它如何在两台服务器之间内部运行以及客户端如何调用REST API进行magento身份验证以及magento如何返回响应。

寻求建议。


REST API用于OAuth访问,即用户交互,因此对于您来说,这可能不是正确的选择。如果你不希望使用SOAP API,也许这个问题的答案+帮助你:magento.stackexchange.com/questions/510/...
法比安Schmengler

Answers:


6

您可以在此处找到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);
}

我已经测试了这段代码。当我使用$ adminAuthorizationUrl =' magentohost / oauth / authorize '时,它将首先将我重定向到客户登录,当我使用$ adminAuthorizationUrl =' magentohost / admin / oauth_authorize '时,它将首先将我重定向到管理员登录,然后我需要首先对其进行身份验证。第三方如何才能访问此东西。意味着如果我要从第三方设置一位cron来完成这项工作,例如创建新产品或更新现有产品,则如何对其进行身份验证。
2014年

@Marius,您知道答案中最后一个OP评论的任何解决方案吗?在不重定向和记录过程的情况下使用oAuth和REST
sergio

@塞尔吉奥。对不起,我不知道
马吕斯

我对这个oAuth业务还不是很陌生,但是据我了解,它的全部目的是强制进行交互式登录。注册的网站客户或管理员需要对应用进行物理授权。如果您不希望这样做,则可以尝试使用“来宾”角色,我认为该角色不需要oAuth步骤(我自己也没有尝试过);或使用SOAP / XML-RPC API代替REST。
Doug McLean 2015年

@DougMcLean或您可以实现自定义身份验证适配器snowcore.net/magento-rest-without-oauth
Roman Snitko

2

从上面的代码中,您可以令牌和令牌密钥,只需将其复制即可:

...........
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);
}

?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.