SoapClient de un WSDL con complexType

74 views
Skip to first unread message

Stuardo -StR- Rodríguez

unread,
Oct 13, 2015, 8:31:51 AM10/13/15
to ph...@googlegroups.com
Hola a todos. Estoy tratando de crear un SoapClient de un webservice que tiene una estructura algo confusa. No estoy usando ni quiero usar NuSoap. Estoy usando el SoapClient nativo, pero algo estoy haciendo mal a la hora de construir los parámetros que tengo que enviar.

Este es mi código:

            $params = new stdClass();
            $params->parameters = new stdClass();
            $params->parameters->operatorPerformanceRequest = new stdClass();
            $params->parameters->operatorPerformanceRequest->operatorIdentifier = $employee[0];
            $params->parameters->operatorPerformanceRequest->dailyGolaMinutes   = (float) $employee[1];
            $params->parameters->operatorPerformanceRequest->dailyActualMinutes = (float) $employee[2];
            $params->parameters->operatorPerformanceRequest->orderGoalMinutes   = (float) $employee[4];
            $params->parameters->operatorPerformanceRequest->orderActualMinutes = (float) $employee[5];
            $params->parameters->operatorPerformanceRequest->webServiceRequest = new stdClass();
            $params->parameters->operatorPerformanceRequest->webServiceRequest->site = 'default';
            try {
                $webservice = new SoapClient(self::WSDL, array('trace' => true, 'exceptions' =>  true));
                $x = $webservice->modifyOperatorPerformance($params);
            } catch (\Exception $e) {
                var_dump($e->getMessage(), "\n");
                var_dump($webservice->__getLastRequest(), "\n");
                var_dump($webservice->__getLastRequestHeaders(), "\n");
                die();
            }


Los WSDL están definidos en 2 archivos (es una estupidez, pero así es como está). ¿Alguien  tiene experiencia que me pueda donar para desifrar comó crear el parámetro para enviar al webservice?

WSDL #1
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="OperatorPerformanceWebService" targetNamespace="http://service.web.voicelink.vocollect.com/" xmlns:ns1="http://service.web.voicelink.vocollect.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:types>
    <xs:schema elementFormDefault="unqualified" targetNamespace="http://service.web.voicelink.vocollect.com/" version="1.0" xmlns:tns="http://service.web.voicelink.vocollect.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="modifyOperatorPerformance" type="tns:modifyOperatorPerformance"/>
      <xs:element name="modifyOperatorPerformanceResponse" type="tns:modifyOperatorPerformanceResponse"/>
      <xs:element name="operatorPerformanceRequest" type="tns:operatorPerformanceRequest"/>
      <xs:element name="operatorPerformanceResponse" type="tns:operatorPerformanceResponse"/>
      <xs:element name="webServiceRequest" type="tns:webServiceRequest"/>
      <xs:element name="webServiceResponse" type="tns:webServiceResponse"/>
      <xs:complexType name="modifyOperatorPerformance">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="operatorPerformanceRequest" type="tns:operatorPerformanceRequest"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="operatorPerformanceRequest">
        <xs:complexContent>
          <xs:extension base="tns:webServiceRequest">
            <xs:sequence>
              <xs:element name="operatorIdentifier" type="xs:string"/>
              <xs:element minOccurs="0" name="dailyGoalMinutes" type="xs:double"/>
              <xs:element minOccurs="0" name="dailyActualMinutes" type="xs:double"/>
              <xs:element minOccurs="0" name="orderGoalMinutes" type="xs:double"/>
              <xs:element minOccurs="0" name="orderActualMinutes" type="xs:double"/>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="webServiceRequest">
        <xs:sequence>
          <xs:element name="site" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="modifyOperatorPerformanceResponse">
        <xs:sequence>
          <xs:element maxOccurs="unbounded" minOccurs="0" name="operatorPerformanceResponse" type="tns:operatorPerformanceResponse"/>
        </xs:sequence>
      </xs:complexType>
      <xs:complexType name="operatorPerformanceResponse">
        <xs:complexContent>
          <xs:extension base="tns:webServiceResponse">
            <xs:sequence>
              <xs:element name="operatorIdentifier" type="xs:string"/>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="webServiceResponse">
        <xs:sequence>
          <xs:element name="site" type="xs:string"/>
          <xs:element name="errorCode" type="xs:long"/>
          <xs:element name="errorMsg" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
  </wsdl:types>
  <wsdl:message name="modifyOperatorPerformanceResponse">
    <wsdl:part element="ns1:modifyOperatorPerformanceResponse" name="parameters"/>
  </wsdl:message>
  <wsdl:message name="modifyOperatorPerformance">
    <wsdl:part element="ns1:modifyOperatorPerformance" name="parameters"/>
  </wsdl:message>
  <wsdl:portType name="OperatorPerformanceWebService">
    <wsdl:operation name="modifyOperatorPerformance">
      <wsdl:input message="ns1:modifyOperatorPerformance" name="modifyOperatorPerformance"/>
      <wsdl:output message="ns1:modifyOperatorPerformanceResponse" name="modifyOperatorPerformanceResponse"/>
    </wsdl:operation>
  </wsdl:portType>
