在调用magento 1.9.2 rest api时出错

时间:2015-10-14 11:14:57

标签: api rest magento magento-1.9

我正在使用Magento 1.9.2 vesrion。使用下面的代码来调用rest api。

public function indexAction() {

    //Basic parameters that need to be provided for oAuth authentication
    //on Magento
    $params = array(
        'siteUrl' => 'http://127.0.0.1:8080/magentodemo/',
        'requestTokenUrl' => 'http://127.0.0.1:8080/magentodemo/oauth/initiate',
        'accessTokenUrl' => 'http://127.0.0.1:8080/magentodemo/oauth/token',
        'authorizeUrl' => 'http://127.0.0.1:8080/magentodemo/admin/oauth_authorize',//This URL is used only if we authenticate as Admin user type
        'consumerKey' => 'c359b57d0d069a336db94fa4aabd61ce',//Consumer key registered in server administration
        'consumerSecret' => '2ef029c871b7c013619cc15445a83c25',//Consumer secret registered in server administration
        'callbackUrl' => 'http://127.0.0.1:8080/magentodemo/restconnect/index/callback',//Url of callback action below
    );

    // Initiate oAuth consumer with above parameters
    $consumer = new Zend_Oauth_Consumer($params);
    // Get request token
    $requestToken = $consumer->getRequestToken();
    // Get session
    $session = Mage::getSingleton('core/session');
    // Save serialized request token object in session for later use
    $session->setRequestToken(serialize($requestToken));
    // Redirect to authorize URL
    $consumer->redirect();

    return;
}

public function callbackAction() {

    //oAuth parameters
    $params = array(
        'siteUrl' => 'http://127.0.0.1:8080/magentodemo/',
        'requestTokenUrl' => 'http://127.0.0.1:8080/magentodemo/oauth/initiate',
        'accessTokenUrl' => 'http://127.0.0.1:8080/magentodemo/oauth/token',
        'consumerKey' => 'c359b57d0d069a336db94fa4aabd61ce',
        'consumerSecret' => '2ef029c871b7c013619cc15445a83c25'
    );

    // Get session
    $session = Mage::getSingleton('core/session');
    // Read and unserialize request token from session
    $requestToken = unserialize($session->getRequestToken());
    // Initiate oAuth consumer
    $consumer = new Zend_Oauth_Consumer($params);
    // Using oAuth parameters and request Token we got, get access token
    $acessToken = $consumer->getAccessToken($_GET, $requestToken);
    // Get HTTP client from access token object
    $restClient = $acessToken->getHttpClient($params);
    // Set REST resource URL
    $restClient->setUri('http://127.0.0.1:8080/magentodemo/api/rest/products');
    // In Magento it is neccesary to set json or xml headers in order to work
    $restClient->setHeaders('Accept', 'application/json');
    // Get method
    $restClient->setMethod(Zend_Http_Client::GET);
    //Make REST request
    $response = $restClient->request();
    // Here we can see that response body contains json list of products
    Zend_Debug::dump($response);

    return;
}

每次都低于错误

a:5:{i:0;s:83:"Could not retrieve a valid Token response from Token URL:
oauth_problem=nonce_used";i:1;s:1453:"#0 D:\xampp\htdocs\magentodemo\lib\Zend\Oauth\Http.php(190): Zend_Oauth_Http->_assessRequestAttempt(Object(Zend_Http_Response))
#1 D:\xampp\htdocs\magentodemo\lib\Zend\Oauth\Http.php(191): Zend_Oauth_Http->startRequestCycle(Array)
#2 D:\xampp\htdocs\magentodemo\lib\Zend\Oauth\Http.php(191): Zend_Oauth_Http->startRequestCycle(Array)
#3 D:\xampp\htdocs\magentodemo\lib\Zend\Oauth\Http\RequestToken.php(51): Zend_Oauth_Http->startRequestCycle(Array)
#4 D:\xampp\htdocs\magentodemo\lib\Zend\Oauth\Consumer.php(115): Zend_Oauth_Http_RequestToken->execute()
#5 D:\xampp\htdocs\magentodemo\app\code\local\Test\RestConnect\controllers\IndexController.php(52): Zend_Oauth_Consumer->getRequestToken()
#6 D:\xampp\htdocs\magentodemo\app\code\core\Mage\Core\Controller\Varien\Action.php(418): Test_RestConnect_IndexController->indexAction()
#7 D:\xampp\htdocs\magentodemo\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#8 D:\xampp\htdocs\magentodemo\app\code\core\Mage\Core\Controller\Varien\Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#9 D:\xampp\htdocs\magentodemo\app\code\core\Mage\Core\Model\App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#10 D:\xampp\htdocs\magentodemo\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#11 D:\xampp\htdocs\magentodemo\index.php(83): Mage::run('', 'store')
#12 {main}";s:3:"url";s:31:"/magentodemo/restconnect/index/";s:11:"script_name";s:22:"/magentodemo/index.php";s:4:"skin";s:7:"default";}

我已创建,管理员的REST角色和分配给管理员用户之一,管理员的REST属性,还创建了REST消费者。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

上述问题有一个小修复。但我需要1天的时间来修复它。在我的系统中,apache在8080端口上运行。在URI验证时,magento oauth存在读取端口的问题。

我已停止其他服务(IIS或Skype),在我的情况下它是IIS。和端口apache在80.这是默认端口。

希望这会对某人有所帮助!!!