netsuite - NetSuite 生成数字签名以调用 restlet
问题描述
我正在使用以下代码生成数字签名来调用 netsuite 的 restlet。
var NETSUITE_ACCOUNT_ID = 'xxxxxxx' var BASE_URL = ' https://2024027.restlets.api.netsuite.com/app/site/hosting/restlet.nl' var HTTP_METHOD = 'POST' var SCRIPT_ID = '8' var OAUTH_VERSION = '1.0'; var SCRIPT_DEPLOYMENT_ID = '1' var TOKEN_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" var TOKEN_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" var CONSUMER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" var CONSUMER_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" var text = ""; 变量长度 = 32; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
var OAUTH_NONCE = text;
var TIME_STAMP = Math.round(+new Date() / 1000);
var data = '';
data = data + 'deploy=' + SCRIPT_DEPLOYMENT_ID + '&';
data = data + 'oauth_consumer_key=' + CONSUMER_KEY + '&';
data = data + 'oauth_nonce=' + OAUTH_NONCE + '&';
data = data + 'oauth_signature_method=' + 'HMAC-SHA1' + '&';
data = data + 'oauth_timestamp=' + TIME_STAMP + '&';
data = data + 'oauth_token=' + TOKEN_ID + '&';
data = data + 'oauth_version=' + OAUTH_VERSION + '&';
data = data + 'script=' + SCRIPT_ID;
var encodedData = encodeURIComponent(data);
var completeData = HTTP_METHOD + '&' + encodeURIComponent(BASE_URL) + '&' + encodedData;
var hmacsha1Data = CryptoJS.HmacSHA1(completeData, CONSUMER_SECRET + '&' + TOKEN_SECRET);
//var base64EncodedData = btoa(JSON.stringify(hmacsha1Data));
var base64EncodedData = CryptoJS.enc.Base64.stringify(hmacsha1Data);
var oauth_signature = encodeURIComponent(base64EncodedData);
var OAuth = 'OAuth oauth_signature="' + oauth_signature + '",';
OAuth = OAuth + 'oauth_version="1.0",';
OAuth = OAuth + 'oauth_nonce="' + OAUTH_NONCE + '",';
OAuth = OAuth + 'oauth_signature_method="HMAC-SHA1",';
OAuth = OAuth + 'oauth_consumer_key="' + CONSUMER_KEY + '",';
OAuth = OAuth + 'oauth_token="' + TOKEN_ID + '",';
OAuth = OAuth + 'oauth_timestamp="' + TIME_STAMP + '",';
OAuth = OAuth + 'realm="' + NETSUITE_ACCOUNT_ID + '"';
console.log(OAuth);
我收到以下回复。
{“错误”:{“代码”:“INVALID_LOGIN_ATTEMPT”,“消息”:“无效登录尝试。”}}
任何人都可以帮助我正确生成签名。
解决方案
推荐阅读
- javascript - “不应使用命名函数表达式”的 SonarError 的解决方法
- json - 将配置值从 json 文件导入 scss
- python - 将行拆分为多个变量
- google-cloud-platform - 我可以获得已将用户添加到角色的所有资源的列表吗?
- sql-server - 当我是系统管理员时,为什么我可以看到某些 SQL Server DB 用户的有效权限而其他人看不到
- android - 如何防止 Dexguard 混淆 anroid studio 中的资源文件夹?
- sql - 使用由日期范围驱动的 ID 更新字段
- reactjs - 如何检查长列表是否在 React 中呈现
- flutter - 发送数据时连接丢失
- android - 如何在活动和应用程序级别将 CountDownTimer 与 ViewModel 和 Livedata 一起使用?