Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Como invocar un webservice en php??

Estas en el tema de Como invocar un webservice en php?? en el foro de PHP en Foros del Web. Hola, buenas tardes, acudo a ustedes para ver si pueden ayudarme... Mi empresa esta entregando a una tienda llamada Soriana, la cual nos pide que ...
  #1 (permalink)  
Antiguo 26/02/2016, 11:17
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 11 meses
Puntos: 1
Como invocar un webservice en php??

Hola, buenas tardes, acudo a ustedes para ver si pueden ayudarme... Mi empresa esta entregando a una tienda llamada Soriana, la cual nos pide que para que nos paguen, le enviemos el CFDI por medio de un webservice, estoy tratando de hacer la aplicacion con php con SOAP para enviar el xml de la factura, trato de hacerlo asi:

Código PHP:
<html>
    <head>
        <title>Soriana</title>
    </head>
    <body>
        <form action="index.php" method="POST">
            <label>Enviar</label><input type="file" name="xml">
            <button type="submit">Enviar</button>
        </form>
        <?php
    
if(isset($_POST['xml'])){
        
$xml=$_POST['xml'];
        
$client=new SoapClient("http://serviciosweb.soriana.com/RecibeCfd/wseDocRecibo.asmx");
        
$resultado$client->__doRequest($xml);
        echo 
$resultado;
    }
?>
    </body>
</html>
Al hacer esto me manda un error que es el siguiente:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://serviciosweb.soriana.com/RecibeCfd/wseDocRecibo.asmx' : Premature end of data in tag html line 3 in /home/deshoping2014/public_html/deshoping.com/factura/index.php:13 Stack trace: #0 /home/deshoping2014/public_html/deshoping.com/factura/index.php(13): SoapClient->SoapClient('http://servicio...') #1 {main} thrown in /home/deshoping2014/public_html/deshoping.com/factura/index.php on line 13


No se que estoy haciendo mal, pueden ayudarme?
  #2 (permalink)  
Antiguo 26/02/2016, 11:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Como invocar un webservice en php??

¿De casualidad ya leíste el manual de SoapClient o estás programando a prueba y error?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/02/2016, 11:27
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Como invocar un webservice en php??

Cita:
Iniciado por pateketrueke Ver Mensaje
¿De casualidad ya leíste el manual de SoapClient o estás programando a prueba y error?
Prueba y error Jah... Si lo lei un poco, pero no entiendo muy bien ya que nunca lo habia usado
  #4 (permalink)  
Antiguo 26/02/2016, 11:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Como invocar un webservice en php??

No creas que todos en el foro somos expertos en todos los temas, tampoco va por ahí la cosa.

Por favor lee el manual para que entiendas cómo se usa, seguro vienen ejemplos y mucho más información de la que te podemos dar.

Enlace al manual: http://php.net/manual/es/class.soapclient.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/02/2016, 11:40
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Como invocar un webservice en php??

Cita:
Iniciado por pateketrueke Ver Mensaje
No creas que todos en el foro somos expertos en todos los temas, tampoco va por ahí la cosa.

Por favor lee el manual para que entiendas cómo se usa, seguro vienen ejemplos y mucho más información de la que te podemos dar.

Enlace al manual: http://php.net/manual/es/class.soapclient.php
Aunque no lo creas si lei gran parte pero la verdad no me ayuda mucho que digamos, esa empresa soriana complica bastante las cosas, presisamente indagando en el manual y en otras paginas, hice algunas correcciones, ahora asi esta:

Código PHP:
 <?php
    
if(isset($_POST['xml'])){
        
$xml=$_POST['xml'];
        
$client=new SoapClient("http://serviciosweb.soriana.com/RecibeCfd/wseDocRecibo.asmx?wsdl");
        
$resultado$client->RecibeCFD($xml);
        echo 
$resultado->RecibeCFDSoapOut;
    }
?>
Pero queda totalmente en blanco la pagina, la verdad esque ya ando algo desesperado con ese tema, ya llevamos algo de tiempo peleando con soriana >.<
  #6 (permalink)  
Antiguo 26/02/2016, 12:15
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: Como invocar un webservice en php??

Te recomiendo remover el BOM de los archivos XML. La codificacion debe ser utf8 sin BOM. Los caracteres del BOM a veces tiran la conexion. Los xml suelen traer caracteres que no pueden viajar por internet por lo que recomiendo que se codifique el archivo en base64 y en el server se decodifiquen para leerlos. Yo hice esto para una prueba y me funciona y hasta mando el pdf:

