使用nlapiRequestURL向服务发出请求

时间:2017-05-18 06:41:44

标签: netsuite suitescript

如何使用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); 

2 个答案:

答案 0 :(得分:2)

  1. 您正在尝试使用Netsuite身份验证标头调用非Netsuite网址。您不需要,除非出于您自己的某些原因,您已在服务上实施了NS风格的授权。

  2. nlapiRequestURL不会自动将有效负载格式化为查询字符串。如果您的服务采用已发布的JSON主体,那么您需要调用JSON.stringify(payload),例如

    var response = nlapiRequestURL(url, JSON.stringify(payload), headers);

  3. 如果您的服务需要查询字符串,则需要构建查询字符串并将其附加到您的服务网址。 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")