Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #441  
Antiguo Hace 15 Horas
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 15 Horas a las 08:00:16.
Responder Con Cita
  #442  
Antiguo Hace 14 Horas
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 10 Horas
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 556
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 9 Horas
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 9 Horas
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 556
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 8 Horas
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 7 Horas
sglorka sglorka is offline
Miembro
 
Registrado: mar 2017
Ubicación: Tenerife
Posts: 556
Poder: 10
sglorka Va por buen camino
Gracias Noe277
No doy con la tecla... seguiré investigando
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 23:43:37.


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