Error while using REST api in magento

2019-01-12 05:28发布

问题:

I have set up magento locally in my system using XAMPP

I have created a file in root directory named dm.php with the contents

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

But this is giving me the following error

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

Can anybody shed some light on this Thanks

Since oauth is not possible to install in xampp windows i changed the contents of my dm.php file to this.

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

Now i am getting an error like this

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

What am i doing wrong?

回答1:

First of all Go to magento admin panel System->Webservice->RESt Roles->Guest->Resources Access ->SET ALL

Similarly Go to System->Webservice->RESt Attribute->Guest->Resources Access ->SET ALL

Then Hit this url http://****/chanchal/magento/api/rest/products in web Browser and check what error it shows....

According to me it must show product in your website in xml format.

Please let me know..

EDIT: I configured a localhost just now and got this output refer the Screenshot. Be sure there is product in your magento.

Similarly follow the above steps for admin,customer then create a Ouath consumer from admin panel , Install RESTClient For Mozilla Firefox And follow Here

These for steps are necessary for the setup..the link might help you..

Authentication Endpoints

1./oauth/initiate - this endpoint is used for retrieving the Request Token.

2./oauth/authorize - this endpoint is used for user authorization (Customer).

3./admin/oauth_authorize - this endpoint is used for user authorization (Admin).

4./oauth/token - this endpoint is used for retrieving the Access Token.

Let me know if you have any issues.

Best of luck



回答2:

A bit of code modifications will easily solve this error 403 forbidden.

What magento engine does is that it uses the default guest user to provide access to the REST api methods. The guest user does not have much powers so it should be better to change this functionality of magento. There are 2 ways of doing this:

1) Quick and dirty fix:
in the file /app/code/core/Mage/Api2/Model/Auth.php, change the value of:
DEFAULT_USER_TYPE = 'guest'
to
DEFAULT_USER_TYPE = 'admin'.

In the file
/app/code/core/Mage/Api2/Model/Auth/Adapter.php,
change this line from
return (object) array('type' => Mage_Api2_Model_Auth::DEFAULT_USER_TYPE, 'id' => null);
to this:
return (object) array('type' => Mage_Api2_Model_Auth::DEFAULT_USER_TYPE, 'id' => '1');

This way the authentication system will not be broken.

2) Proper and long run fix:
Override the two functionalities using the magento overriding mechanism to have a better solution in accordance to magento standards. This way the core files will be intact.



回答3:

We use this link to install oauth for php. Its good and easy to add extension for php.

install oauth php

I hope it helps to all and would solved 'OAuth' not found fatal error.



回答4:

I had the same issue and was struggling for a week but just try insatlling new version of xammp or wamp with supports ouath.The better solution was ,I installed Ammps 1.9 and in php5.4 I resolved the extension of oauth but still make sure that you select the proper php for extension oauth is supported (php5.4)



回答5:

For installing Oauth : http://www.magentocommerce.com/api/rest/authentication/oauth_authentication.html

Installing PHP Extension for Oauth : 1. Download php_oauth.dll file and add it under C:\xampp\php\ext\ 2. add [PHP_OAUTH] extension=php_oauth.dll in php.ini



标签: api magento rest