Skip to content

Commit 3506a46

Browse files
authored
Merge pull request #115 from lunasoft/release/1.0.24.1
Release/1.0.24.1
2 parents 6c08839 + 4e2f40a commit 3506a46

File tree

18 files changed

+859
-25
lines changed

18 files changed

+859
-25
lines changed

README.md

Lines changed: 266 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

24842683
import Services.Issue.SWIssueService;
24852684
import 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

25522816
Para mayor referencia de un listado completo de los servicios favor de visitar nuestro [sitio developers](https://developers.sw.com.mx/).

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
77
</properties>
88
<artifactId>SW-JAVA</artifactId>
9-
<version>1.0.21.2</version>
9+
<version>1.0.24.1</version>
1010
<packaging>jar</packaging>
1111
<scm>
1212
<url>https://github.com/lunasoft/sw-sdk-java</url>
@@ -55,11 +55,11 @@
5555
<distributionManagement>
5656
<snapshotRepository>
5757
<id>ossrh</id>
58-
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
58+
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
5959
</snapshotRepository>
6060
<repository>
6161
<id>ossrh</id>
62-
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
62+
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
6363
</repository>
6464
</distributionManagement>
6565
<build>
@@ -96,11 +96,11 @@
9696
<plugin>
9797
<groupId>org.sonatype.plugins</groupId>
9898
<artifactId>nexus-staging-maven-plugin</artifactId>
99-
<version>1.6.7</version>
99+
<version>1.6.13</version>
100100
<extensions>true</extensions>
101101
<configuration>
102102
<serverId>ossrh</serverId>
103-
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
103+
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
104104
<autoReleaseAfterClose>true</autoReleaseAfterClose>
105105
</configuration>
106106
</plugin>
@@ -208,7 +208,7 @@
208208
<plugin>
209209
<groupId>org.sonatype.plugins</groupId>
210210
<artifactId>nexus-staging-maven-plugin</artifactId>
211-
<version>1.6.7</version>
211+
<version>1.6.13</version>
212212
<extensions>true</extensions>
213213
<configuration>
214214
<serverId>ossrh</serverId>

src/main/java/Services/Cancelation/SWCancelationService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,25 @@ public SWCancelationService(String token, String URI, String proxyHost, int prox
3030
}
3131

3232
public IResponse Cancelation(String uuid, String password, String rfc, String b64Cer, String b64Key, String motivo, String folioSustitucion) throws AuthException, GeneralException, IOException {
33-
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, password, rfc, b64Cer, b64Key, motivo, folioSustitucion, getProxyHost(), getProxyPort());
33+
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, password, rfc, b64Cer, b64Key, motivo, folioSustitucion, false, getProxyHost(), getProxyPort());
3434
CancelationRequest req = new CancelationRequest();
3535
return req.sendRequest(settings);
3636
}
3737

3838
public IResponse Cancelation(String xml) throws AuthException, GeneralException, IOException {
39-
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), xml, getProxyHost(), getProxyPort());
39+
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), xml, false, getProxyHost(), getProxyPort());
4040
CancelationRequest req = new CancelationRequest();
4141
return req.sendRequestXml(settings, true);
4242
}
4343

4444
public IResponse Cancelation(String uuid, String password, String rfc, String b64Pfx, String motivo, String folioSustitucion) throws AuthException, GeneralException, IOException {
45-
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, password, rfc, b64Pfx, motivo, folioSustitucion, getProxyHost(), getProxyPort());
45+
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, password, rfc, b64Pfx, motivo, folioSustitucion, false, getProxyHost(), getProxyPort());
4646
CancelationRequest req = new CancelationRequest();
4747
return req.sendRequestPfx(settings);
4848
}
4949

5050
public IResponse Cancelation(String uuid, String rfc, String motivo, String folioSustitucion) throws AuthException, GeneralException, IOException {
51-
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, rfc, motivo, folioSustitucion, getProxyHost(), getProxyPort());
51+
CancelationOptionsRequest settings = new CancelationOptionsRequest(getToken(), getURI(), uuid, rfc, motivo, folioSustitucion, false, getProxyHost(), getProxyPort());
5252
CancelationRequest req = new CancelationRequest();
5353
return req.sendRequestUuid(settings);
5454
}

0 commit comments

Comments
 (0)