Nueva pregunta

Pregunta:

Fecha: 07-07-2020 09:47:55 (En Español)

Consumir con PHP un servicio WS al que le tengo que enviar un XML firmado[No resuelta]

Hola a todos, tengo un problema para consumir un WS al que le tengo que enviar un xml firmado.

Paso parte del código, donde en la función armo_y_firmo_xml() mi idea era armar el xml con los datos y no encuentro como firmar ese xml. Estoy usando soap y php.

Alguien tiene idea si hay alguna librería en php con la que pueda hacer esto? o si hay otra forma?

Si pudieran orientarme para consumir este servicio se los agradezco.

$url = //WS del cliente 
	$client = new SoapClient($url, true,false,false,false,false,0,600);
	$client->setHeaders("");

	// Check for an error
	$err = $client->getError();				
	if ($err) {
	    // Display the error
	    echo '<br><p><b>Constructor error: ' . $err . '</b></p>';
	} else {
	       // Check for a fault
		if ($client->fault) {
			echo '<br><PRE>Fault: ';
			print_r($client->fault);
			echo '<br></PRE>';
		} else {
			// Check for errors
			$err = $client->getError();
			if ($err) {
			    // Display the error
			    echo '<br><PRE>Error: ' . $err . '</PRE>';
			} else {
				
// llamo a la función armo_y_firmo_xml() para definir el xml....pero no se como firmarlo
	 		
				$archivo_xml = armo_y_firmo_xml();
										
				$parametros =  array('certificado' => $archivo_xml,
						'codigoEntidadCertificacion' => $nro_ingreso,
						'pin' => $nro_solicitud);		
				
				$Respuesta = $client->call('enviarCertificadosInput',$parametros );
				
				$resp_desc = $Respuesta["desc"];
				$resp_estado = $Respuesta["estado"];
			}
		}
	}

function armo_y_firmo_xml(){
	
	
	$archivo='<?xml version="1.0" encoding="UTF-8"?>
		<ns1:Envelope xmlns:ns1="http://www.w3.org/2001/12/soap-envelope" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ursea.gub.uy/xmldef/xml.xsd">
		<ns1:URSEACert>
		    <Certificado>
		        <DatosGenerales>		            
		            <TipoCertificado>'.$tipo_certificado.'</TipoCertificado>
		            <NombreCertificado>'.$nombre_certificado.'</NombreCertificado>
		        </DatosGenerales>
		        <DatosTipoCertificado>  
				<Procedencia>'.$procedencia.'</Procedencia>
			        <Fabricante>'.$facricante.'</Fabricante>
		        </DatosTipoCertificado>
		        <Evaluacion>
		        	<Marca>'.$marca.'</Marca>
				<Modelo>'.$modelo.'</Modelo>
		        </Evaluacion>
		    </Certificado>
		    <ds:Signature>
		        <!---
		         Algoritmos sugeridos preliminarmente: hash-sha256, encriptación asimétrica-RSA
		         -->
		        <ds:SignedInfo>
		            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
		            <ds:Reference URI="#Certificado">
		            <ds:Transforms>
		                <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#” />
		            </ds:Transforms>
		            <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
		            <ds:DigestValue>hash</ds:DigestValue>
		            </ds:Reference>
		        </ds:SignedInfo>
		        <ds:SignatureValue>signature</ds:SignatureValue>
		        <ds:KeyInfo>
		            <ds:X509Data>
		                <ds:X509Certificate>certificate</ds:X509Certificate>
		            </ds:X509Data>
		        </ds:KeyInfo>
		    </ds:Signature>
		</ns1:URSEACert>
		</ns1:Envelope>
		';
	return $archivo;
}
Etiquetas: PHP - Pregunta - SOAP - SoapClient - Webservices Votos: 0 - Respuestas: 1 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 19-07-2020 20:09:59 Okay deberias primero de aclarar el firmado que necesitas, tu proveedor de servicio te debe mandar el procedimiento de firma, ya sea con un diagrama o incluso una llave pero ese dato al final te ayuda a generar un string que es un dato cuaquiera, encriptado con la llave o proceso que tu proveedor te proporcione.   Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión