Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: egyware en 15 Enero 2011, 18:50 pm



Título: Webservice, problema el retornar un dato con un SoapServer(PHP)
Publicado por: egyware en 15 Enero 2011, 18:50 pm
Hola a todos, soy nuevo por aca.
Tengo una problema que  no he podido resolver aún (he estado varios dias dandole vuelta por todas partes)

Estoy creando un WebService sin nusoap(y no pienso usarlo), usando directamente las clases que ofrece PHP. El problema esta cuando llamo una función usando un cliente de mi servicio (uso el WcfTestClient) este me lo rechaza diciendo que no puede deserializar la salida.

Este es el dato que quiero retornar.
Código
  1. <xsd:complexType name="Target">
  2.   <xsd:all>
  3.      <xsd:element name="id" type="xsd:int"/>
  4.      <xsd:element name="name" type="xsd:string"/>
  5.      <xsd:element name="contador" type="xsd:int"/>
  6.      <xsd:element name="max_contador" type="xsd:int"/>
  7.    </xsd:all>
  8. </xsd:complexType>
  9.  

Esta es la clase que deberia ser la clase del dato que envio
Código
  1. class Target{
  2. var $id;
  3. var $name;
  4. var $contador;
  5. var $max_contador;
  6.    function Target($id, $name, $contador, $max_contador)
  7.    {
  8.        $this->id= $id;
  9.        $this->name = $name;
  10.        $this->contador = $contador;
  11.        $this->max_contador = $max_contador;
  12.    }
  13. }

La función previamente registrada por el server y describida por el WSDL
Código
  1. function achievements($session){
  2.   //aqui retorno un dato cualquiera, pero sin embargo me lo rechaza el cliente.
  3.   $struct = new Target(1, "LOL",1,10);
  4.   return $struct;
  5. }
  6.  

El servidor Soap en PHP.
Código
  1. $classmap = array('Target'=>'Target');
  2.           $param =  array(
  3. 'encoding'=>'UTF-8',
  4. 'soap_version' => SOAP_1_2,
  5. "classmap"=>$classmap
  6. );
  7.  
  8. $server = new SoapServer("gameCommunity.wsdl",$param);
  9. $server->addFunction('achievements');
  10.  
  11. $server->handle();
  12.  


Realmente no se en donde puede estar el problema, siendo que sí uso los datos primitivos como int, string, boolean, etc... el cliente de prueba me los acepta bien sin embargo, sí defino un dato, este me lo rechaza.
Espero encontrar aqui la solución ya que he perdido mucho tiempo buscando la solución.
Les agradezco de antemano, muchas gracias Saludos a todos.


Título: Re: Webservice, problema el retornar un dato con un SoapServer(PHP)
Publicado por: egyware en 16 Enero 2011, 02:41 am
Hasta que porfín encontre el error (fue casualidad)

Tenia describido el mensaje de salida esta manera
Código
  1. <message name="AchievementsOutput">
  2. <part name="return" type="xsd:Target" />
  3.  </message>
  4.  

Y era
Código
  1. <message name="AchievementsOutput">
  2. <part name="return" type="tns:Target" />
  3.  </message>
  4.  

Se fijaron TRES LETRAS producia mi error!!!

Ya gracias por todos los que se dignaron por lo menos leer el tema.
Saludos a todos!

Nota al Moderador:
Sorry por el doublepost.


Título: Re: Webservice, problema el retornar un dato con un SoapServer(PHP)
Publicado por: PMR_92 en 3 Octubre 2014, 01:25 am
Hola! leyendo tu tema me intereso mucho, es que tengo un problema no se si me puedes decir cual de las funciones tienes descritas en el archivo WSDL es que me urgeeeeeeeeeee  :huh:


