Oauth 1.0 - подключение к API в PHP - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь подключиться к API, который будет получать информацию о продукте от NETSUITE и предоставлять ее на мой веб-сайт. Проблема в том, что я могу связаться с ним из PostMan, потому что он генерирует подпись и существительное. Проблема, которую я испытываю, заключается в том, что когда я хочу подключиться через PHP, я не могу подключиться. Я также пытался с CURL, и что-то лучше случилось.

Мой текущий код такой:

$url = "https://4815179.suitetalk.api.netsuite.com/rest/platform/v1/record/inventorynumber/401";
        date_default_timezone_set("America/Toronto");
        $timestamp = time();
        $nonce = time();
        $signatureMethod = 'HMAC-SHA1';
        $version = 1.0;
        $accessToken = "xxxxxxxxxxxxxxxxxxxxxxxx";
        $consumer_key = "xxxxxxxxxxxxxxxxxxxxxxxx";
        $consumer_secret = "xxxxxxxxxxxxxxxxxxxxxxxx";
        $oauth_access_token_secret = "xxxxxxxxxxxxxxxxxxxx";
        $signature = $this->generateSignature($timestamp, $nonce, $signatureMethod, $version,$consumer_key,$consumer_secret,$oauth_access_token_secret,$accessToken);

        $authHeader = "Authorization: OAuth oauth_consumer_key=\"{$consumer_key}\",oauth_nonce=\"{$nonce}\",oauth_signature_method=\"{$signatureMethod}\",oauth_timestamp=\"{$timestamp}\",oauth_token=\"{$accessToken}\",oauth_version=\"{$version}\",oauth_signature=\"{$signature}\"";
    $curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://4815179.suitetalk.api.netsuite.com/rest/platform/v1/record/inventorynumber/401",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array($authHeader),

));

$response = curl_exec($curl);

curl_close($curl);

Функция генератора подписи:

public function generateSignature($timestamp, $nonce, $signatureMethod, $version,$consumer_key,$consumer_secret,$oauth_access_token_secret,$accessToken)
    {
        $base = 'GET' . "&" . rawurlencode('https://4815179.suitetalk.api.netsuite.com/rest/platform/v1/record/inventorynumber/401') . "&"
        . rawurlencode("oauth_consumer_key=" . rawurlencode($consumer_key)
        . "&oauth_nonce=" . rawurlencode($nonce)
        . "&oauth_signature_method=" . rawurlencode($signatureMethod)
        . "&oauth_timestamp=" . rawurlencode($timestamp)
        . "&oauth_token=" . rawurlencode($accessToken)
        . "&oauth_version=" . rawurlencode($version));

        $key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        $signature = base64_encode(hash_hmac('sha1', $base, $key, true));

        return $signature;
    }

Я получил ошибку в ответ:

{"type":"https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2","title":"Invalid login attempt, for more details see Login Audit Trail.","status":401,"o:errorCode":"INVALID_LOGIN"}

HELP!

...