У меня проблема во время запросов API cardMarket.
Документация oAuth: https://www.mkmapi.eu/ws/documentation/API:Auth_OAuthHeader
cardMarket php libcurl рабочие примеры: https://www.mkmapi.eu/ws/documentation/API:Auth_libcurl
Запрос ценовой документации: https://www.mkmapi.eu/ws/documentation/API_2.0:PriceGuide
По умолчанию этот тип запроса имеет переменную по умолчанию idGame = 1, и по умолчанию он работает нормально.
Теперь я пытаюсь изменить эту переменную на idGame = 3.
Согласно документации, мне нужно вставить эту переменную в массив $ params и обработать ее с другими параметрами oAuth, чтобы получить результат.
К сожалению, не работает, и, кажется, я делаю что-то не так.
Я уже обратился в службу поддержки на рынке, но, к сожалению, они не могут мне помочь.
Я отправляю свой код, чтобы попросить о помощи, если кто-то видит что-то не так, пожалуйста, сообщите мне.
Спасибо за вашу помощь
<?php
$method = "GET";
$url = "https://api.cardmarket.com/ws/v2.0/priceguide";
$appToken = "///triple-checked in my account///";
$appSecret = "///triple-checked in my account///";
$accessToken = "///triple-checked in my account///";
$accessSecret = "///triple-checked in my account///";
$nonce = uniqid();
$timestamp = time();
$signatureMethod = "HMAC-SHA1";
$version = "1.0";
/**
* Gather all parameters that need to be included in the Authorization header and are know yet
*
* Attention: If you have query parameters, they MUST also be part of this array!
*
* @var $params array|string[] Associative array of all needed authorization header parameters
*/
$params = array(
'realm' => $url,
'oauth_consumer_key' => $appToken,
'oauth_token' => $accessToken,
'oauth_nonce' => $nonce,
'oauth_timestamp' => $timestamp,
'oauth_signature_method' => $signatureMethod,
'oauth_version' => $version,
'idGame' => '3',
);
/*
As you can see, idGame=3 is part of the associative array, as cardmarket documentation said.
Maybe something wrong with syntax?
*/
$baseString = strtoupper($method) . "&";
$baseString .= rawurlencode($url) . "&";
/*
* Gather, encode, and sort the base string parameters
*/
$encodedParams = array();
foreach ($params as $key => $value)
{
if ("realm" != $key)
{
$encodedParams[rawurlencode($key)] = rawurlencode($value);
}
}
ksort($encodedParams);
print_r ($encodedParams);
/*
* Expand the base string by the encoded parameter=value pairs
*/
$values = array();
foreach ($encodedParams as $key => $value)
{
$values[] = $key . "=" . $value;
}
$paramsString = rawurlencode(implode("&", $values));
$baseString .= $paramsString;
echo $baseString;
/*
* Create the signingKey
*/
$signatureKey = rawurlencode($appSecret) . "&" . rawurlencode($accessSecret);
/**
* Create the OAuth signature
* Attention: Make sure to provide the binary data to the Base64 encoder
*
* @var $oAuthSignature string OAuth signature value
*/
$rawSignature = hash_hmac("sha1", $baseString, $signatureKey, true);
$oAuthSignature = base64_encode($rawSignature);
/*
* Include the OAuth signature parameter in the header parameters array
*/
$params['oauth_signature'] = $oAuthSignature;
/*
* Construct the header string
*/
$header = "Authorization: OAuth ";
$headerParams = array();
foreach ($params as $key => $value)
{
$headerParams[] = $key . "=\"" . $value . "\"";
}
$header .= implode(", ", $headerParams);
/*
* Get the cURL handler from the library function
*/
$curlHandle = curl_init();
/*
* Set the required cURL options to successfully fire a request to MKM's API
*
* For more information about cURL options refer to PHP's cURL manual:
* http://php.net/manual/en/function.curl-setopt.php
*/
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array($header));
curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
/**
* Execute the request, retrieve information about the request and response, and close the connection
*
* @var $content string Response to the request
* @var $info array Array with information about the last request on the $curlHandle
*/
$content = curl_exec($curlHandle);
$info = curl_getinfo($curlHandle);
curl_close($curlHandle);
/*
* Convert the response string into an object
*
* If you have chosen XML as response format (which is standard) use simplexml_load_string
* If you have chosen JSON as response format use json_decode
*
* @var $decoded \SimpleXMLElement|\stdClass Converted Object (XML|JSON)
*/
// $decoded = json_decode($content);
$decoded = simplexml_load_string($content);
$json = json_encode($decoded);
print_r ($decoded);
?>