簡體   English   中英

Netsuite Rest Web 服務簽名

[英]Netsuite Rest Web Services Signature

我正在與 Netsuite Rest Web Services API(不是 SOAP/RESTlets)集成。 我使用提供的集合在郵遞員中完全運行,但還沒有弄清楚簽名的實際字符串,並且 REST 文檔沒有顯示任何內容。 我試圖使用來自其他兩個服務的文檔,但沒有使用。

因此,從郵遞員那里提取日志,我試圖復制我認為它在使用帳戶 ID、消費者密鑰、令牌、創建隨機數和 unix 時間戳時所做的事情。

GET / REST /平台/ V1 /元數據目錄/記錄選擇=客戶的HTTP / 1.1接受:應用/招搖+ JSON授權:OAuth的境界= “TSTDRV2164811”,oauth_consumer_key = “2bb1d46bb5f3a69fdea1ede39bf46e186bd860a15d8deaf51f7488b1e09bd2a2” 的oauth_token = “02545230f53d0cf8fc5075f8cee01847f28131127fad358501479952bb8ce046”,oauth_signature_method = "HMAC-SHA1", oauth_timestamp="1579805526", oauth_nonce="V5GBSPyMRPB", oauth_version="1.0", oauth_signature="rp6xmqnCofmVPl9D0nk48G9DVww%3D" User-Agent-PostRuntime-Agent-Cacheman PostRun-Agent/7: : cbc0f225-374c-4ecc-8b5b-daf60469137e 主機: tstdrv2164811.suitetalk.api.netsuite.com Accept-Encoding: gzip, deflate, br Cookie: NS_ROUTING_VERSION=LAGGING Connection: keep-alive

<?php

$url = 'https://TSTDRV2164811.suitetalk.api.netsuite.com/rest/platform/v1/metadata-catalog/record?select=customer';
//$url = 'https://rest.netsuite.com/app/site/hosting/restlet.nl?script=6&deploy=1&customParam=someValue&testParam=someOtherValue';
//or https://webservices.netsuite.com/services/NetSuitePort_2015_2 for webservices
$httpMethod = 'GET';
$tokenKey = '02545230f53d0cf8fc5075f8cee01847f28131127fad358501479952bb8ce046';
$tokenSecret = '8c4bb18a6ff15a699825ad833845d0a3dc3abca80aa89abe3c58f77eecd96f9e';
$consumerKey = '2bb1d46bb5f3a69fdea1ede39bf46e186bd860a15d8deaf51f7488b1e09bd2a2';
$consumerSecret = 'a684af8065f75f647ff24f58c3eeb48423907981ea7b93027f53cf63dcfd7626';
$signatureMethod = 'HMAC-SHA1';     //or HMAC-SHA256
$version = '1.0';
$nonce = 'V5GBSPyMRPB';                  //substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10);
$timestamp = '1579805526';              //  time();
$realm = 'TSTDRV2164811';                   //scompid


$baseString = 'oauth_consumer_key='. $consumerKey;
$baseString .= '&oauth_nonce='. $nonce;
$baseString .= '&oauth_signature_method='. $signatureMethod;
$baseString .= '&oauth_timestamp='. $timestamp;
$baseString .= '&oauth_token='. $tokenKey;
$baseString .= '&oauth_version='. $version;
//$baseString .= '&realm='. $realm;

$base = urlencode($baseString);
$sign = $httpMethod .'&'. urlencode($url) .'&'. $base;
$key = urlencode($consumerSecret) .'&'. urlencode($tokenSecret);

$signature = urlencode(base64_encode(hash_hmac('sha1', $sign, $key, true)));

$output .= sprintf(
    '<root><signature>%s</signature><Nonce>%s</Nonce><Created>%s</Created></root>',
    $signature,
    $nonce,
    $timestamp
);



echo $output;

我希望得到上述值,但我得到了這個

<root>
    <signature><![CDATA[MW0rGmPfcY7yxLOMSWV6jcWs6s8%3D]]></signature>
    <Nonce><![CDATA[V5GBSPyMRPB]]></Nonce>
    <Created><![CDATA[1579805526]]></Created>
</root>

我將之前的代碼修改為我目前正在嘗試的代碼,但仍然沒有通過

您生成簽名的字符串必須以非常特定的方式構造。

全部大寫 + & + URI 編碼的操作 Base URL + & + URI 編碼的參數塊,按字母順序排列,不包括realm 除了 Web 請求本身中的任何參數(如oauth_signature_method之外,它還需要包含一些 OAuth 參數。

這是一個用不同語言構建要簽名的字符串的示例。

  // These are in alphabetical order, lower case - required by signing
  STRING2SIGN := '';
  STRING2SIGN := STRING2SIGN + 'deploy=' + SCRIPT_DEPLOYMENT_ID + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_consumer_key=' + CONSUMER_KEY + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_nonce=' + OAUTH_NONCE + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_signature_method=' + 'HMAC-SHA1' + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_timestamp=' + TIME_STAMP + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_token=' + TOKEN_ID + '&';
  STRING2SIGN := STRING2SIGN + 'oauth_version=' + OAUTH_VERSION + '&';
  STRING2SIGN := STRING2SIGN + 'script=' + SCRIPT_ID;
  STRING2SIGN := URIEncode(STRING2SIGN);
  STRING2SIGN := HTTP_METHOD + '&' + URIEncode(BASE_URL) + '&' + STRING2SIGN;
  oauth_signature := URIEncode(TNetEncoding.Base64.EncodeBytesToString(THashSHA1.GetHMACAsBytes(STRING2SIGN, CONSUMER_SECRET + '&' + TOKEN_SECRET)));

可以在您的請求中省略請求參數,例如deployscript但需要包含所有oauth_參數以及您的請求中包含的任何其他參數。

PostMan 將變量拼接在一起以構建 URL 的方式有些奇怪。 如果您粘貼 URL,而不是從 {{COMPANY_URL}} 構建的 {{REST_SERVICES}},您將獲得完全相同的隨機數和時間戳值的不同簽名。 所以你真的無法比較 PostMan 正在做什么和你自己的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM