Я пытаюсь подключиться к 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!