suds.TypeNotFound: tipo no encontrado: ‘MerchantCode’

Estoy desarrollando una web usando django y se trata de wsdl. Tengo un código de ejemplo para manejarlo, pero está escrito en PHP y quería convertirlo a python para mi django. Aquí está el archivo PHP …

 SOAP_1_2, "features" => SOAP_SINGLE_ELEMENT_ARRAYS, "cache_wsdl" => WSDL_CACHE_NONE, "trace" => 1, "exceptions" => 0)); try { $response = $SoapClient->OnlineTransaction(array( "MerchantCode" => $MerchantCode, "MerchantReference" => $MerchantReference, "TransactionType" => $TransactionType, "Amount" => $Amount, "CurrencyCode" => $CurrencyCode, "CardHolderName" => $CardHolderName, "CardNumber" => $CardNumber, "ExpiryMonth" => $ExpiryMonth, "ExpiryYear" => $ExpiryYear, "CardID" => $CardID, "CardSecurityCode" => $CardSecurityCode, "CustomerAccountNumber" => $CustomerAccountNumber, "BillNumber" => $BillNumber, "CardHolderEmail" => $CardHolderEmail, "ClientIPAddress" => $ClientIPAddress, "Notes" => $Notes )); print "
TransactionID: ". $response->OnlineTransactionResult->TransactionID; print "
TransactionType: ". $response->OnlineTransactionResult->TransactionType; print "
MerchantReference: ". $response->OnlineTransactionResult->MerchantReference; print "
ResponseCode: ". $response->OnlineTransactionResult->ResponseCode; print "
ResponseShortDescription: ". $response->OnlineTransactionResult->ResponseShortDescription; print "
ResponseDescription: ". $response->OnlineTransactionResult->ResponseDescription; print "
TimeStamp: ". $response->OnlineTransactionResult->TimeStamp; print "
CardID: ". $response->OnlineTransactionResult->CardData->CardID; print "
CardSuffix: ". $response->OnlineTransactionResult->CardData->CardSuffix; print "
ExpiryYear: ". $response->OnlineTransactionResult->CardData->ExpiryYear; print "
ExpiryMonth: ". $response->OnlineTransactionResult->CardData->ExpiryMonth; print "
BINCountryCode: ". $response->OnlineTransactionResult->BINCountryCode; print "
IPCountryCode: ". $response->OnlineTransactionResult->IPCountryCode; print "
WarningArray: ". $response->OnlineTransactionResult->WarningArray; } catch (SoapFault $exception) { print $exception; } print "

Request:
". htmlspecialchars($SoapClient->__getLastRequest()); print "

Response:
". htmlspecialchars($SoapClient->__getLastResponse()); ?>

y esto es lo que he hecho para convertirlo a Python

 from suds.client import Client import collections url = 'file:///home/myFile/DirectConnect.test.WSDL' client = Client(url) values = collections.OrderedDict([ ("MerchantCode", "HELLO"), ("MerchantReference", ""), ("TransactionType",20), ("Amount",100), ("CurrencyCode","PHP"), ("CardHolderName","RAUL O REVECHE"), ("CardNumber", "4005550000000001"), ("ExpiryMonth",5), ("ExpiryYear",2013), ("CardID",0), ("CardSecurityCode","400"), ("CustomerAccountNumber",""), ("BillNumber",0), ("CardHolderEmail","development@yespayments.com.ph"), ("ClientIPAddress","http://127.0.0.1:8000/"), ("Notes","This is test"), ]) response = client.service.OnlineTransaction(values) 

Pero cuando lo ejecuto, recibí este error …

 Traceback (most recent call last): File "yes_test.py", line 24, in  response = client.service.OnlineTransaction(values) File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 542, in __call__ return client.invoke(args, kwargs) File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 595, in invoke soapenv = binding.get_message(self.method, args, kwargs) File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py", line 120, in get_message content = self.bodycontent(method, args, kwargs) File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py", line 63, in bodycontent p = self.mkparam(method, pd, value) File "/usr/local/lib/python2.7/dist-packages/suds/bindings/document.py", line 105, in mkparam return Binding.mkparam(self, method, pdef, object) File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py", line 287, in mkparam return marshaller.process(content) File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py", line 62, in process self.append(document, content) File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py", line 75, in append self.appender.append(parent, content) File "/usr/local/lib/python2.7/dist-packages/suds/mx/appender.py", line 102, in append appender.append(parent, content) File "/usr/local/lib/python2.7/dist-packages/suds/mx/appender.py", line 243, in append Appender.append(self, child, cont) File "/usr/local/lib/python2.7/dist-packages/suds/mx/appender.py", line 182, in append self.marshaller.append(parent, content) File "/usr/local/lib/python2.7/dist-packages/suds/mx/core.py", line 74, in append if self.start(content): File "/usr/local/lib/python2.7/dist-packages/suds/mx/literal.py", line 87, in start raise TypeNotFound(content.tag) suds.TypeNotFound: Type not found: 'MerchantCode' 

Creo que el error está en esta línea de mi python,

 response = client.service.OnlineTransaction(values) 

¿Alguien puede darme una idea de mi situación?

gracias por adelantado …

¿Está seguro de que su DirectConnect.test.WSDL es correcto? Parece que no lo es. Por favor publícalo aquí.

Adicional:

Lo tengo funcionando. Por favor, eche un vistazo al resultado. Aquí está el código de trabajo (chmod + x main.py para ejecutarlo).

 (sudstest)mike-imac:sudstest mike$ ./main.py (OnlineResponse){ TransactionID = 0 TransactionType = 20 MerchantReference = None ResponseCode = "ERMERC" ResponseShortDescription = "YESDEC" ResponseDescription = "Invalid Merchant Code" TimeStamp = "2012/01/24 17:21:37" CardData = (YESCardData){ CardID = 0 ExpiryYear = 0 ExpiryMonth = 0 } } 

main.py

 #!/usr/bin/env python import os from suds.client import Client WSDL = 'DirectConnect.test.WSDL' def test_api(): url = 'file://' + os.path.join(os.path.abspath(os.path.dirname(__file__)), WSDL) client = Client(url) data = { 'MerchantCode': 'HELLO', 'MerchantReference': '', 'TransactionType': 20, 'Amount': 100, 'CurrencyCode': 'USD', 'CardHolderName': 'RAUL O REVECHE', 'CardNumber': 4005550000000001, 'ExpiryMonth': 5, 'ExpiryYear': 2013, 'CardID': 0, 'CardSecurityCode': 400, 'CustomerAccountNumber': '', 'BillNumber': 0, 'CardHolderEmail': 'development@yespayments.com.ph', 'ClientIPAddress': 'http://127.0.0.1:8000/', 'Notes': 'This is test', } result = client.service.OnlineTransaction(**data) print result if __name__ == '__main__': test_api()