New question

Question:

Date: 23-08-2018 12:03:54 (In Spanish)

Message: SOAP-ERROR: Parsing WSDL: 'BillServicePortBinding' already defined[Unresolved]

Hola,
Estoy intentando conectarme con el servicio de la SUNAT a través de soap pero me muestra el siguiente error:

An uncaught Exception was encountered
Type: SoapFault
Message: SOAP-ERROR: Parsing WSDL: 'BillServicePortBinding' already defined

El código que he desarrollado es el siguiente:

$service = 'https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl'; 
				    	$headers = new CustomHeaders('20600258894MODDATOS', 'moddatos'); 

				    	$client = new SoapClient($service, [ 
				    		'cache_wsdl' => WSDL_CACHE_NONE, 
				    		'trace' => TRUE , 
				    		'soap_version' => SOAP_1_1 
				    	]); 

				    	$client->__setSoapHeaders([$headers]); 
				    	$fcs = $client->__getFunctions();

				    	$zipXml = 'adjunto/xml/facturas/'.$filename.'.zip'; 
				    	$params = array( 
				    		'fileName' => $zipXml, 
				    		'contentFile' => file_get_contents($zipXml) 
				    	); 

				    	$status = $client->sendBill($params);


Estuve buscando en internet un poco y me encontré con que es un error del mismo PHP pero si alguien tiene alguna solución para este error, se lo agradecería muchísimo.

