sazr
sazr

Reputation: 25928

Use nlapiRequestURL to make a request to a Service

How do you use nlapiRequestURL to make a request to a service? My attempt below is failing with the error: UNEXPECTED_ERROR (output from NetSuites script execution log).

My service is set to run without login and works correctly when I directly access it through a browser using its url. Its just the request through nlapiRequestURL thats failing.

Any idea what could be going wrong?

// 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: '[email protected]'
};

// A raw request to the service works fine:
// http://mywebsite.com/services/foo.ss?type=is_email_valid&[email protected]

// Error occurs on next line
var response = nlapiRequestURL(url, payload, headers); 

Upvotes: 0

Views: 5062

Answers (2)

Rnimmo13
Rnimmo13

Reputation: 21

I would suggest changing your nlapiRequestURL to a GET instead of POST, and add the parameters to the url instead. Your function call will look like this instead.

nlapiRequestURL(url, null, headers, "GET")

Upvotes: 0

bknights
bknights

Reputation: 15367

  1. You are attempting to call a non-Netsuite url with Netsuite authentication headers. You do not need that unless for some reason of your own you have implemented NS-style authorization on your service.

  2. nlapiRequestURL does not automatically format a payload into a query string. If your service takes a posted JSON body then you need to call JSON.stringify(payload) e.g

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

  3. If your service needs a query string like in your example then you need to construct a query string and append it to your service url. e.g.

    var qs = ''; for(var k in payload) qs += k +'='+ uriEncodeComponent(payload[k]) +'&'; var response = nlapRequestURL(url +'?'+ qs.slice(0,-1), null, headers);

Upvotes: 2

Related Questions