我正在与Netsuite Rest Web服务API(不是SOAP / RESTlet)进行集成。我使用提供的集合在邮递员中充分发挥了作用,但没有弄清楚签名的实际字符串,并且REST文档未显示任何内容。我试图同时使用其他两个服务中的文档。
因此,从邮递员那里获取了日志,我试图使用帐户ID,使用者密钥,令牌,创建随机数和Unix时间戳来复制我认为要做的事情。
GET / rest / platform / v1 / metadata-catalog / record?select =客户HTTP / 1.1接受:application / swagger + json授权:OAuthrealm =“ 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”用户代理:PostmanRuntime / 7.22.0缓存控制:无缓存邮递员令牌:cbc0f225-374c-4ecc-8b5b-daf60469137e主机:tstdrv2164811.suitetalk.api.netsuite.com接受编码:gzip,放气,br Cookie:NS_ROUTING_VERSION = LAGGING连接:保持活动状态
<?php
$account = 'TSTDRV2164811';
$consumer = '2bb1d46bb5f3a69fdea1ede39bf46e186bd860a15d8deaf51f7488b1e09bd2a2';
$token = '02545230f53d0cf8fc5075f8cee01847f28131127fad358501479952bb8ce046';
$key = ($consumer & $token);
//$created = date('U');
//$nonce = substr(md5(uniqid(true)), 0, 10);
$created = '1579805526';
$nonce = 'V5GBSPyMRPB';
$sign = ($account & $consumer & $token & $nonce & $created);
$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,
$created
);
echo $output;
?>
我希望获得上面的值,但是我得到了这个
<root>
<signature><![CDATA[X7YAsD4a%2F1T0EZ7z4fSocGSFIps%3D]]></signature>
<Nonce><![CDATA[V5GBSPyMRPB]]></Nonce>
<Created><![CDATA[1579805526]]></Created>
</root>
希望此人有经验,因为充其量缺少文档
您生成签名的字符串必须以非常特定的方式构造。
全部使用大写字母+&
+基本URL +&
+ URI编码的参数块(按字母顺序排列,不包括REALM)。除了Web请求本身中的任何参数外,还需要包括一些OAuth参数,例如oauth_signature_method
。
这里是用另一种语言来构造要签名的字符串的示例。
// 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)));