Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #441  
Antiguo Hace 1 Semana
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 168
Poder: 10
Noe277 Va por buen camino
Cita:
Empezado por sglorka Ver Mensaje
Gracias por la respuesta

¿ Estás en el mismo escenario que yo ?. .Net, Microsoft.Web.Services3.Security y certificado registrado en integradores en https://integradores.face.gob.es/ ( no está registrado en https://proveedores.face.gob.es/ porque me dice que ya es integrador )

Saludos
C# y no estoy haciendo lo mismo pero si que en su momento tenia xml de facturae que por caracteres el fichero se codificaba como ANSI o lo del BOM "No me acuerdo si tiene que ser utf8 con o sin BOM" y firmabas el archivo y la firma no era valida.


Por otro lado hace tiempo vi que habían publicado Wsdl nuevos y tu estas usando los retrocompatibles igual los nuevos están funcionando ya.

Última edición por Noe277 fecha: Hace 1 Semana a las 08:00:16.
Responder Con Cita
  #442  
Antiguo Hace 1 Semana
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 168
Poder: 10
Noe277 Va por buen camino
Cita:
Empezado por Noe277 Ver Mensaje
C# y no estoy haciendo lo mismo pero si que en su momento tenia xml de facturae que por caracteres el fichero se codificaba como ANSI o lo del BOM "No me acuerdo si tiene que ser utf8 con o sin BOM" y firmabas el archivo y la firma no era valida.


Por otro lado hace tiempo vi que habían publicado Wsdl nuevos y tu estas usando los retrocompatibles igual los nuevos están funcionando ya.
Otra cosilla mira que estés haciendo con SHA-256 que esto también da problemas con la codificación igual estas con SHA-1 y no se si te dará problemas
Responder Con Cita
  #443  
Antiguo Hace 1 Semana
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 557
Poder: 10
sglorka Va por buen camino
Cita:
Empezado por Noe277 Ver Mensaje
Otra cosilla mira que estés haciendo con SHA-256 que esto también da problemas con la codificación igual estas con SHA-1 y no se si te dará problemas
Pues estoy con SHA-1 seguro porque WSE no trabaja con SHA-256. Lo que no sé es si ese es el problema ya que hasta la semana pasada sí funcionaba. ¿ Podrían haber actualizado algo en Face ?, pregunta del millón
Responder Con Cita
  #444  
Antiguo Hace 1 Semana
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 168
Poder: 10
Noe277 Va por buen camino
Cita:
Empezado por sglorka Ver Mensaje
Pues estoy con SHA-1 seguro porque WSE no trabaja con SHA-256. Lo que no sé es si ese es el problema ya que hasta la semana pasada sí funcionaba. ¿ Podrían haber actualizado algo en Face ?, pregunta del millón
Hace unos meses actualizaron todos los manuales.
En los manuales pone SHA-256 el SHA-1 esta obsoleto y además están pidiendo el tls mas moderno.

yo uso estos pero si usas un .net viejo no podrás. el WSE 3 es muy viejo

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Security;
using System.ServiceModel;
using System.ServiceModel.Channels;
Responder Con Cita
  #445  
Antiguo Hace 1 Semana
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 557
Poder: 10
sglorka Va por buen camino
Cita:
Empezado por Noe277 Ver Mensaje
Hace unos meses actualizaron todos los manuales.
En los manuales pone SHA-256 el SHA-1 esta obsoleto y además están pidiendo el tls mas moderno.

yo uso estos pero si usas un .net viejo no podrás. el WSE 3 es muy viejo

using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Security;
using System.ServiceModel;
using System.ServiceModel.Channels;
Perfecto, ¿Usas "Agregar referencia web" o "Agregar referencia de servicio"? contra https://webservice.face.gob.es/facturasspp?wsdl
¿La clase cliente hereda de ClientBase<T> o de SoapHttpClientProtocol?
Te agradecería que me aclarases esta información

Gracias de antemano
Saludos
Responder Con Cita
  #446  
Antiguo Hace 1 Semana
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 168
Poder: 10
Noe277 Va por buen camino
Cita:
Empezado por sglorka Ver Mensaje
Perfecto, ¿Usas "Agregar referencia web" o "Agregar referencia de servicio"? contra https://webservice.face.gob.es/facturasspp?wsdl
¿La clase cliente hereda de ClientBase<T> o de SoapHttpClientProtocol?
Te agradecería que me aclarases esta información

Gracias de antemano
Saludos

Agregar referencia de servicio. y haber yo a facturae como tal no probé, intente ir a obtener los DIR3 pero me daba error 400. No se si pille cuando estaban cambiando toda la movida, hice muchas pruebas y lo deje. Te dejo un código haber si sacas algo de esto. Lo del toquen nunca había hecho así que no se si estará bien.


Cita:
private readonly string _url = "https://ws.face.gob.es/organismos/v1/directorio";

