You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Salesforce或其他应用调用NetSuite RESTlet并传递数据?

NetSuite RESTlet 集成调用指南

一、通用认证要求

无论从Salesforce还是其他应用调用NetSuite RESTlet,必须先完成认证,NetSuite支持两种主流方式:

  • OAuth 1.0a:需提前获取Consumer Key、Consumer Secret、Token ID、Token Secret,请求时生成签名。
  • Token-Based Authentication (TBA):使用NetSuite生成的Access Token和Token Secret,在请求头中携带:Authorization: NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<EMAIL>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>。

二、Salesforce 集成调用示例

1. Apex 代码调用(推荐)

通过Apex编写HTTP请求对接RESTlet,以下是对应你脚本各方法的示例:

GET 请求(查询客户)

你的RESTlet GET方法通过requestParams.id获取客户ID,需将ID作为URL查询参数传递:

public class NetSuiteRESTletCallout {
    public static void getCustomer() {
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        // 替换为你的RESTlet实际URL
        request.setEndpoint('https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>&id=123');
        request.setMethod('GET');
        
        // 替换为TBA认证头(或OAuth1.0a签名)
        request.setHeader('Authorization', 'NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>');
        request.setHeader('Content-Type', 'application/json');
        
        HttpResponse response = http.send(request);
        if (response.getStatusCode() == 200) {
            System.debug('客户数据:' + response.getBody());
        } else {
            System.debug('请求失败:' + response.getStatusCode() + ' - ' + response.getBody());
        }
    }
}

POST 请求(创建客户)

你的RESTlet POST方法从requestBody获取recordType、companyname、subsidiary,需构造JSON格式请求体:

public static void createCustomer() {
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>');
    request.setMethod('POST');
    request.setHeader('Authorization', 'NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>');
    request.setHeader('Content-Type', 'application/json');
    
    // 构造请求体,匹配RESTlet所需字段
    String requestBody = '{ "recordType": "customer", "companyname": "Salesforce测试客户", "subsidiary": 1 }';
    request.setBody(requestBody);
    
    HttpResponse response = http.send(request);
    System.debug('创建结果:' + response.getBody());
}

PUT 请求(更新客户)

你的RESTlet PUT方法从requestBody.customerid获取目标客户ID,请求体需包含该字段:

public static void updateCustomer() {
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>');
    request.setMethod('PUT');
    request.setHeader('Authorization', 'NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>');
    request.setHeader('Content-Type', 'application/json');
    
    String requestBody = '{ "customerid": 123 }';
    request.setBody(requestBody);
    
    HttpResponse response = http.send(request);
    System.debug('更新结果:' + response.getBody());
}

DELETE 请求(删除客户)

你的RESTlet DELETE方法从requestParams.customerId获取客户ID,需将其作为URL查询参数传递:

public static void deleteCustomer() {
    Http http = new Http();
    HttpRequest request = new HttpRequest();
    request.setEndpoint('https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>&customerId=123');
    request.setMethod('DELETE');
    request.setHeader('Authorization', 'NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>');
    
    HttpResponse response = http.send(request);
    if (response.getStatusCode() == 204) {
        System.debug('删除成功');
    } else {
        System.debug('删除失败:' + response.getStatusCode());
    }
}

2. Salesforce Flow 调用

无需复杂代码时,可使用Flow的HTTP Callout元素:

  • 配置请求URL、方法、认证头(TBA方式直接填写Authorization头内容)
  • GET/DELETE方法在URL后拼接查询参数
  • POST/PUT方法在请求体中构造JSON字符串,映射Flow内的变量

三、其他应用集成通用示例

以Python为例,展示各方法的调用方式:

GET 请求

import requests

url = "https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl"
params = {
    "script": "<脚本ID>",
    "deploy": "<部署ID>",
    "id": "123"
}
headers = {
    "Authorization": "NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>",
    "Content-Type": "application/json"
}

response = requests.get(url, params=params, headers=headers)
print(response.json())

POST 请求

import requests

url = "https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>"
headers = {
    "Authorization": "NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>",
    "Content-Type": "application/json"
}
payload = {
    "recordType": "customer",
    "companyname": "Python测试客户",
    "subsidiary": 1
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

PUT 请求

import requests

url = "https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=<脚本ID>&deploy=<部署ID>"
headers = {
    "Authorization": "NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>",
    "Content-Type": "application/json"
}
payload = {
    "customerid": 123
}

response = requests.put(url, json=payload, headers=headers)
print(response.json())

DELETE 请求

import requests

url = "https://<你的NetSuite账户ID>.restlets.api.netsuite.com/app/site/hosting/restlet.nl"
params = {
    "script": "<脚本ID>",
    "deploy": "<部署ID>",
    "customerId": "123"
}
headers = {
    "Authorization": "NLAuth nlauth_account=<ACCOUNT_ID>,nlauth_email=<你的NetSuite邮箱>,nlauth_signature=<TOKEN_SECRET>,nlauth_token=<ACCESS_TOKEN>"
}

response = requests.delete(url, params=params, headers=headers)
print("删除状态码:", response.status_code)

四、参数传递规则(匹配你的RESTlet脚本)

根据你提供的代码,参数传递需遵循:

  • GET/DELETE方法:参数通过URL查询参数传递,对应脚本中的requestParams对象。比如GET的id、DELETE的customerId,直接拼在URL后?key=value。
  • POST/PUT方法:参数通过JSON格式请求体传递,对应脚本中的requestBody对象。必须设置请求头Content-Type: application/json,否则NetSuite无法解析请求体。

注意:你的PUT方法中硬编码了邮箱地址monika.phalle@theblueflamelabs.com,若需动态更新,建议修改脚本从requestBody.email取值,调用时即可传递不同邮箱。

内容的提问来源于stack exchange,提问作者Maira S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:22:09