@@ -418,6 +418,205 @@ public class ExampleReadme {
418418```
419419</details >
420420
421+ # Cancelación de Retenciones #
422+
423+ Este servicio se utiliza para cancelar retenciones, aquí los métodos que se ofrecen:
424+
425+ <details >
426+ <summary >
427+ Cancelación de Retenciones por CSD
428+ </summary >
429+ Como su nombre lo indica, este método recibe todos los elementos que componen el CSD los cuales son los siguientes:
430+
431+ - Certificado (.cer) en Base64
432+ - Key (.key) en Base64
433+ - RFC emisor
434+ - Password del archivo key
435+ - UUID
436+ - Motivo
437+ - Folio Sustitución (requerido sólo cuando Motivo es 01)
438+
439+ ** Ejemplo de consumo de la librería para cancelar retenciones con CSD**
440+
441+ ``` java
442+ package com.mycompany.examplereadme ;
443+
444+ import Exceptions.AuthException ;
445+ import Exceptions.GeneralException ;
446+ import Services.CancelationRetention.SWCancelationRetentionService ;
447+ import Utils.Responses.Cancelation.CancelationResponse ;
448+ import java.io.IOException ;
449+
450+ public class ExampleReadme {
451+
452+ public static void main (String [] args ) {
453+ try {
454+ // Instancia del servicio y autenticación
455+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" user" , " password" , " https://services.test.sw.com.mx" );
456+ CancelationResponse response = null ;
457+ // Paso de datos de cancelación
458+ response = (CancelationResponse ) sdk. Cancelation (" uuid" , " password_csd" , " rfc" , " b64Cer" , " b64Key" , " motivo" , " folio_sustitucion" );
459+ // Muestra los resultados
460+ System . out. println(response. Status );
461+ System . out. println(response. HttpStatusCode );
462+ System . out. println(response. acuse);
463+ System . out. println(response. uuid);
464+ System . out. println(response. uuidStatusCode);
465+ // En caso de obtener un error, este puede obtenerse de los campos
466+ System . out. println(response. message);
467+ System . out. println(response. messageDetail);
468+ } catch (AuthException | GeneralException | IOException e) {
469+ System . out. println(e);
470+ }
471+
472+ }
473+ }
474+ ```
475+
476+ ** Cancelar retenciones con CSD utilizando token**
477+
478+ ``` java
479+ // Basta con sustituir esta linea en el ejemplo anterior, colocarás el token de tu cuenta y la URL base del ambiente que requieres acceder
480+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" tokenUser" , " https://services.test.sw.com.mx" );
481+ ```
482+ </details >
483+
484+ <details >
485+ <summary >
486+ Cancelación de Retenciones por PFX
487+ </summary >
488+
489+ Este método recibe los siguientes parámetros:
490+
491+ - Archivo PFX en Base64
492+ - RFC emisor
493+ - Password de PFX
494+ - UUID
495+ - Motivo
496+ - Folio Sustitución (requerido sólo cuando Motivo es 01)
497+
498+ ** Ejemplo de consumo de la librería para cancelar retenciones con PFX**
499+
500+ ``` java
501+ package com.mycompany.examplereadme ;
502+
503+ import Exceptions.AuthException ;
504+ import Exceptions.GeneralException ;
505+ import Services.CancelationRetention.SWCancelationRetentionService ;
506+ import Utils.Responses.Cancelation.CancelationResponse ;
507+ import java.io.IOException ;
508+
509+ public class ExampleReadme {
510+
511+ public static void main (String [] args ) {
512+ try {
513+ // Instancia del servicio y autenticación
514+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" user" , " password" , " https://services.test.sw.com.mx" );
515+ CancelationResponse response = null ;
516+ // Paso de datos de cancelación
517+ response = (CancelationResponse ) sdk. Cancelation (" uuid" , " password_pfx" , " rfc" , " pfxb64" , " motivo" , " folio_sustitucion" );
518+ // Muestra los resultados
519+ System . out. println(response. Status );
520+ System . out. println(response. HttpStatusCode );
521+ System . out. println(response. acuse);
522+ System . out. println(response. uuid);
523+ System . out. println(response. uuidStatusCode);
524+ // En caso de obtener un error, este puede obtenerse de los campos
525+ System . out. println(response. message);
526+ System . out. println(response. messageDetail);
527+ } catch (AuthException | GeneralException | IOException e) {
528+ System . out. println(e);
529+ }
530+
531+ }
532+ }
533+ ```
534+
535+ ** Cancelar retenciones con PFX utilizando token**
536+
537+ ``` java
538+ // Basta con sustituir esta linea en el ejemplo anterior, colocarás el token de tu cuenta y la URL base del ambiente que requieres acceder
539+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" tokenUser" , " https://services.test.sw.com.mx" );
540+ ```
541+ </details >
542+
543+ <details >
544+ <summary >
545+ Cancelación de Retenciones por XML
546+ </summary >
547+
548+ Este método recibe únicamente el XML sellado con los UUID a cancelar.
549+
550+ ** Ejemplo de XML para cancelar retenciones**
551+ ``` xml
552+ <?xml version =" 1.0" encoding =" utf-8" ?>
553+ <Cancelacion xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
554+ xmlns : xsd =" http://www.w3.org/2001/XMLSchema"
555+ Fecha =" 2025-08-31T01:57:44"
556+ RfcEmisor =" EKU9003173C9"
557+ xmlns =" http://www.sat.gob.mx/esquemas/retencionpago/1" >
558+ <Folios >
559+ <Folio UUID =" 3044cc3f-572f-4535-85e2-374c205f5b11" Motivo =" 02" FolioSustitucion =" " />
560+ </Folios >
561+ <Signature xmlns =" http://www.w3.org/2000/09/xmldsig#" >
562+ <!-- ... contenido de la firma ... -->
563+ </Signature >
564+ </Cancelacion >
565+ ```
566+
567+ Para caso de motivo 01 deberá añadir el atributo "FolioSustitucion" dentro del Nodo
568+ ** Ejemplo nodo Folio motivo 01**
569+ ``` xml
570+ <Folios >
571+ <Folio UUID =" 3044cc3f-572f-4535-85e2-374c205f5b11" Motivo =" 01" FolioSustitucion =" b3641a4b-7177-4323-aaa0-29bd34bf1ff8" />
572+ </Folios >
573+ ```
574+
575+ ** Ejemplo de consumo de la librería para cancelar retenciones por XML**
576+
577+ ``` java
578+ package com.mycompany.examplereadme ;
579+
580+ import Exceptions.AuthException ;
581+ import Exceptions.GeneralException ;
582+ import Services.CancelationRetention.SWCancelationRetentionService ;
583+ import Utils.Responses.Cancelation.CancelationResponse ;
584+ import java.io.IOException ;
585+
586+ public class ExampleReadme {
587+
588+ public static void main (String [] args ) {
589+ try {
590+ // Instancia del servicio y autenticación
591+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" user" , " password" , " https://services.test.sw.com.mx" );
592+ CancelationResponse response = null ;
593+ // Paso de XML de cancelación
594+ response = (CancelationResponse ) sdk. Cancelation (" xmlCancelacion" );
595+ // Muestra los resultados
596+ System . out. println(response. Status );
597+ System . out. println(response. HttpStatusCode );
598+ System . out. println(response. acuse);
599+ System . out. println(response. uuid);
600+ System . out. println(response. uuidStatusCode);
601+ // En caso de obtener un error, este puede obtenerse de los campos
602+ System . out. println(response. message);
603+ System . out. println(response. messageDetail);
604+ } catch (AuthException | GeneralException | IOException e) {
605+ System . out. println(e);
606+ }
607+
608+ }
609+ }
610+ ```
611+
612+ ** Cancelar retenciones por XML utilizando token**
613+
614+ ``` java
615+ // Basta con sustituir esta linea en el ejemplo anterior, colocarás el token de tu cuenta y la URL base del ambiente que requieres acceder
616+ SWCancelationRetentionService sdk = new SWCancelationRetentionService (" tokenUser" , " https://services.test.sw.com.mx" );
617+ ```
618+ </details >
619+
421620
422621# Validación #
423622
@@ -2479,7 +2678,7 @@ namespace ExampleReadme
24792678 <summary >Emisión Timbrado (IssueV4)</summary >
24802679
24812680 ** Ejemplo del consumo de la librería para el servicio IssueV4 (PDF) Json en formato string mediante usuario y contraseña.**
2482- ``` cs
2681+ ``` java
24832682
24842683import Services.Issue.SWIssueService ;
24852684import Utils.Responses.Stamp.SuccessV1Response ;
@@ -2546,7 +2745,72 @@ public class ExampleReadme {
25462745 SWIssueServiceV4 stamp = new SWIssueServiceV4 (" tokenUser" , " http://services.test.sw.com.mx" );
25472746```
25482747</details >
2549- ----------------
2748+
2749+ # Timbrado Retenciones #
2750+ <details ><summary ><b >Timbrado Retenciones</b ></summary >
2751+
2752+ <br >Recibe el contenido de un XML ya emitido (sellado) en formato String, posteriormente si la factura y el token son correctos devuelve el CFDI timbrado, en caso contrario lanza una excepción.
2753+
2754+ Este método recibe los siguientes parámetros:
2755+ * Archivo en formato ** String** ó ** Base64**
2756+ * Usuario y contraseña ó Token
2757+ * Url Servicios SW
2758+
2759+ ** Ejemplo de consumo de la librería para timbrar XML en formato string utilizando usuario y contraseña**
2760+ ``` java
2761+ import Utils.Responses.StampRetention.SuccessV3Response ;
2762+ import Services.StampRetention.SWStampRetentionService ;
2763+
2764+ public class ExampleReadme {
2765+ public static void main (String [] args ) {
2766+ try {
2767+ // Inicializar el objeto con la información de la cuenta y especifica la URL base para acceder al entorno deseado
2768+ SWStampRetentionService api = new SWStampRetentionService (" user" , " password" , " http://services.test.sw.com.mx" );
2769+ // Inicializar un objeto de respuesta para almacenar la respuesta
2770+ SuccessV3Response response = null ;
2771+ // Se llama al método StampRetention y se envia el xml y versión de respuesta
2772+ response = (SuccessV3Response ) api. StampRetention (stringXML, " v3" );
2773+ // En response se mostrará la informacion de respuesta del servicio
2774+ System . out. println(response. Status );
2775+ System . out. println(response. HttpStatusCode );
2776+ System . out. println(response. retencion);
2777+ } catch (Exception e) {
2778+ e. printStackTrace();
2779+ }
2780+ }
2781+ }
2782+ ```
2783+
2784+ ** Ejemplo de consumo de la librería para timbrar XML en formato string utilizando token** [ ¿Como obtener token?] ( http://developers.sw.com.mx/knowledge-base/generar-un-token-infinito/ )
2785+ ``` java
2786+ import Utils.Responses.StampRetention.SuccessV3Response ;
2787+ import Services.StampRetention.SWStampRetentionService ;
2788+
2789+ public class ExampleReadme {
2790+ public static void main (String [] args ) {
2791+ try {
2792+ // Inicializar el objeto con la información del token de acceso y especifica la URL base para acceder al entorno deseado
2793+ SWStampRetentionService api = new SWStampRetentionService (" tokenUser" , " http://services.test.sw.com.mx" );
2794+ // Inicializar un objeto de respuesta para almacenar la respuesta
2795+ SuccessV3Response response = null ;
2796+ // Se llama al método StampRetention y se envia el xml y versión de respuesta
2797+ response = (SuccessV3Response ) api. StampRetention (stringXML, " v3" );
2798+ // En response se mostrará la informacion de respuesta del servicio
2799+ System . out. println(response. Status );
2800+ System . out. println(response. HttpStatusCode );
2801+ System . out. println(response. retencion);
2802+ } catch (Exception e) {
2803+ e. printStackTrace();
2804+ }
2805+ }
2806+ }
2807+ ```
2808+
2809+ </details >
2810+
2811+ | Version | Respuesta |
2812+ | ---------| ---------------------------------------------------------------|
2813+ | V3 | Devuelve el CFDI timbrado |
25502814
25512815
25522816Para mayor referencia de un listado completo de los servicios favor de visitar nuestro [ sitio developers] ( https://developers.sw.com.mx/ ) .
0 commit comments