Ayuda
SOAP: los .svc del servicio anterior
Si tu integración habla SOAP con el servicio anterior, migras cambiando el host. Las rutas, las operaciones, los nombres y el orden de los campos y los WSDL son los mismos.
Cada .svc del servicio anterior responde aquí en la misma ruta, con SOAP 1.1 (basicHttpBinding), el namespace http://tempuri.org/ y los tipos de ServiciosMexico.Responses. El WSDL que se sirve es el del servicio anterior con la dirección de este host, así que un proxy que ya generaste sigue sirviendo sin regenerarlo.
WSDL
curl "https://pruebas.timbrado.idea15.com/TimbradoObjeto/CFDI/Service.svc?wsdl"Las rutas
| Ruta | Equivale a |
|---|---|
/TimbradoObjeto/CFDI/Service.svcTimbrado, SeguimientoCFDI | El comprobanteModel del WSDL se convierte al mismo comprobante que TimbrarCfdiObj; la Addenda viaja tal cual. |
/SelladoTimbradoXML/CFDI/Service.svcSelladoTimbradoCFDI, TimbradoCFDI, SeguimientoCFDI, CancelarCFDI, ConsultarEstatusCFDI, ConsultarRelacionadosCFDI | selladoTimbCFDI, TimbradoCFDI y los de cancelar y consultar. |
/SelladoTimbradoXML/Retenciones/Service.svcSelladoTimbradoRetencion, TimbradoRetencion, CancelarRetencion, CargarPFXRetencion | selladoTimbRetencion, TimbradoCFDI (acepta Retenciones), cancelarRetencion y cargarPfx. |
/Cancelacion/Service.svcCancelarCFDI, ConsultarEstatusCFDI, ObtenerAcuseCancelacion, CancelarRetencion, CargarPFXRetencion | Los mismos de cancelar; acuseCancelacion devuelve el acuse de una cancelación pedida aquí. |
/CargarCertificado/Service.svcCargarCertificado, ObtenerDatosCertificado | CargarCertificado y datosCertificado. |
/ConsultaPDF/Service.svcObtenerPDF_CFDI, ObtenerPDF_Retenciones, ObtenerQR_CFDI | consultaPDF-CFDI, consultaPDF-Retenciones y consultaQR-CFDI. |
/SelladoTimbradoXML/CFDI/Lamuno/Service.svcTimbrarCFDI, ConsultaPDF, CancelarCFDI, ConsultarEstatusCFDI | Igual que antes: primero las reglas de TipoCambio (CFDI40113 a CFDI40117, CFDITC001), el XML ya sellado o sin sellar, siempre el PDF y el correo a los correos de la información adicional. |
/TimbradoTXT/CFDI/Service.svcTimbrado, SeguimientoCFDI, CancelarCFDI, CancelarCFDICasinos, ConsultarEstatusCFDI | El mismo layout TXT, con sus validaciones por renglón y sus addendas; también por REST como timbradoTXT. CancelarCFDICasinos cancela con el sello de la sucursal (claveSucursal). |
/TimbradoTXT/Retenciones/Service.svcTimbrado, CancelarRetencion, CargarPFXRetencion | El TXT de Retenciones; también por REST como timbradoTXT-Retenciones. |
/AdmonUsuarios/Service.svcCrearUsuario, EliminarUsuario, ObtenerConfigUsuario | Igual que antes, con las credenciales de administrador que te damos. Las cuentas que crea responden como el servicio anterior. |
/SelladoTimbradoXML/Service.svcSelladoTimbradoCFDI, SeguimientoCFDI, CancelarCFDI, ConsultarEstatusCFDI, CargarCertificado, ObtenerDatosCertificado, ObtenerPDF_CFDI, CargarLogo | Un servicio hecho a la medida de un cliente, con sus propios tipos de respuesta y sus textos. CargarLogo pone tu logo en los PDF. |
Qué debes saber
- El usuario y la contraseña van en el cuerpo (
user,password), como antes. Con credenciales malas recibes un objeto conCodigo500 y el mensaje de siempre, no un Fault. - Todo desenlace llega con HTTP 200 y su
Codigo, también lo incierto:Codigo500 conIdSeguimiento. Pregunta por él conSeguimientoCFDIantes de volver a mandar el comprobante; si lo reenvías igual, recibes 506 con el mismo UUID, nunca dos timbres. Está explicado en Reintentos sin doble timbre. - Los catálogos del
comprobanteModelllegan como los serializa tu proxy (Item01,Null, fechasdateTime, banderasSpecified) y se leen igual que antes. - Los campos vacíos se reportan con los mismos textos y en el mismo orden que antes: primero la lista de requeridos, después las credenciales.
- Un XML roto recibe HTTP 400 sin cuerpo y una operación que no existe, el
s:Faultde siempre (HTTP 500). - Las rutas no distinguen mayúsculas, como IIS.
?wsdly?singleWsdldan el mismo documento.
Un ejemplo
Petición
POST /Cancelacion/Service.svc HTTP/1.1
Host: pruebas.timbrado.idea15.com
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IService/ConsultarEstatusCFDI"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ConsultarEstatusCFDI xmlns="http://tempuri.org/">
<user>tu-usuario</user>
<password>tu-contraseña</password>
<rfcEmisor>EKU9003173C9</rfcEmisor>
<rfcReceptor>EKU9003173C9</rfcReceptor>
<uuid>AAAAAAAA-BBBB-4CCC-8DDD-EEEEEEEEEEEE</uuid>
<total>116.00</total>
</ConsultarEstatusCFDI>
</s:Body>
</s:Envelope>Respuesta · HTTP 200
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ConsultarEstatusCFDIResponse xmlns="http://tempuri.org/">
<ConsultarEstatusCFDIResult xmlns:a="http://schemas.datacontract.org/2004/07/ServiciosMexico.Responses"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Codigo>100</a:Codigo>
<a:EsCancelable>Cancelable sin aceptación</a:EsCancelable>
<a:Estado>Vigente</a:Estado>
<a:EstatusCancelacion i:nil="true"/>
<a:Mensaje>S - Comprobante obtenido satisfactoriamente.</a:Mensaje>
<a:Operacion>true</a:Operacion>
</ConsultarEstatusCFDIResult>
</ConsultarEstatusCFDIResponse>
</s:Body>
</s:Envelope>Con el proxy de .NET que ya tienes
// El proxy que ya tienes, generado del WSDL del servicio anterior: sólo cambia la dirección.
var cliente = new TimbradoObjeto.ServiceClient();
cliente.Endpoint.Address = new System.ServiceModel.EndpointAddress(
"https://timbrado.idea15.com/TimbradoObjeto/CFDI/Service.svc");
var respuesta = cliente.Timbrado("tu-usuario", "tu-contraseña", comprobanteModel, obtenerPDF: false);
if (respuesta.Codigo == "100" || respuesta.Codigo == "506")
GuardarXml(Convert.FromBase64String(respuesta.XMLBase64)); // 506: ya estaba timbrado, mismo UUID
else if (respuesta.Codigo == "500" && respuesta.IdSeguimiento != null)
Pendiente(respuesta.IdSeguimiento); // no se sabe: pregunta con SeguimientoCFDIPara una integración nueva, REST
SOAP está para que lo que ya funciona siga funcionando. Si empiezas de cero, la API REST es la misma funcionalidad con JSON y está documentada método por método en la referencia.