public async Task<ConsultarUnidadesResponse> ObtenerDirectorioAsync()
{
// 1. Configuración de Seguridad de Red
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
// System.Net.ServicePointManager.Expect100Continue = false;

// 2. Obtener Certificado
X509Certificate2 certificado = null;
try
{
// NOTA: BDCertificados debe devolver el cert cargado con X509KeyStorageFlags.MachineKeySet
(certificado, _) = BDCertificados.ObtenerCertificado("persona");
if (certificado == null) throw new Exception("Certificado no encontrado.");
}
catch (Exception ex) { throw new Exception("Error al cargar certificado: " + ex.Message); }

// 3. Configuración del Binding
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
// binding.MaxReceivedMessageSize = 2147483647;
// binding.AllowCookies = true;

var endpoint = new EndpointAddress(_url);

using (var client = new organismosv1directorioPortClient(binding, endpoint))
{
client.ClientCredentials.ClientCertificate.Certificate = certificado;

// 4. Generar el Token JWT firmado
string tokenJwt = GenerarTokenJWT(certificado);

// 5. Ámbito de la operación para inyectar la cabecera
using (new OperationContextScope(client.InnerChannel))
{
var property = new HttpRequestMessageProperty();
// El "Bearer" es lo que exige el API v2.0.0
property.Headers["Authorization"] = "Bearer " + tokenJwt;
property.Headers["Content-Type"] = "text/xml; charset=utf-8";

OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = property;

try
{
// 6. Request Mínimo (Evitar enviar campos vacíos que causan error 400)
var request = new ConsultarUnidadesRequest
{
codigo = "L01234567",
estado = "V", // Solo vigentes
nombre = "",
identificador = "",
padre = "",
administracion = ""
};


return await client.consultarUnidadesAsync(request);
}
catch (Exception ex)
{
string msg = ex.InnerException != null ? ex.InnerException.Message : ex.Message;
throw new Exception("Error 400 en FACe: " + msg);
}
}
}
}

// --- GENERADOR DE TOKEN JWT (Basado en Manual FACe pág. 86) ---
private string GenerarTokenJWT(X509Certificate2 cert)
{
// Header: RS256 + Certificado en x5c
string certBase64 = Convert.ToBase64String(cert.RawData);
string headerJson = "{\"alg\":\"RS256\",\"typ\":\"JWT\",\"x5c\":[\"" + certBase64 + "\"]}";

// Payload: exp y iat (sin decimales)
long iat = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
long exp = iat + 7200;
string payloadJson = "{\"exp\":" + exp + ",\"iat\":" + iat + "}";

// Codificación Base64Url
string headerEnc = Base64UrlEncode(Encoding.UTF8.GetBytes(headerJson));
string payloadEnc = Base64UrlEncode(Encoding.UTF8.GetBytes(payloadJson));
string dataToSign = headerEnc + "." + payloadEnc;

// Firma con SHA256 (Compatible con .NET 4.8 y claves CNG/CAPI)
byte[] signatureBytes;
using (RSA rsa = cert.GetRSAPrivateKey())
{
if (rsa == null) throw new Exception("El certificado no tiene clave privada RSA accesible.");
signatureBytes = rsa.SignData(Encoding.UTF8.GetBytes(dataToSign), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

return dataToSign + "." + Base64UrlEncode(signatureBytes);
}

private string Base64UrlEncode(byte[] input)
{
return Convert.ToBase64String(input)
.Replace("+", "-")
.Replace("/", "_")
.Replace("=", "");
}
Responder Con Cita
  #447  
Antiguo Hace 1 Semana
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 557
Poder: 10
sglorka Va por buen camino
Gracias Noe277
No doy con la tecla... seguiré investigando
Responder Con Cita
  #448  
Antiguo Hace 6 Días
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 557
Poder: 10
sglorka Va por buen camino
Ya se ha arreglado la entrada de facturas a Face a través de los endpoints https://webservice.face.gob.es/facturasspp y https://webservice.face.gob.es/facturasspp2. Parece que tenían un problema técnico y no habían dicho nada .... hoy ha empezado a funcionar bien.

Se confirma que WSE Microsoft.Web.Services3 sigue funcionando correctamente para firmar el soap mediante SHA-1
Pongo esta infomación por si le interesa a alguien
Saludos
Responder Con Cita
  #449  
Antiguo Hace 1 Día
jlmoli_67 jlmoli_67 is offline
Miembro
 
Registrado: feb 2024
Posts: 131
Poder: 3
jlmoli_67 Va por buen camino
Cita:
Empezado por unomasmas Ver Mensaje
OK. Gracias; es un avance; pasamos, entonces, del servidor de pruebas porque parece que lo tienen abandonado ¿Nos das más pistas sobre qué error te muestra al intentar conectarte al webservice? Por ver si podemos concretar la razón de que no te vaya..
Buenas,
sigue sin poder alguien añadir un certificado en el portal de pruebas para integradores? https://se-integradores-face.redsara...-privada/login

segun la ia al recibir esta respuesta cuando envio una factura a face es que la validacion a nivel de firmas y estructura esta ok pero el pem no esta dado de alta en la seccion de certificados y no hay cojones de avanzar. El pem que no me deja en pruebas si me deja en produccion asi que estoy perdidito y a semejanza de otros usuarios de este foro he puesto 2 tickets a soporte y lo que dan de informacion no tiene ni que ver con lo que se les pregunta. Un desastre de soporte, vaya.

<SOAP-ENV:Fault>
<faultcode>401</faultcode>
<faultstring>No existe ning&#xFA;n usuario asociado al certificado que firma la petici&#xF3;n</faultstring>
</SOAP-ENV:Fault>
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Facturas Electronicas Argentina Chaja Varios 3 10-07-2015 19:15:05
Agregar Adendas a Facturas electronicas mexico reypcs Varios 0 20-01-2011 16:26:10
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 17:27:37
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 13:06:34
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44


La franja horaria es GMT +2. Ahora son las 18:48:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi