2017-05-18 181 views
0

如何使用nlapiRequestURL向服務發出請求?我的下面的嘗試失敗,錯誤:UNEXPECTED_ERROR(從NetSuites腳本執行日誌輸出)。使用nlapiRequestURL向服務發出請求

我的服務被設置爲不登錄時運行和正常工作時,我直接通過使用其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: '[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); 
+0

爲什麼您將Netsuite授權標頭傳遞給您的外部服務? – michoel

+0

正在調用RESTlet嗎? – pipechang

+0

我沒有看到你的代碼中你指定了什麼網址 - 就像在'var url ='...我想你只是沒有顯示該部分,但值得檢查我猜 – Krypton

回答

2
  1. 您正試圖打電話與NetSuite的認證頭非NetSuite的網址。除非由於某種原因,您不需要這樣做,否則您的服務已經實施了NS風格的授權。

  2. nlapiRequestURL不會自動格式化的有效載荷送入一個查詢字符串。如果你的服務需要發佈JSON的身體,那麼你需要調用JSON.stringify(有效載荷),如

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

  3. 如果您的服務需要像在您的示例查詢字符串,那麼你需要構建一個查詢字符串和將其附加到您的服務網址。例如

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

0

我建議改變你的nlapiRequestURL到GET而不是POST,並且參數添加到URL來代替。您的函數調用將看起來像這樣。

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