I use following code to call rest api in magento 2.1.5
$consumerKey = 'aca1rh9env59axm0ob48xfu62t9s4a5e';
$consumerSecret = 'dgn4y1ejfu9aixb5mrio4kbsor5tq208';
$accessToken = 'fi5keosdaod7hgqsyhv9i8o2yxvk0dqx';
$accessTokenSecret = 'ugeovkdcyvl3q2wc0kxjmgiprobtr63g';
$method = 'GET';
$url = 'https://dev.devserver.com/index.php/rest/V1/customers/1';
$data = [
//'searchCriteria' => '',
'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'] = $this->sign($method, $url, $data, $consumerSecret, $accessTokenSecret);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => [
'Authorization: OAuth ' . http_build_query($data, '', ',')
]
]);
$result = curl_exec($curl);
curl_close($curl);
var_dump($result);
public function sign($method, $url, $data, $consumerSecret, $tokenSecret)
{
$url = $this->urlEncodeAsZend($url);
$data = $this->urlEncodeAsZend(http_build_query($data, '', '&'));
$data = implode('&', [$method, $url, $data]);
$secret = implode('&', [$consumerSecret, $tokenSecret]);
return base64_encode(hash_hmac('sha1', $data, $secret, true));
}
public function urlEncodeAsZend($value)
{
$encoded = rawurlencode($value);
$encoded = str_replace('%7E', '~', $encoded);
return $encoded;
}
Everything works fine in this case. But if i change url to somethinf like this https://dev.devserver.com/index.php/rest/V1/products?searchCriteria[filter_groups][0][filters][0][field]=category_id&searchCriteria[filter_groups][0][filters][0][value]=10
i got error: invalid signature. Can anyone help with this?