Título: Re: Webservice, problema el retornar un dato con un SoapServer(PHP)
Publicado por: egyware en 3 Octubre 2014, 03:37 am
Ya no recuerdo bien aqui está el WSDL xD
Código
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <wsdl:definitions
  3.    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  4.    xmlns:tns="http://localhost/gameCommunity"
  5.    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  6.    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
  7.    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
  8.    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  9.    targetNamespace="http://localhost/gameCommunity">
  10.    <wsdl:types>
  11.        <xsd:schema targetNamespace="http://localhost/gameCommunity" elementFormDefault="qualified">            
  12. <xsd:complexType name="Target">
  13. <xsd:sequence>
  14. <xsd:element name="id" type="xsd:int"/>
  15. <xsd:element name="name" type="xsd:string"/>
  16. <xsd:element name="contador" type="xsd:int"/>
  17. <xsd:element name="max_contador" type="xsd:int"/>
  18. </xsd:sequence>
  19. </xsd:complexType>
  20. <xsd:complexType name="Achievement">
  21. <xsd:sequence>
  22. <xsd:element name="id" type="xsd:int"/>
  23. <xsd:element name="name" type="xsd:string" />
  24. <xsd:element name="targets" minOccurs="1" maxOccurs="10" type="tns:Target" />
  25. </xsd:sequence>
  26. </xsd:complexType>  
  27. <xsd:element name="ArrayOfAchievement">
  28. <xsd:complexType>
  29. <xsd:sequence>
  30. <xsd:element maxOccurs="1200" minOccurs="1" name="item" type="tns:Achievement"/>
  31. </xsd:sequence>
  32. </xsd:complexType>
  33. </xsd:element>
  34. <xsd:element name="UnlockCode">
  35. <xsd:simpleType>
  36. <xsd:restriction base="xsd:string">
  37. <xsd:enumeration value="unlock_false" />
  38. <xsd:enumeration value="unlock_true" />
  39. <xsd:enumeration value="unlock_complete" />                
  40. </xsd:restriction>
  41. </xsd:simpleType>
  42. </xsd:element>
  43. <xsd:element name="UnlockParam">
  44.                <xsd:complexType>
  45.                    <xsd:sequence>                        
  46. <xsd:element minOccurs="1" name="session" type="xsd:string" />
  47. <xsd:element minOccurs="1" name="logro" type="xsd:int" />
  48. <xsd:element minOccurs="1" name="objetivo" type="xsd:int" />
  49. <xsd:element minOccurs="1" name="veces" type="xsd:int" />
  50.                    </xsd:sequence>
  51.                </xsd:complexType>
  52.            </xsd:element>
  53. </xsd:schema>
  54.  
  55. <xsd:element name="Status">
  56. <xsd:simpleType>
  57. <xsd:restriction base="xsd:string">
  58. <xsd:enumeration value="status_ok" />
  59. <xsd:enumeration value="status_wrong_user" />
  60. <xsd:enumeration value="status_enabled_server" />
  61. <xsd:enumeration value="status_server_temporarily_disabled" />
  62. <xsd:enumeration value="status_server_off" />
  63. <xsd:enumeration value="status_irc_server_is_disabled" />
  64. <xsd:enumeration value="status_requires_an_update" />
  65. </xsd:restriction>
  66. </xsd:simpleType>
  67. </xsd:element>
  68. <xsd:element name="AuthParam">
  69. <xsd:complexType>
  70. <xsd:sequence>
  71. <xsd:element minOcurrs="1" name="username" type="xsd:string" />
  72. <xsd:element minOcurrs="1" name="game" type="xsd:string" />
  73. <xsd:element minOcurrs="1" name="ver" type="xsd:int" />
  74. </xsd:sequence>
  75. </xsd:complexType>
  76. </xsd:element>
  77. <xsd:element name="Auth">
  78. <xsd:complexType>
  79. <xsd:sequence>
  80. <xsd:element minOcurrs="1" name="nonce" type="xsd:string" />
  81. <xsd:element minOcurrs="1" name="info" type="xsd:string" />
  82. <xsd:element minOcurrs="1" name="status" type="tns:Status" />
  83. </xsd:sequence>
  84. </xsd:complexType>
  85. </xsd:element>
  86. <xsd:element name="LoginParam">
  87.                <xsd:complexType>
  88.                    <xsd:sequence>
  89.                        <xsd:element minOccurs="1" name="username" type="xsd:string"/>
  90.                        <xsd:element minOccurs="1" name="password" type="xsd:string"/>
  91. <xsd:element minOccurs="1" name="authcode" type="xsd:string"/>
  92.                    </xsd:sequence>
  93.                </xsd:complexType>
  94.            </xsd:element>          
  95. <xsd:element name="Session">
  96.                <xsd:complexType>
  97.                    <xsd:sequence>
  98. <xsd:element minOccurs="1" name="session_key" type="xsd:string"/>
  99. <xsd:element minOccurs="1" name="time_expire" type="xsd:int"/>
  100. <xsd:element minOccurs="1" name="time_last_login" type="xsd:int"/>
  101. <xsd:element minOccurs="1" name="ip_last_login" type="xsd:string"/>
  102. <xsd:element minOccurs="1" name="game_achievement_score" type="xsd:int"/>
  103. <xsd:element minOccurs="1" name="total_achievement_score" type="xsd:int"/>
  104. <xsd:element minOccurs="1" name="game_highscore" type="xsd:int"/>
  105.                    </xsd:sequence>
  106.                </xsd:complexType>
  107.            </xsd:element>
  108.    </wsdl:types>
  109.  
  110. <wsdl:message name="AuthInput">
  111. <wsdl:part name="parameters" element="tns:AuthParam" />
  112. </wsdl:message>
  113. <wsdl:message name="AuthOutput">
  114. <wsdl:part name="parameters" element="tns:Auth" />
  115. </wsdl:message>
  116. <wsdl:message name="LoginInput">
  117. <wsdl:part name="parameters" element="tns:LoginParam" />    
  118. </wsdl:message>
  119. <wsdl:message name="LoginOutput">
  120. <wsdl:part name="parameters" element="tns:Session" />
  121. </wsdl:message>
  122.  
  123. <wsdl:message name="UnlockInput">
  124. <wsdl:part name="parameters" element="tns:UnlockParam" />
  125. </wsdl:message>
  126. <wsdl:message name="UnlockOutput">
  127. <wsdl:part name="parameters" element="tns:UnlockCode" />
  128. </wsdl:message>
  129.    <wsdl:message name="AchievementsInput">
  130. <wsdl:part name="parameters" element="tns:Session" />
  131. </wsdl:message>
  132. <wsdl:message name="AchievementsOutput">
  133. <wsdl:part name="parameters" element="tns:ArrayOfAchievement" />
  134. </wsdl:message>
  135. <wsdl:message name="AchievementsImageInput">
  136.        <wsdl:part name="parameters" element="tns:AchievementsImageParam" />        
  137. </wsdl:message>
  138. <wsdl:message name="AchievementsImageOutput">
  139. <wsdl:part name="parameters" element="tns:ArrayOfData" />
  140. </wsdl:message>  
  141.  
  142.    <wsdl:portType name="AuthPortType">
  143. <wsdl:operation name="Auth">
  144.            <wsdl:input message="tns:AuthInput" wsaw:Action="http://localhost/gameCommunity/auth"/>
  145.            <wsdl:output message="tns:AuthOutput" wsaw:Action="http://localhost/gameCommunity/auth"/>
  146.        </wsdl:operation>  
  147.        <wsdl:operation name="Login">
  148.            <wsdl:input message="tns:LoginInput" wsaw:Action="http://localhost/gameCommunity/login"/>
  149.            <wsdl:output message="tns:LoginOutput" wsaw:Action="http://localhost/gameCommunity/login"/>
  150.        </wsdl:operation>      
  151.    </wsdl:portType>
  152.  
  153. <wsdl:portType name="AchievementPortType">
  154. <wsdl:operation name="Unlock">
  155. <wsdl:input message="tns:UnlockInput" wsaw:Action="http://localhost/gameCommunity/unlock"/>
  156. <wsdl:output message="tns:UnlockOutput" wsaw:Action="http://localhost/gameCommunity/unlock" />
  157. </wsdl:operation>
  158. <wsdl:operation name="Achievements">
  159. <wsdl:input message="tns:AchievementsInput" wsaw:Action="http://localhost/gameCommunity/achievements"/>
  160. <wsdl:output message="tns:AchievementsOutput" wsaw:Action="http://localhost/gameCommunity/achievements"/>
  161. </wsdl:operation>
  162. <wsdl:operation name="AchievementsImage">
  163. <wsdl:input message="tns:AchievementsImageInput" wsaw:Action="http://localhost/gameCommunity/achievementsImage"/>
  164. <wsdl:output message="tns:AchievementsImageOutput" wsaw:Action="http://localhost/gameCommunity/achievementsImage"/>
  165. </wsdl:operation>
  166. </wsdl:portType>
  167.  
  168.    <wsdl:binding name="AuthBinding" type="tns:AuthPortType">
  169.        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
  170.        <wsdl:operation name="Auth">
  171.            <soap:operation soapAction="http://localhost/gameCommunity/auth" style="document"/>
  172. <wsdl:input>
  173.                <soap:body use="literal"/>
  174.            </wsdl:input>
  175.            <wsdl:output>
  176.                <soap:body use="literal"/>
  177.            </wsdl:output>
  178.        </wsdl:operation>
  179. <wsdl:operation name="Login">
  180.            <soap:operation soapAction="http://localhost/gameCommunity/login" style="document"/>
  181. <wsdl:input>
  182.                <soap:body use="literal"/>
  183.            </wsdl:input>
  184.            <wsdl:output>
  185.                <soap:body use="literal"/>
  186.            </wsdl:output>
  187.        </wsdl:operation>
  188.    </wsdl:binding>
  189.  
  190. <wsdl:binding name="AchievementBinding" type="tns:AchievementPortType">
  191. <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
  192. <wsdl:operation name="Unlock">
  193. <soap:operation soapAction="http://localhost/gameCommunity/unlock" style="document"/>
  194. <wsdl:input>
  195. <soap:body use="literal" />
  196. </wsdl:input>
  197. <wsdl:output>
  198. <soap:body use="literal" />
  199. </wsdl:output>
  200. </wsdl:operation>
  201. <wsdl:operation name="Achievements">
  202. <soap:operation soapAction="http://localhost/gameCommunity/achievements" style="document"/>
  203. <wsdl:input>
  204. <soap:body use="literal" />
  205. </wsdl:input>
  206. <wsdl:output>
  207. <soap:body use="literal"/>
  208. </wsdl:output>
  209. </wsdl:operation>
  210. <wsdl:operation name="AchievementsImage">
  211. <soap:operation soapAction="http://localhost/gameCommunity/achievementsImage" style="document"/>
  212. <wsdl:input>
  213. <soap:body use="literal"/>
  214. </wsdl:input>
  215. <wsdl:output>
  216. <soap:body use="literal"/>
  217. </wsdl:output>
  218. </wsdl:operation>    
  219. </wsdl:binding>
  220.    <wsdl:service name="GameCommunity">
  221.        <wsdl:port name="AuthPort" binding="tns:AuthBinding">
  222.            <soap:address location="http://localhost/gameCommunity/Auth.php"/>
  223.        </wsdl:port>
  224. <wsdl:port name="AchievementPort" binding="tns:AchievementBinding">
  225.            <soap:address location="http://localhost/gameCommunity/achievement.php"/>
  226.        </wsdl:port>
  227.    </wsdl:service>
  228. </wsdl:definitions>
  229.  
Ahí está xD


Título: Re: Webservice, problema el retornar un dato con un SoapServer(PHP)
Publicado por: ~ Yoya ~ en 4 Octubre 2014, 17:49 pm
Siempre que trabajo con web services, antes de realizar un cliente para que consuma el web services, utilizo SoapUI para verificar que todo este correctamente y asi descarto que cualquier problema futuro pueda ser con el web services.