Одноногий OAuth 1.0a с PHP cURL - проблема аутентификации - PullRequest
0 голосов
/ 17 октября 2019

Получил ответ "Аутентификация не удалась" от API, но он отлично работает с Почтальоном. Я думаю, что проблема с генерацией подписи, но перепробовал много вариантов для этого. oauth_token не требуется в соответствии с руководством (и командой поддержки).

  • независимо от того, что такое $post_data
  • Заголовки генерируются через Postman и модифицируются для применения переменных PHP

схема Библии oauth

Что здесь может быть не так?

  $oauth_sig_m = "HMAC-SHA1";
  $oauth_v     = "1.0";
  $postdata = json_encode($data);

  $nonce     = mt_rand();
  $timestamp = time();

  $base = 'POST&' . rawurlencode('https://www.wine-logistix.de/API/v3/order_create/') . '&'
      . rawurlencode("oauth_consumer_key=" . rawurlencode($config['consumer_key']) . '&'
      . '&oauth_nonce=' . rawurlencode($nonce)
      . '&oauth_signature_method=' . rawurlencode('HMAC-SHA1')
      . '&oauth_timestamp=' . rawurlencode($timestamp)
      . '&oauth_token='   
      . '&oauth_version=' . rawurlencode('1.0'));

  $key = rawurlencode($config['consumer_secret']);
  $sig = base64_encode(hash_hmac("sha1", $base, $key, true));

  $authHeader = "Authorization: OAuth oauth_consumer_key=\"{$key}\",oauth_nonce=\"{$nonce}\",oauth_signature_method=\"{$oauth_sig_m}\",oauth_timestamp=\"{$timestamp}\",oauth_token=,oauth_version=\"{$oauth_v}\",oauth_signature=\"{$sig}\"";


  $curl = curl_init();

  curl_setopt_array($curl, array(
    CURLOPT_URL => "https://www.wine-logistix.de/API/v3/order_create/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => ["json" => $postdata],
    CURLOPT_HTTPHEADER => array(
      "Accept: */*",
      "Accept-Encoding: gzip, deflate",
//      "Authorization: " . 'OAuth oauth_consumer_key="' . rawurlencode($config["consumer_key"]) . '",oauth_nonce="' . rawurlencode($nonce) . '",oauth_signature_method="' . rawurlencode($oauth_sig_m) . '",oauth_timestamp="' . rawurlencode($timestamp) . '",oauth_version="' . rawurlencode($oauth_v) . '",oauth_signature="' . rawurlencode($sig) . '"' . "",
      $authHeader,
      "Cache-Control: no-cache",
      "Connection: keep-alive",
      "Content-Type: application/json",
      "Host: www.wine-logistix.de",
      "Postman-Token: 0782468f-3eab-4d93-9708-35d21029e95f,c3a3820b-e814-4e6f-ad05-4ecff69c6285",
      "User-Agent: PostmanRuntime/7.18.0",
      "cache-control: no-cache"
    ),
  ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...