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: 11 - Views: 14 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
     
To actively participate in the community first must authenticate, enter the system.Sign In