Netsuite REST API:如何使用基于令牌的身份验证(TBA)在Python中创建新条目记录
既然你已经成功搞定了NetSuite的令牌身份验证(TBA)REST调用,接下来创建自定义记录就很顺了。下面结合你的Python环境,一步步讲清楚怎么实现:
核心逻辑说明
NetSuite REST API创建自定义记录的核心是:向对应自定义记录的专属端点发送POST请求,带上匹配字段要求的JSON请求体,同时沿用你已验证通过的TBA认证头即可。
1. 确认目标API端点
对于ID为customrecord1589的自定义记录,REST端点的格式是:
https://<你的NetSuite账户域名>/services/rest/record/v1/customrecord1589
账户域名可以从你已有的成功TBA代码里直接复用,比如类似1234567-sb1.suitetalk.api.netsuite.com这种格式。
2. 构造符合要求的请求体
请求体必须是JSON格式,字段名要严格使用NetSuite后台定义的字段内部ID(比如custrecord_my_custom_field,不是界面上的显示名称)。举个示例,如果你的自定义记录有两个必填字段:文本型的custrecord_item_name和数值型的custrecord_item_count,请求体大概是这样:
{ "custrecord_item_name": "测试新条目", "custrecord_item_count": 50 }
如果不确定字段的内部ID,可以在NetSuite后台的自定义记录类型详情页查看,或者调用GET /services/rest/record/v1/customrecord1589/metadata接口获取完整的字段元数据。
3. 基于现有TBA代码修改的Python实现
假设你已有的TBA代码已经处理了OAuth1签名、请求头等核心逻辑,只需要新增POST请求的部分。下面是整合后的可复用示例:
import requests from oauthlib.oauth1 import Client import urllib.parse # 复用你已有的TBA配置信息 NETSUITE_ACCOUNT = "你的账户ID" NETSUITE_CONSUMER_KEY = "你的消费者密钥" NETSUITE_CONSUMER_SECRET = "你的消费者密钥密码" NETSUITE_TOKEN_KEY = "你的令牌密钥" NETSUITE_TOKEN_SECRET = "你的令牌密钥密码" NETSUITE_BASE_URL = f"https://{NETSUITE_ACCOUNT}-sb1.suitetalk.api.netsuite.com" # 初始化OAuth1客户端(和你现有代码一致) client = Client( client_key=NETSUITE_CONSUMER_KEY, client_secret=NETSUITE_CONSUMER_SECRET, resource_owner_key=NETSUITE_TOKEN_KEY, resource_owner_secret=NETSUITE_TOKEN_SECRET, signature_method='HMAC-SHA256', realm=NETSUITE_ACCOUNT ) # 自定义记录的目标端点 endpoint = f"{NETSUITE_BASE_URL}/services/rest/record/v1/customrecord1589" # 根据你的自定义记录字段调整请求体 payload = { "custrecord_item_name": "新创建的测试条目", "custrecord_item_count": 100 } # 生成带签名的请求头 headers = { "Content-Type": "application/json", "Accept": "application/json" } uri, signed_headers, body = client.sign( endpoint, http_method='POST', body=urllib.parse.urlencode(payload), headers=headers ) # 发送POST请求创建记录 response = requests.post(endpoint, json=payload, headers=signed_headers) # 处理响应结果 if response.status_code == 201: created_record = response.json() print(f"记录创建成功!记录ID: {created_record['id']}") else: print(f"创建失败,状态码: {response.status_code}") print(f"错误详情: {response.text}")
4. 关键注意事项
- 必填字段检查: 一定要确保请求体包含自定义记录的所有必填字段,否则会返回400类型的错误。
- 字段类型匹配: 字段值的类型要和NetSuite后台定义的一致(比如数值型字段不能传字符串)。
- 沙盒环境测试: 建议先在NetSuite沙盒环境验证代码,确认没问题再部署到生产环境。
- 元数据辅助: 如果对字段信息存疑,先调用元数据接口获取完整字段定义,能帮你快速构造正确的请求体。
另外,你之前提到的TBA查询问题已经解决,这次聚焦创建操作的话,上面的代码可以直接适配你的现有TBA环境。
内容的提问来源于stack exchange,提问作者Axil