<html>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
<meta http-equiv="Pragma" content="nocache"/>
<script type="text/javascript">
</script>
<body>
<form id="recibeCFD" action="pruebaBoveda.php" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
<input type="file" style="display: inline-block" name="filePDF" id="filePDF" accept="application/pdf" />
<input type="file" style="display: inline-block" name="nomArch" id="nomArch" accept="application/xml" />
<input type="submit" name="submit" id="submit" value="aceptar" />
</form>
<?php
function remove_utf8_bom($text){
$bom = pack('H*','EFBBBF');
$text = preg_replace("/^$bom/", '', $text);
return $text;
}
if (isset($_FILES["nomArch"])){
if (($_FILES["nomArch"]["error"] > 0) && ($_FILES["filePDF"]["error"]>0) &&
(substr($_FILES["filePDF"]["name"],strlen($_FILES["filePDF"]["name"])-3)=="pdf") &&
(substr($_FILES["nomArch"]["name"],strlen($_FILES["nomArch"]["name"])-3)=="xml") ){
echo "Aviso: " . $_FILES["nomArch"]["error"] . "<br>";// Ocurrio un error al abrir el archivo
}else{
$rutaPdf=$_FILES["filePDF"]["tmp_name"];
$strfilePDF = $_FILES["filePDF"]["name"];
$strRutaTemp = $_FILES["nomArch"]["tmp_name"];
$strNomArch = $_FILES["nomArch"]["name"];
$intTamXml = filesize($strRutaTemp);
$intTamPdf = filesize($rutaPdf);
// Tipo MIME
$strTipoXml = mime_content_type($strRutaTemp);
$strTipoPdf = mime_content_type($rutaPdf);
// Contenido
$strContenidoXml = remove_utf8_bom(file_get_contents($strRutaTemp));
$strContenidoPdf = file_get_contents($rutaPdf);
$arreglo=array(
"nomPdf"=> base64_encode($strfilePDF),//base64_encode
"nomarch" => base64_encode($strNomArch),//base64_encode
"intTamXml" => $intTamXml, // int
"intTamPdf" => $intTamPdf , // int
"strTipoXml" => $strTipoXml , //string //tipo mime
"strTipoPdf" => $strTipoPdf , //string //tipo mime
"strContenidoXml" => base64_encode( $strContenidoXml),
"strContenidoPdf" => base64_encode( $strContenidoPdf)
);
ini_set("soap.wsdl_cache_enabled", "0");
try{
$cliente= new SoapClient("http://tu.url.del.webservice.php?WSDL",array('trace' => 1,'login'=>'usuario','password' => 'gfdgdh'));
$strResp = $cliente->__soapCall('metodoOfuncion',array($arreglo));
}catch(SoapFault $fault){
var_dump( array("Error"=>array($fault->faultcode,$fault->faultstring)));
}
}
}
?>
</body>
</html>
  #7 (permalink)  
Antiguo 26/02/2016, 13:36
 
Fecha de Ingreso: enero-2012
Mensajes: 55
Antigüedad: 12 años, 11 meses
Puntos: 1
Respuesta: Como invocar un webservice en php??

Cita:
Iniciado por abrahamhs Ver Mensaje
Te recomiendo remover el BOM de los archivos XML. La codificacion debe ser utf8 sin BOM. Los caracteres del BOM a veces tiran la conexion. Los xml suelen traer caracteres que no pueden viajar por internet por lo que recomiendo que se codifique el archivo en base64 y en el server se decodifiquen para leerlos. Yo hice esto para una prueba y me funciona y hasta mando el pdf:

<html>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
<meta http-equiv="Pragma" content="nocache"/>
<script type="text/javascript">
</script>
<body>....

Muchas muchas muchas pero muchas gracias, pude arreglar mi problema con lo que tu me pones, modificando y arreglando el codigo para adaptarlo mis necesidades, al fin pude y realmente me ayudaste mucho... ASi quedó... Y espero que gente de la comunidad que tenga que entregar en soriana les sirva...

Código PHP:
<html>
    <head>
        <title>Puto soriana</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/>
        <meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
        <meta http-equiv="Pragma" content="nocache"/>
    </head>
    <body>
        <form action="index.php" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
            <label>Enviar</label><input type="file" name="xml" accept="application/xml">
            <button type="submit">Enviar</button>
        </form>
        <?php
    
if(isset($_FILES['xml'])){
        function 
remove_utf8_bom($text){
            
$bom pack('H*','EFBBBF');
            
$text preg_replace("/^$bom/"''$text);
            return 
$text;
        }
        
$url="http://serviciosweb.soriana.com/RecibeCfd/wseDocRecibo.asmx?wsdl";
        
$xml=$_FILES['xml'];
        
$rutaxml=$_FILES['xml']["tmp_name"];
        
$strContenidoXml remove_utf8_bom(file_get_contents($rutaxml));
        
$parametros=array();
        
$parametros['XMLCFD']=$strContenidoXml;
        
ini_set("soap.wsdl_cache_enabled""0");
        
$client=new SoapClient($url);
        
$resultado$client->RecibeCFD($parametros);
        echo 
"<textarea style='width: 400px;' rows='20'>".$resultado->RecibeCFDResult."</textarea>";
    }
?>
    </body>
</html>

Etiquetas: html, invocar, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.