誰もがNetSuiteのWSDLで動作するように泡石鹸ライブラリを入手することができていますか?
質問
誰もがNetSuiteのWSDLで動作するように泡石鹸ライブラリを入手することができていますか?私はクライアントを作成しようとすると、私はこのエラーを取得します。
from suds.client import Client
#url = 'http://mssoapinterop.org/asmx/simple.asmx?WSDL'
url = 'https://webservices.netsuite.com/wsdl/v2009_2_0/netsuite.wsdl'
client = Client(url)
print client
Traceback (most recent call last):
client = Client(url)
File "build\bdist.win32\egg\suds\client.py", line 112, in __init__
File "build\bdist.win32\egg\suds\reader.py", line 152, in open
File "build\bdist.win32\egg\suds\wsdl.py", line 158, in __init__
File "build\bdist.win32\egg\suds\wsdl.py", line 207, in resolve
File "build\bdist.win32\egg\suds\wsdl.py", line 662, in resolve
File "build\bdist.win32\egg\suds\wsdl.py", line 757, in resolvefaults
Exception: fault 'ExceededRecordCountFault' not defined in portType 'NetSuitePortType'
解決 4
https://webservices.netsuite.com/wsdl/v2010_2_0/netsuite.wsdl
私はそれがこの部分の間に検証に失敗していたことが判明します:
<operation name="checkAsyncStatus">
<input name="checkAsyncStatusRequest" message="tns:checkAsyncStatusRequest"/>
<output name="checkAsyncStatusResponse" message="tns:checkAsyncStatusResponse"/>
<fault name="InvalidSessionFault" message="tns:InvalidSessionFault"/>
<fault name="InvalidCredentialsFault" message="tns:InvalidCredentialsFault"/>
<fault name="ExceededRequestLimitFault" message="tns:ExceededRequestLimitFault"/> -- mismatch
<fault name="UnexpectedErrorFault" message="tns:UnexpectedErrorFault"/>
<fault name="AsyncFault" message="tns:AsyncFault"/>
</operation>
この部分ます:
<operation name="checkAsyncStatus">
<soap:operation soapAction="checkAsyncStatus"/>
<input name="checkAsyncStatusRequest">
<soap:header message="tns:headers" part="passport" use="literal"/>
<soap:header message="tns:headers" part="applicationInfo" use="literal"/>
<soap:header message="tns:headers" part="partnerInfo" use="literal"/>
<soap:header message="tns:headers" part="preferences" use="literal"/>
<soap:body use="literal"/>
</input>
<output name="checkAsyncStatusResponse">
<soap:header message="tns:headers" part="documentInfo" use="literal"/>
<soap:body use="literal"/>
</output>
<fault name="InvalidSessionFault">
<soap:fault name="InvalidSessionFault" use="literal"/>
</fault>
<fault name="InvalidCredentialsFault">
<soap:fault name="InvalidCredentialsFault" use="literal"/>
</fault>
<fault name="ExceededRequestLimitFault">
<soap:fault name="ExceededRecordCountFault" use="literal"/> -- mismatch
</fault>
<fault name="UnexpectedErrorFault">
<soap:fault name="UnexpectedErrorFault" use="literal"/>
</fault>
<fault name="AsyncFault">
<soap:fault name="AsyncFault" use="literal"/>
</fault>
</operation>
私はこれを変更します:
<fault name="ExceededRequestLimitFault">
<soap:fault name="ExceededRecordCountFault" use="literal"/>
</fault>
これを
<fault name="ExceededRequestLimitFault">
<soap:fault name="ExceededRequestLimitFault" use="literal"/>
</fault>
変更は、泡がクライアントを作成することができます。ジョンが述べたように、それはパース(2分以上)に永久に取るん。私はそれが動作するかどうかを確認するためにcheckAsyncStatusを使って試していません。
他のヒント
はい、泡がNetSuiteのに接続できますが、それはWSDLを処理するために長い時間がかかります。
ここではいくつかのサンプルコードです
# Open NetSuite Session
wsdlNetSuite = 'https://webservices.netsuite.com/wsdl/v2010_1_0/netsuite.wsdl'
client = Client(wsdlNetSuite)
# Login
passport = client.factory.create('ns4:Passport')
passport.email = 'username@web.com'
passport.password = 'ABC123'
passport.account = 123
loginResponse = client.service.login(passport)
print 'Login Response: '
print loginResponse.status
# Get a record
recordRef = client.factory.create('ns4:RecordRef')
recordRef._internalId = 127842
recordRef._type = 'invoice'
record = client.service.get(recordRef)
print record
また、PythonとSUDSのバージョンのさまざまな組み合わせを試してみる必要があるかもしれません。これは、特に信頼性の高いライブラリーではありません。
これは少し遅れているが、記録のために私は1つが操作できるかの方法を添付します PythonのZEEPを使用してネットスイートSuiteTalk SOAP APIます。
PythonとZEEPとNetSuiteのSOAPログインの例は、顧客を加えた。
# pip3 install zeep
from zeep import Client
WSDL_URL = 'https://webservices.sandbox.netsuite.com/wsdl/v2016_1_0/netsuite.wsdl'
NS_EMAIL = 'admin@example.com'
NS_PASSWORD = '*********'
NS_ROLE = '1111'
NS_ACCOUNT = '1111111'
NS_APPID = 'FFFFFFFF-FFFF-0000-0000-FFFFFFFFFFFF'
def login_client():
client = Client(WSDL_URL)
Passport = client.get_type('ns1:Passport')
AppInfo = client.get_type('ns5:ApplicationInfo')
passport = Passport(email=NS_EMAIL, password=NS_PASSWORD, account=NS_ACCOUNT)
app_info = AppInfo(applicationId=NS_APPID)
login = client.service.login(passport=passport,
_soapheaders={'applicationInfo': app_info})
print('Login Response: ', login.status)
return client
# Example usage
client = login_client()
# add a customer
Customer = client.get_type('ns14:Customer')
customer = Customer(
lastName='Joe',
firstName='Bloggs',
email='joe@example.com'
)
response = client.service.add(customer)
print(response)
も参照してください: https://github.com/fmalina/python-netsuiteする
しかし、物事を行うには、あなたが絶望的なら、あなたは自分のWSDLの異なるバージョンをしようとして続けることができない最良の方法。私は1つが働いまでしようとして保持ので、私は、同じエラーメッセージが出ました。私は、この順に行ってきました。
'https://webservices.netsuite.com/wsdl/v2010_2_0/netsuite.wsdl'
'https://webservices.netsuite.com/wsdl/v2010_1_0/netsuite.wsdl'
'https://webservices.netsuite.com/wsdl/v2009_2_0/netsuite.wsdl'
'https://webservices.netsuite.com/wsdl/v2009_1_0/netsuite.wsdl'
'https://webservices.netsuite.com/wsdl/v2009_1_0/netsuite.wsdl' 最終的には私のために働いた。
編集: tponthieuxの答えに基づいて、私は(私は単に彼の答えにコメントだろうが、私はまだ評判を持っていない:()あなたは、WSDLを修正する機能をプラグイン泡を使用することができることを今実現します:
import re
from suds.client import Client
from suds.plugin import DocumentPlugin
NetSuite_wsdl = 'https://webservices.netsuite.com/wsdl/v2010_2_0/netsuite.wsdl'
class Fix_NS_wsdl(DocumentPlugin):
bad_fault = re.compile(r"(ExceededRequestLimitFault)"
r"(\">\s*<soap:fault name=\")(ExceededRecordCountFault)")
def loaded(self, context):
if context.url == NetSuite_wsdl:
context.document = self.bad_fault.sub(r"\1\2\1", context.document)
client = Client(NetSuite_wsdl, plugins=[Fix_NS_wsdl()])
VIM置換コマンドは、私が使用していることである。
:%s/RequestLimitFault">\n\t*<soap\:fault name=\"ExceededRecordCountFault/RequestLimitFault\"\>\r\t\t\t\t<soap\:fault name=\"Exce ededRequestLimitFault/gc
のこの作品 2010 NetsuiteのWSDL とものためにそれをしなければなりませんでした 2012 NetsuiteのWSDL を(あなたは、彼らが2年後にそれを固定していると思います)