</wsdl:definitions>

WSDL #2

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="OperatorPerformanceWebServiceImplService" targetNamespace="http://impl.service.web.voicelink.vocollect.com/" xmlns:ns1="http://service.web.voicelink.vocollect.com/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.service.web.voicelink.vocollect.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:import location="OperatorPerformanceService.wsdl" namespace="http://service.web.voicelink.vocollect.com/"/>
  <wsdl:binding name="OperatorPerformanceWebServiceImplServiceSoapBinding" type="ns1:OperatorPerformanceWebService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="modifyOperatorPerformance">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="modifyOperatorPerformance">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="modifyOperatorPerformanceResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="OperatorPerformanceWebServiceImplService">
    <wsdl:port binding="tns:OperatorPerformanceWebServiceImplServiceSoapBinding" name="OperatorPerformanceWebServiceImplPort">
      <soap:address location="http://127.0.0.1:8080/VoiceLink/services/OperatorPerformanceService"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
asd

--
Stuardo -StR- Rodríguez| Mercenary Web Developer| La Maphpia
http://maphpia.com| email:  s...@maphpia.com| g-hangouts: s...@maphpia.com
office: +502 2221-9830| mobile: +502 4210-8819| skype: stuardo_str

Stuardo -StR- Rodriguez

unread,
Oct 13, 2015, 9:22:33 AM10/13/15
to PHPGT Grupo de PHPeros de Guatemala
El contenido del request va vacío, no agrega los params que le envío. El contenido que vardumpéo, se ve así:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://service.web.voicelink.vocollect.com/">
    <SOAP-ENV:Body>
        <ns1:modifyOperatorPerformance/>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>











Douglas

unread,
Oct 13, 2015, 3:29:24 PM10/13/15
to ph...@googlegroups.com
El codigo tendria, si no recuerdo mal deberia de verse algo como 

            $params = new stdClass();
            $params->parameters = new stdClass();
            $params->operatorIdentifier = $employee[0];
            $params->dailyGolaMinutes   = (float) $employee[1];
            $params->dailyActualMinutes = (float) $employee[2];
            $params->orderGoalMinutes   = (float) $employee[4];
            $params->orderActualMinutes = (float) $employee[5];

            try {
                $webservice = new SoapClient(self::WSDL, array('trace' => true, 'exceptions' =>  true));
                $x = $webservice->modifyOperatorPerformance(new SoapVar($params, SOAP_ENC_OBJECT));
            } catch (\Exception $e) {
                var_dump($e->getMessage(), "\n");
                var_dump($webservice->__getLastRequest(), "\n");
                var_dump($webservice->__getLastRequestHeaders(), "\n");
                die();
            }


--
Enviado desde mi Gmail

--
--
PHPGT :: Grupo de PHPeros de Guatemala
email: ph...@googlegroups.com
reglas de uso: https://sites.google.com/site/grupophpgt

---
Has recibido este mensaje porque estás suscrito al grupo "PHPGT Grupo de PHPeros de Guatemala" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a phpgt+un...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages