Ver Mensaje Individual
  #3540  
Antiguo 16-11-2022
Irreo Irreo is offline
Miembro
 
Registrado: mar 2022
Posts: 70
Reputación: 3
Irreo Va por buen camino
Cita:
Empezado por espinete Ver Mensaje
Pues la verdad es que no lo había considerado.

Me centré en hacer lo que ya tenía hecho en Delphi para pasarlo a PHP tal cual, y me había olvidado completamente de esa posibilidad.

O sea... que puedo firmar todo (XML y envío) con un solo "certificado de dispositivo"?

Tengo que investigar más sobre esto, porque hasta ahora no me lo había ni planteado y no sé si a estas alturas va a ser más complicado o más fácil cambiar.
Puedes emitir desde un dispositivo para varios CIF. Lo único, después de la primera emisión, la empresa en cuestión tiene que ir a su Sede Electrónica, al área de "registro de dispositivos", y aceptarlo como válido (esto quizás es así siempre, pero lo comento por si acaso).

Te cito del FAQ de Izenpe:
¿Puedo usar un mismo dispositivo para facturar distintas empresas? ¿en ese caso debo tener certificados distintos?
Si, puedes tener un dispositivo que facture para varias entidades diferentes. Se deberá vincular dicho dispositivo y su certificado con cada uno de los obligados tributarios en la Hacienda Foral correspondiente.

( https://www.izenpe.eus/faqs/pregunta...cnempresas/es/ )

Nosotros tenemos un software desarrollado para uso propio, pero emite para tres CIF diferentes (nuestros).

Todo lo hacemos con el mismo certificado de dispositivo de Izenpe (gratuito, 10 años).

- Firma: Usando el firmador que mencionas, con el fichero P12/PFX.
- Conexión con Hacienda para enviar: El mismo certificado, convertido a PEM por mí mismo en el propio servidor.

Para la firma no tiene misterio, es meter los valores de certificado y contraseña.

Para el envío, por si te sirve, hago un "file_get_contents" con un Context, donde cargo el certificado:

Código PHP:
                     $opts = array(
                            
"ssl" => array(
                                
"local_cert" => $appConfig["certificate"],
                                
"passphrase" => $appConfig["certificate_password"],
                                
"allow_self_signed"    => true,
                                
"cafile" => $appConfig["certificate"],
                                
"capath" => $appConfig["base_path"],
                                
"verify_peer" => false
                            
),
                            
"http" => array (
                                
"method" => "POST",
                                
"ignore_errors" => true,
                                
"timeout" => 9// Por ahora 9 segundos porque el proceso se ejecuta cada 10 segundos
                                
"header" =>
                                
"Accept-language: es\r\n".
                                
"Content-type: application/xml;charset=UTF-8\r\n",
                                
"content" => $xmlSent
                            
)
                        );

                        
$context stream_context_create($opts);

                        
$haciendaResult file_get_contents($apiServicefalse$context); 
Saludos.
Responder Con Cita