Intereting Posts

suds.TypeNotFound: Тип не найден: 'MerchantCode'

Я разрабатываю веб-сайт, используя django, и он работает с wsdl. У меня есть пример кода в работе с ним, но он написан на PHP, и я хотел преобразовать его в python для моего django. вот PHP-файл …

<?php ini_set("soap.wsdl_cache_enabled", "0"); $WSDL = "DirectConnect.test.WSDL"; $MerchantCode = "HELLO"; $MerchantReference = "" . time(); $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 = $_SERVER["REMOTE_ADDR"]; $Notes = "This is a test."; $SoapClient = new SoapClient($WSDL,array( "soap_version" => 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 "<br />TransactionID: ". $response->OnlineTransactionResult->TransactionID; print "<br />TransactionType: ". $response->OnlineTransactionResult->TransactionType; print "<br />MerchantReference: ". $response->OnlineTransactionResult->MerchantReference; print "<br />ResponseCode: ". $response->OnlineTransactionResult->ResponseCode; print "<br />ResponseShortDescription: ". $response->OnlineTransactionResult->ResponseShortDescription; print "<br />ResponseDescription: ". $response->OnlineTransactionResult->ResponseDescription; print "<br />TimeStamp: ". $response->OnlineTransactionResult->TimeStamp; print "<br />CardID: ". $response->OnlineTransactionResult->CardData->CardID; print "<br />CardSuffix: ". $response->OnlineTransactionResult->CardData->CardSuffix; print "<br />ExpiryYear: ". $response->OnlineTransactionResult->CardData->ExpiryYear; print "<br />ExpiryMonth: ". $response->OnlineTransactionResult->CardData->ExpiryMonth; print "<br />BINCountryCode: ". $response->OnlineTransactionResult->BINCountryCode; print "<br />IPCountryCode: ". $response->OnlineTransactionResult->IPCountryCode; print "<br />WarningArray: ". $response->OnlineTransactionResult->WarningArray; } catch (SoapFault $exception) { print $exception; } print "<br /><br />Request:<br />". htmlspecialchars($SoapClient->__getLastRequest()); print "<br /><br />Response:<br />". htmlspecialchars($SoapClient->__getLastResponse()); ?> 

и это то, что я сделал, чтобы преобразовать его в 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) 

но когда я запустил его, я получил эту ошибку …

 Traceback (most recent call last): File "yes_test.py", line 24, in <module> 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' 

я думаю, что ошибка в этой строке моего питона,

 response = client.service.OnlineTransaction(values) 

может ли кто-нибудь дать мне представление о моей ситуации?

заранее спасибо …

Вы уверены, что ваш DirectConnect.test.WSDL верен? Кажется, это не так. Пожалуйста, разместите его здесь.

Добавлено:

Я заработал. Посмотрите на результат. Вот рабочий код (chmod + x main.py для его запуска).

 (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()