Saludos.
Tags: Array PHP - Billing - Digital Signature - Electronic Invoice - HTML - Javascript - MySQL - PHP - PHP Advanced - PHP Class - Question - SOAP - SoapClient - SoapServer - Web Votes: 0 - Answers: 22 - Views: 20 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 23-08-2018 13:15:45 estas duplicando el namespace BillServicePortBinding   Votes: 0 - Link answer
     
  • Date: 23-08-2018 13:30:45 algo así estuve leyendo, sabes como podría hacer para solucionar ese error?   Votes: 0 - Link answer
     
  • Date: 29-08-2018 10:46:03 Es raro que sea un error de PHP... me suena más a que el WSDL está mal definido...

    Tal vez podrías descargarte una copia local, arreglarlo y usarlo así...
      Votes: 0 - Link answer
     
  • Date: 03-09-2018 08:54:21 Hola Diego, lo que muchos hemos hecho es descargar el .wsdl y manejarlo de manera local tal como dicen arriba, el único problema es que si SUNAT hace algún cambio, entonces debes hacerlo tú también en tu local, te dejo para que lo descargues desde mi repo

    solo reemplaza la url por el nombre del archivo
    $service = 'https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl';

    por esto, obviamente dandole la ruta correspondiente
    $service = 'SunatProd.wsdl';

    nos comentas como te fue
      Votes: 1 - Link answer
     
  • Date: 09-10-2018 09:45:14 Hola, descargué el archivo de tu repo pero no logra entablar conexión, me indica error por tiempo de espera.


    SoapFault in HandleExceptions.php line 56:
    Maximum execution time of 60 seconds exceeded
      Votes: 0 - Link answer
     
  • Date: 09-10-2018 12:00:44 Desactiva tu Firewall y antivirus y vuelve a probar, en todo caso ese ya no sería problema de la url   Votes: 1 - Link answer
     
  • Date: 15-05-2019 09:03:25 Hola Erwin tengo el mismo problema no logro solucionar, descargue tu ejemplo pero me sale el mismo error, estoy haciendo para Guia de Remision.

    Cambié el xml de tu ejemplo con la del guia de remisión.

    Pero sigue el mismo problema..

    Espero de su pronta respuesta
      Votes: 0 - Link answer
     
  • Date: 16-05-2019 03:46:05 Efrain: ¿Probaste entrar a la URL directamente? Con cURL o algo similar... al menos de ese modo podrás descartar un problema de conectividad...   Votes: 0 - Link answer
     
  • Date: 16-05-2019 15:22:45 Hola Mauro he probado con ''SoapClient'' en la configuración php.ini también está habilitado la opcion curl, y la respuesta es '' no se puede cargar la entidad externa ''   Votes: 0 - Link answer
     
  • Date: 17-05-2019 05:31:38 Ok, yo me refería a la utilidad cURL de línea de comandos (es decir, fuera de todo php).

    Igualmente, todo apunta a que el problema está del otro lado (Algunos ya han sugerido revisar el WSDL)
      Votes: 0 - Link answer
     
  • Date: 07-08-2019 05:53:02 Hola, buenos días, tengo una consulta, luego del error que solucioné haciendo lo que me indicaron (descargar el wsdl) estuve facturando sin ningún problema pero de la nada hace unos días me empezó a mostrar como error "no tiene perfil para emitir comprobantes electrónicos". Después de hablar mucho con la sunat me dijeron que la conexión soap estaba incompleta y debía hacerla según su manual del programador. Estuve haciendo algunos cambios pero me da error indicando al parecer porque no está realizando la conexión y por ende tampoco estoy recibiendo respuesta cdr de la sunat. Mi código modificado es el siguiente:
    				$zipXml = $filename.'.zip'; 
    				$params = array( 
    		    		'fileName' => $zipXml, 
    		    		'contentFile' => file_get_contents('adjunto/xml/boletas/'.$fileBoleta.'/'.$zipXml) 
    		    	); 
    
    				$service = 'adjunto/wsdl/billService.wsdl'; 
    
    				$WSHeader = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ser=" http://service.sunat.gob.pe"xmlns:wsse=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    					<soapenv:Header>
    						<wsse:Security>
    							<wsse:UsernameToken>
    								<wsse:Username>rucyusuario</wsse:Username>
    								<wsse:Password>contraseña</wsse:Password>
    							</wsse:UsernameToken>
    						</wsse:Security>
    					</soapenv:Header>
    					<soapenv:Body>
    						<ser:sendSummary>
    							<fileName>'.$zipXml.'</fileName>
    							<contentFile>cid:'.file_get_contents('adjunto/xml/boletas/'.$fileBoleta.'/'.$zipXml).'</contentFile>
    						</ser:sendSummary>
    					</soapenv:Body>
    				</soapenv:Envelope>';
    
    				$headers = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', new SoapVar($WSHeader, XSD_ANYXML));
    		    	$client = new SoapClient($service, array(
    		    		'cache_wsdl' => WSDL_CACHE_NONE,
    		    		'trace' => TRUE,
    		    		//'soap_version' => SOAP_1_2
    		    	));
    
    				//$client->sendSummary($params);
    				$status = $client->__getLastResponse();
    


    Estoy dando vueltas con ese código y aún no encuentro solución. No sé si está bien que lo consulte por aquí o deba crear una nueva pregunta. Gracias de antemano.
      Votes: 0 - Link answer
     
  • Date: 05-10-2019 10:41:54 Estimado Diego, has solucionado el tema... soy nuevo y he intentado enviar pero una Boleta y me sale el mismo error: "No tiene perfil para emitir comprobantes electrónicos"... y pues también no tengo respuesta cdr.   Votes: 0 - Link answer
     
  • Date: 07-10-2019 12:47:04 Dennis Llatas, te dejaré un Link por aquí y me avisas como te va   Votes: 0 - Link answer
     
  • Date: 07-10-2019 14:56:12 Estimado Erwin, este es el codigo que estoy utilizando.

    <?php
    $filename = 'RUC-03-B001-00000034';
    $zipXml = $filename.'.zip'; 
    $params = array( 
    	'fileName' => $zipXml, 
    	'contentFile' => file_get_contents('archivos/'.$zipXml) 
    ); 
    
    $service = 'billService.wsdl'; 
    $WSHeader = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ser=" http://service.sunat.gob.pe"xmlns:wsse=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    	<soapenv:Header>
    		<wsse:Security>
    			<wsse:UsernameToken>
    				<wsse:Username>rucyusuario</wsse:Username>
    				<wsse:Password>contraseña</wsse:Password>
    			</wsse:UsernameToken>
    		</wsse:Security>
    	</soapenv:Header>
    	<soapenv:Body>
    		<ser:sendBill>
    			<fileName>'.$zipXml.'</fileName>
    			<contentFile>cid:'.file_get_contents('archivos/'.$zipXml).'</contentFile>
    		</ser:sendBill>
    	</soapenv:Body>
    </soapenv:Envelope>';
    $headers = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', new SoapVar($WSHeader, XSD_ANYXML));
    $client = new SoapClient($service, array(
    	'cache_wsdl' => WSDL_CACHE_NONE,
    	'trace' => TRUE
    	//,'soap_version' => SOAP_1_1
    ));
    $client->sendBill($params);
    $status = $client->__getLastResponse();
    
    ?>


    pero al ejecutar me sale error:

    Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'file:/C:/Apache24/htdocs/firma_envio/billService.ns1.wsdl' : failed to load external entity "file:/C:/Apache24/htdocs/firma_envio/billService.ns1.wsdl" in C:\Apache24\htdocs\firma_envio\nuevo_envio.php:33 Stack trace: #0 C:\Apache24\htdocs\firma_envio\nuevo_envio.php(33): SoapClient->SoapClient('billService.wsd...', Array) #1 {main} thrown in C:\Apache24\htdocs\firma_envio\nuevo_envio.php on line 33

    estoy utilizando el archivo de tu repositorio:

    $service = 'billService.wsdl';

    me podrías decir que estoy haciendo mal...
    te envio mi email: dennis.dllg.a@gmail.com
      Votes: 0 - Link answer
     
  • Date: 09-10-2019 05:27:29 Disculpa la demora, me faltó agregar otros archivos, espero aún te sirva. Aquí   Votes: 0 - Link answer
     
  • Date: 10-10-2019 08:31:57 Estimado Erwin, he probado y efectivamente se puede enviar pero esta apuntando al servidor de pruebas. si quisiera que apuntara a producción el cambio seria en el archivo: billService.wsdl al final en las lineas:

    <soap11:address location="https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService"/></wsdl:port>
    <wsdl:port name="BillServicePort.1" binding="ns0:BillServicePortBinding">
    <soap11:address location="https://e-factura.sunat.gob.pe:443/ol-ti-itcpfegem/billService"/></wsdl:port></wsdl:service></wsdl:definitions>


    estaría bien el cambio? pues lo intente y me salio el siguiente error extraño:

    Fatal error: Uncaught SoapFault exception: [soap-env:Client.0102] Usuario o contraseña incorrectos - Detalle: in C:\Apache24\htdocs\firma_envio\envio.php:74 Stack trace: #0 C:\Apache24\htdocs\firma_envio\envio.php(74): SoapClient->__call('sendBill', Array, Array) #1 C:\Apache24\htdocs\firma_envio\envio.php(117): soapCall('billService.wsd...', 'sendBill', '<?xml version="...') #2 {main} thrown in C:\Apache24\htdocs\firma_envio\envio.php on line 74


    pareciera que mi usuario y clave estuvieran mal, pero con esas credenciales he podido entrar a la pagina se sunat, por lo que creo que debe ser otra cosa el error... que opinas???

    La idea es enviar a produccion.
    Gracias por tu ayuda.
      Votes: 0 - Link answer
     
  • Date: 14-10-2019 06:25:36 Hola, hace unos días sunat está presentando problemas con su web services y eso incluye los archivos .wsdl que se descargan para poder conectarse con el servicio, cuando me comuniqué con ellos me dijeron que podía emitir los resumenes diarios a través de https://www.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl, que según ellos es su servicio antiguo, el problema es que no se como descargar el .wsdl de ese web service o como poder modificar el que ya tengo para que apunte a ese link. Si alguien sabe como solucionar eso agradecería su ayuda.

    Saludos.
      Votes: 0 - Link answer
     
  • Date: 16-10-2019 06:54:36 Estimado Erwin, aun con los archivos que me has compartido, aun me sale ese mensaje cuando intento enviar facturas a PRODUCCION.

    el codigo es:

    <?php
    $filename = '20557303341-01-F001-00000013';
    $zipXml = $filename.'.zip'; 
    $params = array( 
    	'fileName' => $zipXml, 
    	'contentFile' => file_get_contents('archivos/'.$zipXml) 
    ); 
    $service = 'billService.wsdl'; 
    //$service = 'billServiceSUNAT.wsdl'; 
    //$service = 'https://e-factura.sunat.gob.pe/ol-ti-itcpfegem/billService?wsdl';
    
    $WSHeader = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ser=" http://service.sunat.gob.pe"xmlns:wsse=" http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    	<soapenv:Header>
    		<wsse:Security>
    			<wsse:UsernameToken>
    				<wsse:Username>RUCUSUARIO</wsse:Username>
    				<wsse:Password>CONTRASENA</wsse:Password>
    			</wsse:UsernameToken>
    		</wsse:Security>
    	</soapenv:Header>
    	<soapenv:Body>
    		<ser:sendBill>
    			<fileName>'.$zipXml.'</fileName>
    			<contentFile>'.base64_encode(file_get_contents( 'archivos/'.$zipXml)).'</contentFile>
    		</ser:sendBill>
    	</soapenv:Body>
    </soapenv:Envelope>';
    //<contentFile>cid:'.file_get_contents('archivos/'.$zipXml).'</contentFile>
    $headers = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', new SoapVar($WSHeader, XSD_ANYXML));
    
    print $zipXml;
    $client = new SoapClient($service, array(
    	'cache_wsdl' => WSDL_CACHE_NONE,
    	'trace' => TRUE
    	//,'soap_version' => SOAP_1_1
    	//,'http' => array('user_agent' => 'PHPSoapClient')
    ));
    $client->sendBill($params);
    $status = $client->__getLastResponse();
    
    ?>


    el mensaje es:

    Uncaught SoapFault exception: [soap-env:Client.0111] No tiene el perfil para enviar comprobantes electronicos - Detalle: Rejected by policy. in C:\Apache24\htdocs\firma_envio\nuevo_envio.php:39 Stack trace: #0 C:\Apache24\htdocs\firma_envio\nuevo_envio.php(39): SoapClient->__call('sendBill', Array) #1 {main} thrown in C:\Apache24\htdocs\firma_envio\nuevo_envio.php on line 39


    que mas podría hacer?
    Gracias
      Votes: 0 - Link answer
     
  • Date: 16-10-2019 07:28:03 Dennis ya subiste tu certificado, creaste tu usuario secundario con los permisos correspondientes y le marcaste la opción Deseo emitir a través del SEE - Del Contribuyente. ? Muy importante esos pasos, ahora podrías intentar creando otro usuario secundario y esperar un lapso de 24 horas. Me comentas como vas   Votes: 1 - Link answer
     
  • Date: 17-10-2019 06:26:44 Estimado, en realidad ya había hecho lo que indicas... Lo acabo de hacer otra vez... veremos que pasa luego.
    Esperare ya que no se puede confiar en SUNAT.
    Te avisare.
      Votes: 0 - Link answer
     
  • Date: 28-10-2019 06:33:11 Una consulta, les sale error en la pagina de la sunat, en la opción:

    SEE - Del contribuyente y envío de documentos
    Servicio de Envío de documentos Electrónicos
    Servicio de Envío de documentos Electrónicos por Servicio Web (En esta opción me sale error: ERROR 404 - PÁGINA NO DISPONIBLE)
    Servicio de Envío de documentos Electrónicos por Servicio Web (También sale error: env:Client Internal Error)
    Certificado Digital
    Consultar Envíos de CPE

    Esto no creo que deba ser normal, ustedes que puede ver al hacer click.

    Otra consulta, saben si sunat esta recibiendo consultas porque estoy llamando a +51 1 3150730, y no me contestan.

    Gracias.
      Votes: 0 - Link answer
     
  • Date: 18-11-2019 10:24:15 Erwin Stalin, Gracias por la ayuda, ahora ya esta funcionando correctamente.   Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In