【问题标题】:Error while using REST api in magento在 magento 中使用 REST api 时出错
【发布时间】:2017-07-20 18:52:27
【问题描述】:

我已经使用 XAMPP 在我的系统中本地设置了 magento

我在根目录中创建了一个名为 dm.php 的文件

<?php
/**
* Example of products list retrieve using Customer account via Magento REST API. OAuth authorization is used
*/
$callbackUrl = "http://localhost/dm.php";
$temporaryCredentialsRequestUrl = "http://localhost/mage2/oauth/initiate?oauth_callback=" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'http://localhost/mage2/oauth/authorize';
$accessTokenRequestUrl = 'http://localhost/mage2/oauth/token';
$apiUrl = 'http://localhost/mage2/api/rest';
$consumerKey = 'enhksf7u33p3snubewb6zcq0z9c63bvv';
$consumerSecret = 'p7e835cdcxofokeep749jgzz4l1e306p';

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

但这给了我以下错误

Fatal error: Class 'OAuth' not found in D:\Webserver\xampp\htdocs\dm.php on line 19

任何人都可以对此有所了解吗 谢谢

由于无法在 xampp windows 中安装 oauth,我将 dm.php 文件的内容更改为此。

<?php
$ch = curl_init('http://localhost/mage2/api/rest/customers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$customers = curl_exec($ch);
echo $customers;
?>

现在我收到这样的错误

{"messages":{"error":[{"code":403,"message":"Access denied"}]}}

我做错了什么?

【问题讨论】:

  • 是否在 Xampp 服务器中启用了 Ouath?它的发生是因为
  • @chanz:我现在检查了。它没有启用。但我认为我们无法在 xampp 中安装 oauth
  • magentocommerce.com/api/rest/authentication/…此链接可能对您有所帮助
  • 消费者密钥、消费者秘密、访问令牌、访问令牌秘密,为必填项

标签: api magento rest


【解决方案1】:

首先 转到magento管理面板System-&gt;Webservice-&gt;RESt Roles-&gt;Guest-&gt;Resources Access -&gt;SET ALL

同样去System-&gt;Webservice-&gt;RESt Attribute-&gt;Guest-&gt;Resources Access -&gt;SET ALL

然后在网络浏览器中点击此 url http://****/chanchal/magento/api/rest/products 并检查它显示的错误......

据我说,它必须以xml 格式在您的网站上显示产品。

请告诉我..

编辑: 我刚才配置了一个本地主机,并得到这个输出参考截图。确保您的 magento 中有产品。

同样按照上面的步骤进行管理员,客户然后从管理面板创建一个 Ouath 消费者,为 Mozilla Firefox 安装 RESTClient 并关注Here

这些步骤是设置所必需的。链接可能会对您有所帮助..

身份验证端点

1./oauth/initiate - 此端点用于检索请求令牌。

2./oauth/authorize - 此端点用于用户授权(客户)。

3./admin/oauth_authorize - 此端点用于用户授权(管理员)。

4./oauth/token - 此端点用于检索访问令牌。

如果您有任何问题,请告诉我。

祝你好运

【讨论】:

  • 我得到的输出是这个,只有这么多
  • 你的magento中有产品吗..它应该显示产品列表
  • 我确定您的 magento 中没有产品。
  • 对不起,这是我的错误,我在我的系统中安装了 3 个 magento,这个目录是空的。感谢您的宝贵时间。此外,我们如何使用用户名保护此访问有密码吗?
  • 我正在将 xampp 与 windows 一起使用。我无法在 windows 中安装 oauth 模块,只需查看我的问题 这是我得到的错误。有什么解决方法吗?
【解决方案2】:

稍微修改一下代码就可以轻松解决这个错误403 forbidden

magento 引擎所做的是它使用默认的guest 用户来提供对 REST api 方法的访问。来宾用户没有太多权力,因此最好更改 magento 的此功能。有两种方法可以做到这一点:

1) 快速而肮脏的修复:
在文件 /app/code/core/Mage/Api2/Model/Auth.php 中,更改:
@987654324 的值@

DEFAULT_USER_TYPE = 'admin'

在文件
/app/code/core/Mage/Api2/Model/Auth/Adapter.php 中,
将这一行从
@987654326 更改@
到此:
return (object) array('type' =&gt; Mage_Api2_Model_Auth::DEFAULT_USER_TYPE, 'id' =&gt; '1');

这样认证系统不会被破坏。

2) 适当且长期的修复:
使用 magento 覆盖机制覆盖这两个功能,以获得符合 magento 标准的更好解决方案。这样核心文件就会完好无损。

【讨论】:

  • 我发现我的确实是一个非常肮脏的解决方案。它使资源无需任何身份验证即可公开使用。建议人们明智地使用它。我根本不会认为这是一个解决方案。这可以仅用于测试资源是否可用。这根本不应该进入生产环境。
  • 谢谢朋友,为了测试我使用了第一种解决方案。你能帮我找到正确的解决方案吗?
  • 有很多关于如何在 magento 中覆盖模块的教程,例如 inchoo.net/ecommerce/magento/… 等等。你可以很容易地通过它们找到确切的方法。
  • 不安全,有一个“管理员”用户组是有原因的,那就是把某些功能放在墙后面。向世界开放,这是个坏主意!
  • 是的,丹,我一发现就这么说。这就是我提到脏这个词的原因。
【解决方案3】:

我们使用此链接为 php 安装 oauth。它很好,很容易为 php 添加扩展。

install oauth php

我希望它对所有人都有帮助,并能解决“OAuth”未找到致命错误。

【讨论】:

  • 您在 C:\xampp\php\ext 文件夹中添加了 php_oauth.dll 文件,并通过在 C:/xampp/php/php.ini 文件中添加 extension=php_oauth.dll 来更改 php.ini 文件.?
  • 我有一个带有 windows 的 zend,并且 oauth 完全可以在我的系统中运行。 zend 是最好的,所以使用 zend 服务器。
  • 就是这样,在我的问题中,我提到我的是 XAMPP。我认为它不会在 XAMPP 中工作。但不太确定。总会有办法做到这一点,但我不会知道:)
  • @BharatChodvadiya 对我来说 127.0.0.1/anusthana/api/rest/products 正在工作,如果我尝试使用 127.0.0.1/anusthana/api/rest/customers 我会遇到错误,例如 -> snag.gy/MVINwS.jpg,你能帮帮我吗
【解决方案4】:

我遇到了同样的问题,并且苦苦挣扎了一周,但只是尝试安装支持 ouath 的新版本的 xammp 或 wamp。更好的解决方案是,我安装了 Ammps 1.9 并在 php5.4 中解决了 oauth 的扩展,但仍然确保为扩展 oauth 选择正确的 php (php5.4)

【讨论】:

    【解决方案5】:

    用于安装 Oauth:http://www.magentocommerce.com/api/rest/authentication/oauth_authentication.html

    为 Oauth 安装 PHP 扩展: 1.下载php_oauth.dll文件,添加到C:\xampp\php\ext\下 2.在php.ini中添加[PHP_OAUTH] extension=php_oauth.dll

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多