Pregunta:
Fecha: 07-07-2020 09:47:55
(En Español)
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.
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;
}
Votos: 0 -
Respuestas: 1 -
Vistas: 8
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
