Hi Chris! The example from the website is buggy because the WSDL urls are not correct...
$WSDL_AUTH = 'https://kasapi.kasserver.com/soap/wsdl/KasAuth.wsdl' $WSDL_API ='https://kasapi.kasserver.com/soap/wsdl/KasApi.wsdl' which I had replaced so far. then you will see the results, even if the login and pass do not match. I think for many python developers it might be really interesting to know, WHAT A PHP ARRAY is in python in a SOAP environment. Tamer Am 23.03.2013 21:55, schrieb Chris Angelico: > On Sun, Mar 24, 2013 at 6:38 AM, Tamer Higazi <th9...@googlemail.com> wrote: >> Chris! >> I did what you said before in several ways. >> >> The last way was putting the user and password directly into the dict as >> parameter ALWAYS ends up telling me, that I cannot use object of >> standard type class as ARRAY.... >> >> I did it this time with suds. So packaging issue is now out of scope, >> and always the same headache. >> >> >> now tell me what this error might tell me: >> >> >> suds.WebFault: Server raised fault: 'Cannot use object of type stdClass >> as array' > > So it's the same error this way, too. That error came back from the > server, and is being quoted verbatim. That means that, ultimately, the > problem is in the XML blob that you're sending it; the trick is to > figure out what exactly the server isn't happy with. > > (Aside: The server is at least partly at fault here. It should be > giving more useful error messages. But I'm assuming you don't have any > control over the server.) > > I tried the reference PHP implementation off the web site, and it's > coming back with 500 Internal Server Error with body of text/html, > which is clearly buggy documentation. When I change it to use the WSDL > you're using, I can actually get something plausible out of it. > > Modified PHP code: > > <?php > > // URIs zu den WSDL-Dateien > $WSDL_AUTH = 'https://kasapi.kasserver.com/soap/wsdl/KasAuth.wsdl'; > //$WSDL_API = 'https://kasserver.com/schnittstelle/soap/wsdl/KasApi.wsdl'; > > // Logindaten > $kas_user = 'w001234'; // KAS-Logon > $kas_pass = 'xxxxxxx'; // KAS-Passwort > $session_lifetime = 1800; // Gültigkeit des Tokens in Sek. bis zur > neuen Authentifizierung > $session_update_lifetime = 'Y'; // Soll bei jeder Aktion die > Sessionlifetime wieder auf den > // Wert in "$session_lifetime" > gesetzt werden? ('Y' / 'N') > try > { > $SoapLogon = new SoapClient($WSDL_AUTH,["trace"=>1]); // url zur wsdl - > Datei > $CredentialToken = $SoapLogon->KasAuth( > array('KasUser' => $kas_user, > 'KasAuthType' => 'sha1', > 'KasPassword' => sha1($kas_pass), > 'SessionLifeTime' => $session_lifetime, > 'SessionUpdateLifeTime' => > $session_update_lifetime > ) > ); > } > > // Fehler abfangen und ausgeben > catch (SoapFault $fault) > { > echo > "Request:\n".$SoapLogon->__getLastRequestHeaders()."\n".$SoapLogon->__getLastRequest()."\n"; > echo > "Response:\n".$SoapLogon->__getLastResponseHeaders()."\n".$SoapLogon->__getLastResponse()."\n"; > trigger_error("Fehlernummer: {$fault->faultcode}, > Fehlermeldung: {$fault->faultstring}, > Verursacher: {$fault->faultactor}, > Details: {$fault->detail}", E_USER_ERROR); > } > > > > (Another aside: Until I added the two echo lines, this had a try/catch > that simply triggered a fatal error. This is pointless. Just let the > error happen!) > > Here's the packet the PHP code sends: > > <?xml version="1.0" encoding="UTF-8"?> > <SOAP-ENV:Envelope > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:ns1="urn:xmethodsKasApiAuthentication" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:ns2="http://xml.apache.org/xml-soap" > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:KasAuth><Params > xsi:type="ns2:Map"><item><key > xsi:type="xsd:string">KasUser</key><value > xsi:type="xsd:string">w001234</value></item><item><key > xsi:type="xsd:string">KasAuthType</key><value > xsi:type="xsd:string">sha1</value></item><item><key > xsi:type="xsd:string">KasPassword</key><value > xsi:type="xsd:string">2db6d21d365f544f7ca3bcfb443ac96898a7a069</value></item><item><key > xsi:type="xsd:string">SessionLifeTime</key><value > xsi:type="xsd:int">1800</value></item><item><key > xsi:type="xsd:string">SessionUpdateLifeTime</key><value > xsi:type="xsd:string">Y</value></item></Params></ns1:KasAuth></SOAP-ENV:Body></SOAP-ENV:Envelope> > > Here's what your original Python version sends, lifted via tcpdump as > I'm not sufficiently familiar with soappy to get a full packet dump > out of it: > <?xml version="1.0" encoding="UTF-8"?> > <SOAP-ENV:Envelope > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/1999/XMLSchema" >> > <SOAP-ENV:Body> > <ns1:KasAuth xmlns:ns1="urn:xmethodsKasApiAuthentication" SOAP-ENC:root="1"> > <v1> > <SessionUpdateLifeTime xsi:type="xsd:string">Y</SessionUpdateLifeTime> > <KasAuthType xsi:type="xsd:string">sha1</KasAuthType> > <SessionLifeTime xsi:type="xsd:int">1800</SessionLifeTime> > <KasUser xsi:type="xsd:string">login</KasUser> > <KasPassword > xsi:type="xsd:string">5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8</KasPassword> > </v1> > </ns1:KasAuth> > </SOAP-ENV:Body> > </SOAP-ENV:Envelope> > > And here's what your latest Python sends, lifted the same way for the > same reason regarding suds: > <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope > xmlns:ns3="http://www.w3.org/2001/XMLSchema" > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:ns0="urn:xmethodsKasApiAuthentication" > xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ns4="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Header/><ns2:Body><ns0:KasAuth><Params > xsi:type="ns1:Params"><SessionUpdateLifeTime > xsi:type="ns3:string">Y</SessionUpdateLifeTime><KasAuthType > xsi:type="ns3:string">sha1</KasAuthType><SessionLifeTime > xsi:type="ns3:int">1800</SessionLifeTime><KasUser > xsi:type="ns3:string">userlogin</KasUser><KasPassword > xsi:type="ns3:string">45f106ef4d5161e7aa38cf6c666607f25748b6ca</KasPassword></Params></ns0:KasAuth></ns2:Body></SOAP-ENV:Envelope> > > > The PHP version comes back with a fault string > "kas_password_incorrect", which is what I would expect. The Python > ones both show the PHP crash you described. I'm seeing quite a few > differences between the three; figuring out what's the cause of the > crash will be a matter of fiddling until you discover it. > > I would recommend, at least for testing, bypassing the whole SOAP > library layer and putting XML data straight into HTTP requests. And > maybe you'll find that's the easiest option for production code, too; > I've done exactly that at work, talking to SOAP servers at eBay and > other sites. Building up XML isn't difficult, and it's generally > easier to have less layers to debug. > > Hope that's of at least some value to you. It looks likely the > server's largely to blame for this. > > ChrisA > -- http://mail.python.org/mailman/listinfo/python-list