问题
使用 SuiteScript 2.0 连接到一个 RESTlet 脚本
解决方案
任何与 NetSuite 的集成或非用户界面访问,如果使用管理员角色或其他高特权角色,需要使用两因素身份验证(2FA),或者需要调整为使用基于令牌的身份验证(TBA)。
设置要求
使用 RESTlets 的 TBA 所需数据
- 对于本示例,假设已经实现了与 RESTlet 脚本的连接。要开始,您需要以下信息:
- CONSUMER_KEY
- CONSUMER_SECRET
- TOKEN_ID
- TOKEN_SECRET
- URL
- ACCOUNT_ID
代码
建议使用 Oauth 和 CryptoJS 这两个库
1. 下载oauth.js and cryptojs.js (或者从 github.com/mark-keaton/oauth-netsuite )
2. 复制oauth.js 和cryptojs.js 到文件柜
3. 创建secret.js 作为存放密钥的地方
示例secret.js
define([], function() {
return {
consumer: {
public: '01234567890abcdef01234567890abcdef01234567890abcdef01234567890ab',
secret: '01234567890abcdef01234567890abcdef01234567890abcdef01234567890ab'
},
token: {
public: '01234567890abcdef01234567890abcdef01234567890abcdef01234567890ab',
secret: '01234567890abcdef01234567890abcdef01234567890abcdef01234567890ab'
},
realm: '1234567'
}
}); // realm == ACCOUNT_ID
脚本示例
define(['N/https', '/SuiteScripts/oauth', '/SuiteScripts/secret'], function(https, oauth, secret) {
function execute(context) {
var url = 'https://rest.netsuite.com/app/site/hosting/restlet.nl?script=52&deploy=1&myParameter=11111';
var method = 'GET';
var headers = oauth.getHeaders({
url: url,
method: method,
tokenKey: secret.token.public,
tokenSecret: secret.token.secret
});
var body = {
datum1: 'datum1',
datum2: 'foobar'
} //JSON.stringify(body)
headers['Content-Type'] = 'application/json';
var restResponse = https.get({
url: url,
headers: headers,
body: JSON.stringify(body)
});
log.debug('response', JSON.stringify(restResponse));
log.debug('headers', headers);
}
return {
execute: execute
}
});
// 别忘了ID script and deploy ID
在测试过程中,如果出现问题,系统可能会显示“Invalid Login attempt error”(无效的登录尝试错误)的错误或响应。在这种情况下,您可以使用“登录审计追踪”报告来收集更多详细信息。报告位于“Setup > Users / Roles > View Login Audit Trail”下。
在报告的“结果”选项卡中,您可以添加以下字段以获取更多信息:Detail(详细信息),’Token-based Application Name’(用于确认应用程序所发出的请求)和’Token-based Access Token Name’(基于令牌的访问令牌名称)。
Comments