【发布时间】:2013-03-24 05:15:28
【问题描述】:
尝试使用 rest api 将产品添加到 Magento 时,返回 401 状态并返回“oauth_problem=nonce_used”消息。奇怪的是,这些产品仍然是进口的,但这真的让我很失望,因为我没有得到更新库存信息的产品 ID。
Magento 安装是全新的(crucialwebhost 安装程序)1.7.0.2,我使用的代码几乎是从 magento 网站复制和粘贴的...
$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();
确切错误:{"messages":{"error":[{"code":401,"message":"oauth_problem=nonce_used"}]}}
【问题讨论】:
-
在 Magento 中添加产品的实际调用似乎每进行 1 次调用就会运行两次。我在 ../Mage/Oauth/Model/Server.php 中编辑了 _validateNonce 函数以跳过验证过程,现在我收到一个错误,表明我要插入的产品中的 SKU 必须是唯一的(并且它正在插入产品)。所以它似乎是插入产品然后尝试再次插入导致错误......这应该很有趣......任何人都想打败我;-)
-
您找到解决方案了吗?遇到同样的问题,绝对不可能破解核心代码。