Chicos, estoy atascado, golpeando mi cabeza en el escritorio durante las últimas horas.SOAP-ERROR: Codificación: ¿Violación de las reglas de codificación?
Estoy tratando de consumir un servicio, y tengo otras 8 funciones que llamo que son casi IDÉNTICAS en naturaleza a esta, pero esta, da como resultado un 'SOAP-ERROR: Codificación: violación de las reglas de codificación' error.
Aquí está la llamada de función (WSDL se omite por seguridad):
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 por lo que esta función, se conecta a un servicio web, los elementos necesarios son: nombre de usuario, contraseña, prod, MDN, todos los 4 de los cuales Suministro como parte de la matriz de $ params. El nombre de usuario/Pase se definieron anteriormente, y funcionan bien, ya que las otras 8 funciones consumen el servicio web sin ningún problema.
Los datos de $ [] array (que me pase a la función), contiene: $ data [ 'idproducto'] $ data [ 'MDN'] nada más se utiliza.
estoy recibiendo
SOAP-ERROR: Encoding: Violation of encoding rules
por alguna razón inexplicable, y buscar en Google este error me lleva a ninguna parte. ¿Alguien más se encuentra con esto? Ejecutando PHP 5.2.9-2. Lo extraño es que esto es idéntico a esta función, que funciona 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;
}
Aquí es el WSDL (debería haber publicado esta primera):
<?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>
Si se tratara de un cliente .NET, trataría de codificar "prod" y "mdn" para que sean conocidos, buenos valores y vea qué sucede. Si funciona, eliminaría los códigos duros de uno en uno para ver cuál es el problema. Luego miro el valor de falla para ver si hay algo especial al respecto. –
Esa fue mi primera idea también. –
Intenté hardcoding it, pero obtengo el mismo resultado, es MUY extraño. No conozco ningún otro método para solucionar este problema. – Jakub