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?
- 
 Great. After several days of heavy debugging solution is found suddenly. I use github.com/springimport/magento2-api-v1tsifra– tsifra2017年04月08日 09:13:47 +00:00Commented Apr 8, 2017 at 9:13
1 Answer 1
Solution came suddenly. It looks like url and params were encoded wrongly. I use this library to ease rest api coding https://github.com/springimport/magento2-api-v1
 use springimport\magento2\apiv1\Configuration,
 springimport\magento2\apiv1\ApiFactory;
 ...
 $configuration = new Configuration;
 $configuration->setBaseUri('https://dev.devserver.com/index.php/rest/V1/customers/1');
 $configuration->setConsumerKey('aca1rh9env59axm0ob48xfu62t9s4a5e');
 $configuration->setConsumerSecret('dgn4y1ejfu9aixb5mrio4kbsor5tq208');
 $configuration->setToken('fi5keosdaod7hgqsyhv9i8o2yxvk0dqx');
 $configuration->setTokenSecret('ugeovkdcyvl3q2wc0kxjmgiprobtr63g');
 $apiFactory = new ApiFactory($configuration);
 $client = $apiFactory->getApiClient();
 $res = $client->request('GET', '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', ['verify' => false]);
 echo $res->getStatusCode();
 // 200
 echo $res->getHeaderLine('content-type');
 // 'application/json; charset=utf8'
 echo $res->getBody();
 die();
 ...