Проблема при вставке пользовательских параметров запроса в API-интерфейс cardmarket. - PullRequest
0 голосов
/ 13 марта 2019

У меня проблема во время запросов 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);



?>
...