用Python访问NetSuite数据

4 投票
3 回答
8432 浏览
提问于 2025-04-18 11:03

我想用Python从NetSuite获取数据,同时也想在NetSuite中添加或更新数据。比如,我想通过Python创建销售订单并添加订单项。

我知道他们有一个WSDL文件可以用来实现这个功能。(我本来希望他们也有一个API,但似乎没有……)有没有人能分享一些在Python中使用这个WSDL的例子?有没有更好的方法可以和NetSuite进行整合?

3 个回答

1

有很多Python库可以用来处理SOAP消息。我尝试过使用SUDS,因为它是唯一一个能正确处理2014.1版本的Netsuite WSDL的库。不过,这个过程需要做一些调整。Netsuite的WSDL文件很大也很复杂,加载起来花了很多时间,即使是使用缓存和从本地加载。SUDS库已经有一段时间没有维护了,不过有一个维护中的分支叫做SUDS-jurko,我还没试过。最后,我选择直接使用原始的SOAP消息来与Netsuite的网络服务进行特定任务的沟通。

1

Netsuite为Java、.Net和PHP提供了工具包,可以用来访问他们的网络服务。对于其他编程语言,要么有第三方的工具包,要么就得自己发送原始的SOAP请求。

在我的Python项目中,我使用的是原始SOAP请求的方法。我建议你先用现有的工具包熟悉一下Netsuite的网络服务,然后再用这些知识来生成Python中的原始SOAP请求。SOAPUI这个工具也会很有帮助。

你有没有试过restlets?它们通常是网络服务的一个不错的替代方案。

3

我已经和Netsuite的网络服务打交道大约一周了,虽然文档不是很清楚,但一旦你了解了其他常见网络服务的工作方式,就会发现适应起来非常简单。我附上了一个小脚本,用于登录并获取Netsuite中所有服务和数据类型的完整列表。

使用工厂方法来创建与Netsuite网络服务交互的对象。

我使用了suds这个Python库来处理SOAP协议。

# -*- coding: utf-8 -*-        
from suds.client import Client
import os, time, sys, datetime
import suds
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)

reload(sys)  
sys.setdefaultencoding('utf8')

NS_HOST = 'https://webservices.netsuite.com'
email ='myemail@xxxxxx.com'
pwd   ='mypwd'
account = "99999999"
NS_ENDPOINT = "2016_2"
NS_ROLE = 3

wsdl = NS_HOST + "/wsdl/v" + NS_ENDPOINT + "_0/netsuite.wsdl"

client = Client(url=wsdl)
#You can get the methods and types with this object
print client
ApplicationInfo = client.factory.create('ns16:ApplicationInfo')
ApplicationInfo.applicationId = "xxxxx-XXXX-XXXX-XXXX-XXXXXXXX"

client.set_options(location= NS_HOST + "/services/NetSuitePort_" + NS_ENDPOINT, soapheaders={'applicationInfo':ApplicationInfo})

passport = client.factory.create('ns4:Passport')
passport.email = email
passport.password = pwd
passport.account = account
recordRef = client.factory.create('ns4:RecordRef')
recordRef.name="MX - Gerencia de Contabilidad"
passport.role = recordRef

client.service.login(passport)

撰写回答