我正在使用oAuth开发Magento2 REST API。 我也在使用CURL调用REST API。
我的API正在工作,如果我致电API以获取特定的客户信息或 特定产品信息。
但是,当我调用API获取所有产品时,它将要求searchCriteria。 而且,如果我使用搜索条件,那么它会向我显示“无效签名”之类的错误。我已经看到我们许多人遇到这个问题。
有什么解决办法吗?
非常感谢。
我的代码段如下。
function sign($method, $url, $data, $consumerSecret, $tokenSecret)
{
$url = urlEncodeAsZend($url);
$data = urlEncodeAsZend(http_build_query($data, '', '&'));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
function urlEncodeAsZend($value)
{
$encoded = rawurlencode($value);
$encoded = str_replace('%7E', '~', $encoded);
return $encoded;
}
$consumerKey = "myconsumerKey";
$consumerSecret = "myconsumerSecret";
$accessToken = "myaccessToken";
$accessTokenSecret = "myaccessTokenSecret";
$method = 'GET';
$searchCriteria = urlencode('searchCriteria[filterGroups][0][filters][0][field]=category_id&searchCriteria[filterGroups][0][filters][0][value]=1268&searchCriteria[filterGroups][0][filters][0][conditionType]=eq&searchCriteria[sortOrders][0][field]=created_at&searchCriteria[sortOrders][0][direction]=DESC&searchCriteria[pageSize]=10&searchCriteria[currentPage]=1');
//$searchCriteria['pageSize'] = 20;
$url = 'http://myhost.local/rest/V1/products?' . $searchCriteria;
//var_dump($url);exit;
//
$data = [
'oauth_consumer_key' => $consumerKey,
'oauth_nonce' => md5(uniqid(rand(), true)),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_timestamp' => time(),
'oauth_token' => $accessToken,
'oauth_version' => '1.0',
];
$data['oauth_signature'] = sign($method, $url, $data, $consumerSecret, $accessTokenSecret);
//var_dump($data['oauth_signature']);exit;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);exit;