suitescript - 套件中的 Rest SuiteTalk 身份验证问题
问题描述
我正在尝试创建一个使用 rest Suitetalk 执行 SuiteQL 的套件,但我正在努力进行身份验证,我可以使用 Postman 毫无问题地执行请求,但它无法在具有相同凭据的套件中工作,我只收到错误“INVALID_LOGIN”
我正在使用库 CRYPTO-JS 来生成签名,代码如下:
const onRequest = (context) => {
let account = "XXXXXXXXXXXXXXXXXXXXXXX";
let consumerKey =
"XXXXXXXXXXXXXXXXXXXXXXX";
let consumerSecret =
"XXXXXXXXXXXXXXXXXXXXXXX";
let tokenId =
"XXXXXXXXXXXXXXXXXXXXXXX";
let tokenSecret = "";
var timestamp = Math.round(new Date().getTime() / 1000); //new Date().getTime().toString().substring(0, 10);
var nonce = generateNonce();
let data = "";
data = data + "oauth_consumer_key=" + consumerKey + "&";
data = data + "oauth_nonce=" + nonce + "&";
data = data + "oauth_signature_method=" + "HMAC-SHA256" + "&";
data = data + "oauth_timestamp=" + timestamp + "&";
data = data + "oauth_token=" + tokenId + "&";
data = data + "oauth_version=" + "1.0";
const encodedData = encodeURIComponent(data);
let baseString =
"POST&" +
encodeURIComponent(
"https://xxxxxxxxxx.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql"
) +
"&" +
encodedData;
let keystring = `${consumerSecret}&${tokenSecret}`;
var signature = CryptoJS.HmacSHA256(baseString, keystring).toString(
CryptoJS.enc.Base64
);
try {
var objResponse = {};
let headerJSON = {
Authorization:
'OAuth realm="' +
account +
'",oauth_consumer_key="' +
consumerKey +
'",oauth_token="' +
tokenId +
'",oauth_signature_method="HMAC-SHA256",oauth_timestamp="' +
timestamp +
'",oauth_nonce="' +
nonce +
'",oauth_version="1.0",oauth_signature="' +
encodeURIComponent(signature) +
'"',
"Content-Type": "application/json",
Prefer: "transient",
};
log.debug("auth string", headerJSON.Authorization);
let requestBody = {
q: "SELECT * FROM item where isonline='T'",
};
objResponse = https.post({
url: "https://XXXXXXX.suitetalk.api.netsuite.com/services/rest/query/v1/suiteql",
headers: headerJSON,
body: JSON.stringify(requestBody),
});
context.response.write(objResponse.body);
} catch (err) {
log.debug("Suitetalk call failed", err);
}};
解决方案
推荐阅读
- javascript - 有没有办法让 Vuetify v-carousel 移动到滚动的下一个项目?
- c# - 通过反射查找泛型类型参数
- r - 从字符串中删除引号空格
- django-models - 我无法在 django 的 sqlite3 中创建新表
- c++ - 如何解决此代码中的浮点错误核心转储?
- python - Qtile ArchLinux 中的“导入错误:小部件”
- javascript - 230:45未捕获的类型错误:
- google-apps-script - 多级文件夹结构
- c++ - Qt 程序运行但弹出窗口不显示任何内容
- tensorflow - 在 Keras 的“TimeDistributed(Dense())”层中使用正则化器.l1_l2 时出错