2011-07-10 4 views
3

私はこのAPIにアクセスしようとしていますhttps://www.kashoo.com/api-docs PythonでSUDSを使用しています。私が使用PythonとSUDSを使用してKashoo APIにアクセスする。認証トークンでの時間形式の問題

ザ・Pythonコードは以下の通りです:

>>> from suds.client import Client 
>>> client = Client('https://www.kashoo.com/api/v1?wsdl') 
>>> token = client.service.doLogin('username', 'password', 'www.kashoo.com', 'en_US', 3000000) 

authTokenのは問題なく作成されます。

>>> print token 
(authToken){ 
_authenticationCode = "crxQRveuVaDb6swKCJaQKKPiYaY=" 
_expiryDate = 2011-07-10 12:49:28.000702 
_locale = "en_US" 
_myUserId = 531772668 
_site = "www.kashoo.com" 

私はトークンをエンコードし、エンコードされた認証文字列を作るしようとすると、問題があると

>>>encodedtoken = client.service.encodeAuthToken(token) 
Traceback (most recent call last): 
File "<console>", line 0, in <module> 
File "C:\Python27\lib\suds\client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
File "C:\Python27\lib\suds\client.py", line 602, in invoke 
    result = self.send(soapenv) 
File "C:\Python27\lib\suds\client.py", line 649, in send 
    result = self.failed(binding, e) 
File "C:\Python27\lib\suds\client.py", line 702, in failed 
    r, p = binding.get_fault(reply) 
File "C:\Python27\lib\suds\bindings\binding.py", line 265, in get_fault 
    raise WebFault(p, faultroot) 
WebFault: Server raised fault: 'Token authentication code is incorrect' 

問題はトークンの時間形式のようです。私はsoapUIのようなツールを使用してKashoo APIでそのトークンを渡すと、それは問題なく動作しますが、

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body>     
<ns2:doLoginResponse xmlns:ns2="https://www.kashoo.com/api/"> 
     <token authenticationCode="0WM1DgdaAFrJ7Yz4Up2UWnbVsZk=" expiryDate="2011-07-11T03:33:24.046-07:00" locale="en_US" myUserId="531772668" site="www.kashoo.com"/> 
</ns2:doLoginResponse> 
</soap:Body> 
</soap:Envelope> 

:doLogin関数の呼び出しから受け取った封筒は次のとおりです。しかし、私はSUDSを使ってPythonからencodeAuthToken関数を呼び出すときに、次のSOAPエンベロープが生成されます。受信したトークンで

<token authenticationCode="0WM1DgdaAFrJ7Yz4Up2UWnbVsZk=" expiryDate="2011-07-11T03:33:24.046-07:00" locale="en_US" myUserId="531772668" site="www.kashoo.com"/> 
<token authenticationCode="0WM1DgdaAFrJ7Yz4Up2UWnbVsZk=" expiryDate="2011-07-11T11:33:24.000046+01:00" locale="en_US" myUserId="531772668" site="www.kashoo.com"/> 

、:expiryDate属性のTIMEFORMATがどのように変化するかを

<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://www.kashoo.com/api/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <ns0:Body> 
     <ns1:encodeAuthToken> 
     <token authenticationCode="0WM1DgdaAFrJ7Yz4Up2UWnbVsZk=" expiryDate="2011-07-11T11:33:24.000046+01:00" locale="en_US" myUserId="531772668" site="www.kashoo.com"/> 
     </ns1:encodeAuthToken> 
    </ns0:Body> 
</SOAP-ENV:Envelope> 

をお知らせ時間はミリ秒で指定され、トークンは渡され、時間はマイクロ秒単位で指定されます。

問題が解決しました。 SUDSライブラリで

は、私はトークンを取得する場合、今、時間属性が正しくあり

  return dt.time(hour, minute, second, 1000 * ms) 

  return dt.time(hour, minute, second, ms) 

を交換するためにライン218上のsuds.sax.dateモジュールを修正しました解釈して渡す

>>> print token1 
    (authToken){ 
     _locale = "en_US" 
     _authenticationCode = "JQyior8Qprg3+3wuZo8B5JnN3c8=" 
     _myUserId = 531772668 
     _site = "www.kashoo.com" 
     _expiryDate = 2011-07-11 18:36:38.136000 
     } 
>>> token2 = client.service.encodeAuthToken(token1) 
>>> print token2 
    6454e3af-b09d-4484-90b3-ea2632ab9fe4 

私はプログラミングでは新しく、ソリューションはエレガントではありませんが、しかし、それは動作するようです。

ご意見やご指導をいただいた@dobesvに感謝します。

答えて

0

HTTP要求と応答として「通信中」のログを生成できる場合は、問題の診断に役立ちます。あなたは確かに正しいことをしているようです。

他のコールは機能しますか? service.getMyBusinesses(token)はどうですか?

SOAPの代わりにREST APIを使用することも考えられます。

+0

ありがとうございます。 Pythonで生成されたトークンでSUDSを使用している他の呼び出しは、どちらも機能しません。私はログを生成し、soapUI4.0.0のログファイルで生成されたトークンを使用して呼び出しました。さらに調査したところ、トークンの時刻形式が変更されているようだ。 <トークン.... expiryDate = "2011-07-11T08:10:08.387-07:00" ... /> <トークン.... expiryDate = "2011-07-11T16:10:08.000387 + 01:00" .../> 最初のトークン(受信したトークン)は機能しません。 2番目のトークン(それ以降の呼び出しで渡されるトークン)は機能しません。これらの3つのゼロがどこから来たのかは謎です。どんなアイデア/助け? –

+0

私は詳細な情報でメインポストを編集しました –

+0

問題解決済み! –

関連する問題