更新时间:2023-11-30 10:40:16
在Mage_Api2_Model_Resource,大约227行,找到
$这个 - > GETRESPONSE() - GT;的setHeader('位置',$ newItemLocation);
和刚插入后,这样的:
$这个 - > GETRESPONSE() - GT; setHtt presponse code(202);
参考:***HTTP位置
HTTP位置头字段是从返回HTTP响应中
在两种情况下服务器:
- 要问一个网页浏览器来加载不同的网页。在这
情况下,Location头应与HTTP状态发送
3XX的code。
- 要提供有关的新的位置信息
HTTP状态code发送
创建资源。在这种情况下,Location头应
与201或202
块引用>Getting a 401 status with "oauth_problem=nonce_used" message return when attempting to add products to Magento using the rest api. Oddly, the products are still get imported but it's really throwing me off because I'm not getting the product id's back in which to update the stock info.
Magento install is brand new (crucialwebhost installer) 1.7.0.2 and the code I'm using is pretty much copied and pasted from magento site...
$callbackUrl = '****'; $temporaryCredentialsRequestUrl = "*****/oauth/initiate?oauth_callback=".urlencode($callbackUrl); $adminAuthorizationUrl = '*****/admin/oauth_authorize'; $accessTokenRequestUrl = '*****/oauth/token'; $apiUrl = '*****/api/rest'; $consumerKey = '*****'; $consumerSecret = '******'; 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"; $productData = json_encode(array( 'type_id' => 'simple', 'attribute_set_id' => 4, 'sku' => $local_product['sku'], 'weight' => 1, 'status' => 1, 'visibility' => 4, 'name' => $local_product['name'], 'description' => $local_product['description'], 'short_description' => $local_product['description'], 'price' => $local_product['price'], 'tax_class_id' => 0, )); $headers = array('Content-Type' => 'application/json'); $oauthClient->fetch($resourceUrl, $productData, OAUTH_HTTP_METHOD_POST, $headers); $respHeader = $oauthClient->getLastResponseHeaders(); } } catch(OAuthException $e) { print_r($e); } } session_destroy();
Exact error: {"messages":{"error":[{"code":401,"message":"oauth_problem=nonce_used"}]}}
In Mage_Api2_Model_Resource, about line 227, locate
$this->getResponse()->setHeader('Location', $newItemLocation);
and insert just after this:
$this->getResponse()->setHttpResponseCode(202);
Ref: Wikipedia "HTTP Location":
The HTTP Location header field is returned in responses from an HTTP server under two circumstances:
- To ask a web browser to load a different web page. In this circumstance, the Location header should be sent with an HTTP status code of 3xx.
- To provide information about the location of a newly created resource. In this circumstance, the Location header should be sent with an HTTP status code of 201 or 202