New question

Question:

Date: 07-07-2020 09:47:55 (In Spanish)

Consumir un servicio al que le tengo que enviar un XML firmado[Unresolved]

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;
}
Tags: Votes: 0 - Answers: 1 - Views: 3 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 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.   Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In