Ragazzi, sono bloccato, sbattendo la testa dalla scrivania per le ultime ore.SOAP-ERROR: Encoding: violazione delle regole di codifica?
Sto provando a consumare un servizio, e ho 8 altre funzioni che chiamo di natura quasi IDENTICA a questa, ma questa, risulta in un 'SOAP-ERROR: Encoding: Violazione di regole di codifica' errore.
Heres la chiamata di funzione (wsdl omesso per sicurezza):
function CanLoadProduct($data){
$client = new SoapClient('wsdl-url');
$params = array('username' => $this->username,
'password' => $this->password,
'prod' => $data['productid'],
'mdn' => $data['mdn']);
try {
$reply = $client->__soapCall("CanLoadProduct", $params);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
print_r($params);
die();
}
if($reply['result'] == 1){
return TRUE; // 1 = true
} else {
return FALSE;
}
}
Ok quindi questa funzione, si connette ad un webservice, gli elementi necessari sono: username, password, prod, mdn, tutti e 4 di cui Fornisco come parte dell'array $ params. Username/Pass sono definiti in precedenza e funzionano bene, poiché le altre 8 funzioni consumano il servizio Web senza problemi.
L'array $ dati [] (che mi passa per la funzione), contiene: dati $ [ 'IDProdotto'] dati $ [ 'MDN'] nient'altro viene utilizzato.
sto ottenendo
SOAP-ERROR: Encoding: Violation of encoding rules
per qualche motivo inspiegabile, e Googling questo errore mi porta da nessuna parte. Qualcun altro si imbatte in questo? Esecuzione di PHP 5.2.9-2. La cosa strana è questo è identica a questa funzione che funziona al 100%:
function GetPIN($productid){
$client = new SoapClient('wsdl-url');
$params = array('username' => $this->username,
'password' => $this->password,
'prod' => $productid);
try {
$reply = $client->__soapCall("GetPIN", $params);
} catch (Exception $e) {
echo 'Error: ', $e->getMessage(), "\n";
die();
}
return $reply;
}
Ecco il WSDL (dovrebbe avere postato questo primo):
<?xml version="1.0" encoding="ISO-8859-1"?>
<definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="ready:test" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="ready:test">
<types>
<xsd:schema targetNamespace="ready:test"
>
<xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<xsd:import namespace="http://schemas.xmlsoap.org/wsdl/" />
</xsd:schema>
</types>
<message name="CanLoadProductRequest">
<part name="username" type="xsd:string" />
<part name="password" type="xsd:string" />
<part name="prod" type="xsd:string" />
<part name="mdn" type="xsd:string" />
<part name="esn" type="xsd:string" /></message>
<message name="CanLoadProductResponse">
<part name="result" type="xsd:int" /></message>
<portType name="CanLoadProductPortType">
<operation name="CanLoadProduct">
<input message="tns:CanLoadProductRequest"/>
<output message="tns:CanLoadProductResponse"/>
</operation>
</portType>
<binding name="CanLoadProductBinding" type="tns:CanLoadProductPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="CanLoadProduct">
<soap:operation soapAction="{url-removed}" style="rpc"/>
<input>
<soap:body use="encoded" namespace=""
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace=""
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="CanLoadProduct">
<port name="CanLoadProductPort" binding="tns:CanLoadProductBinding">
<soap:address location="{url-removed}"/>
</port>
</service>
</definitions>
Se si trattasse di un client .NET, provare a codificare "prod" e "mdn" per conoscere valori validi e vedere cosa succede. Se funziona, rimuoverei i codici hardware uno alla volta per vedere qual è il problema. Poi guarderei il valore negativo per vedere se c'è qualcosa di speciale al riguardo. –
Questo è stato anche il mio primo pensiero. –
Ho provato a codificarlo, ma ottengo lo stesso risultato, è MOLTO strano. Non sono a conoscenza di nessun altro metodo per risolvere questo problema. – Jakub