如何使用nlapiRequestURL
向服务发出请求?我在下面的尝试失败并出现错误:UNEXPECTED_ERROR
(从NetSuites脚本执行日志输出)。
我的服务设置为在没有登录的情况下运行,并且当我通过浏览器使用其URL直接访问它时,它可以正常工作。只是通过nlapiRequestURL
失败的请求。
知道可能出现什么问题吗?
// This code executes in Account.Model.js (register function)
// I am using my own netsuite user credential here
var cred = {
email: "MY_NETSUITE_EMAIL"
, account: "EXXXXX" // My account id
, role: "3" // Administrator
, password: "MY_NETSUITE_PASSWORD"
};
var headers = {"User-Agent-x": "SuiteScript-Call",
"Authorization": "NLAuth nlauth_account=" + cred.account + ", nlauth_email=" + cred.email +
", nlauth_signature= " + cred.password + ", nlauth_role=" + cred.role,
"Content-Type": "application/json"};
var payload = {
type: 'is_email_valid'
, email: 'spt015@foo.com'
};
// A raw request to the service works fine:
// http://mywebsite.com/services/foo.ss?type=is_email_valid&email=spt015@foo.com
// Error occurs on next line
var response = nlapiRequestURL(url, payload, headers);
答案 0 :(得分:2)
您正在尝试使用Netsuite身份验证标头调用非Netsuite网址。您不需要,除非出于您自己的某些原因,您已在服务上实施了NS风格的授权。
nlapiRequestURL不会自动将有效负载格式化为查询字符串。如果您的服务采用已发布的JSON主体,那么您需要调用JSON.stringify(payload),例如
var response = nlapiRequestURL(url, JSON.stringify(payload), headers);
如果您的服务需要查询字符串,则需要构建查询字符串并将其附加到您的服务网址。 e.g。
var qs = '';
for(var k in payload) qs += k +'='+ uriEncodeComponent(payload[k]) +'&';
var response = nlapRequestURL(url +'?'+ qs.slice(0,-1), null, headers);
答案 1 :(得分:0)
我建议您将nlapiRequestURL更改为GET而不是POST,并将参数添加到网址中。你的函数调用将会是这样的。
nlapiRequestURL(url, null, headers, "GET")