我对 magento REST API 的这个痛苦问题感到非常烦恼。 我可以使用 REST API 获取订单。仅当我尝试使用 POST 方法创建产品时,才会出现以下错误。 我尝试过的 PHP 代码如下。
function upload_to_store($id=null,$product_data=null)
{
/**
* Example of simple product POST using Admin account via Magento REST API. OAuth authorization is used
*/
$callbackUrl = site_url() . "admin_products/upload_to_store/".$id;
$temporaryCredentialsRequestUrl = "url" . urlencode($callbackUrl);
$adminAuthorizationUrl = 'oauth_authorize';
$accessTokenRequestUrl = 'token url';
$apiUrl = 'api url';
$consumerKey = '';
$consumerSecret = '';
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";
$productData = json_encode(array(
'type_id' => 'simple',
'attribute_set_id' => 4,
'sku' => $product_data['sku'],
'weight' => $product_data['weight'],
'status' => 1,
'visibility' => 4,
'name' => $product_data['name'],
'description' => $product_data['description'],
'short_description' => $product_data['short_description'],
'price' => $product_data['price'],
'tax_class_id' => 0,
));
$oauthClient->disableRedirects();
$headers = array('Content-Type' => 'application/json', 'Content_Type' => 'application/json');
$oauthClient->fetch($resourceUrl, $productData, OAUTH_HTTP_METHOD_POST, $headers);
$response = $oauthClient->getLastResponseInfo();
if (isset($response['url'])) {
header('Location: ' . $response['url']);
}
}
return true;
} catch (OAuthException $e) {
print_r($e);
}}
我收到此错误:
OAuthException: Invalid auth/bad request (got a 400, expected HTTP/1.1 20X or a redirect)
我怎样才能摆脱这个? 预先感谢。
你解决这个问题了吗?
对于任何在执行 POST 而 GET 工作正常时遇到“无效的身份验证/错误请求(收到 400,预期 HTTP/1.1 20X 或重定向)”错误的人,我发现它通常与 (已选择)REST 属性。尤其是400错误。
如果是上述创建产品的 POST,请转至系统 -> Web 服务 -> REST 属性 -> 选择管理员并确保您已选择目录、产品和以下(写入)可能性。按保存并重试。大多数情况下,如果您按照 http://devdocs.magento.com/guides/m1x/api/rest/introduction.html
上的文档进行操作,此后就可以正常工作了