SDK oficial de Java 21 para PlaceToPay Web Checkout.
Esta libreria te ayuda a integrar pagos con una experiencia directa: crear la sesion de pago, redirigir al comprador y consultar el estado final de la transaccion desde tu backend.
Terminología estándar del proyecto: ver ../docs/GLOSARIO.md.
Si vienes del SDK legacy de Java, revisa
MIGRATION.mdpara mapear metodos y modelos.
<dependency>
<groupId>com.placetopay</groupId>
<artifactId>checkout-sdk</artifactId>
<version>1.0.0</version>
</dependency>dependencies {
implementation("com.placetopay:checkout-sdk:1.0.0")
}dependencies {
implementation 'com.placetopay:checkout-sdk:1.0.0'
}Requiere Java 21 LTS o superior.
| Versión SDK | Java | Estado | Parches de seguridad hasta |
|---|---|---|---|
1.x |
21, 25 (LTS) | Actual | Alineado al EOL de Java 21 (septiembre 2028) |
0.x |
- | Pre-release | End-of-life |
Política
- Soportamos el LTS actual y el LTS anterior.
- Cambios breaking solo en major.
- Java 17 o anterior no está soportado.
Con este ejemplo puedes iniciar una sesion y obtener el processUrl para
enviar al comprador al checkout de PlaceToPay.
import com.placetopay.checkout.Checkout;
import com.placetopay.checkout.Country;
import com.placetopay.checkout.Environment;
import com.placetopay.checkout.model.common.Amount;
import com.placetopay.checkout.model.session.CreateSessionRequest;
import com.placetopay.checkout.model.session.CreateSessionResponse;
import com.placetopay.checkout.model.session.Payment;
import com.placetopay.checkout.model.session.SessionInformation;
Checkout checkout = Checkout.builder()
.login("YOUR_LOGIN")
.secretKey("YOUR_SECRET_KEY")
.environment(Environment.SANDBOX)
.country(Country.COLOMBIA)
.build();
CreateSessionResponse response = checkout.createSession(
CreateSessionRequest.builder()
.ipAddress("127.0.0.1")
.userAgent("MyApp/1.0")
.returnUrl("https://example.com/return")
.payment(Payment.builder()
.reference("ORDER-0001")
.description("Demo purchase")
.amount(new Amount("COP", 50_000d, null, null))
.build())
.build());
System.out.println(response.processUrl());
System.out.println(response.requestId());Después del pago:
SessionInformation info = checkout.querySession(response.requestId());
if (info.status().status() == StatusCode.APPROVED) {
// completar orden
}| Endpoint | Método | Notas |
|---|---|---|
POST /api/session |
createSession |
Soporta autopay, metadata, dispersion |
POST /api/session/{id} |
querySession |
|
POST /api/session/{id}/cancel |
cancelSession |
Nuevo vs SDK legacy |
POST /api/collect |
collect |
Cobro con instrumento tokenizado |
POST /api/reverse |
reverse |
Por internalReference |
POST /api/instrument/invalidate |
invalidateToken |
Revoca token |
| Verificación webhook SHA-256 | NotificationVerifier.verifySha256 |
Recomendado |
| Verificación webhook SHA-1 | NotificationVerifier.verifySha1Legacy |
Solo compatibilidad legacy |
Flujo de sesion (checkout web):
createSessionpara iniciar el checkout y obtenerrequestId+processUrl.querySessionpara confirmar estado despues del retorno del pagador.cancelSessionpara invalidar una sesion pendiente cuando aplica.
Flujo de tokenizacion y post-pago:
collectpara cobrar con instrumento tokenizado.reversepara reversar porinternalReference.invalidateTokenpara revocar el token.
- Soporte de
auth.additionalviaCheckoutConfig.Builder.authAdditional(Map). - Soporte de
CollectRequest.providerpara override opcional de procesador. - Helpers de estado en
StatusyTransaction(isApproved,isRejected,isError,isSuccessful). - Helpers de sesion en
SessionInformation(lastTransaction,lastApprovedTransaction,lastAuthorization). - Compatibilidad con valores heterogeneos en
processorFields[].value.
- Checkout estandar en web con redireccion (
createSession+querySession). - Cobro con token guardado (
collect) para compras recurrentes. - Reversion de pagos (
reverse) y revocacion de token (invalidateToken).
- Ecuador: la funcionalidad
autopayno esta habilitada en WebCheckout para este pais. Si se envia encreateSession, puede ser rechazada por el gateway. - Ecuador: la recurrencia en pago unico no esta disponible actualmente.
- En respuestas de
querySession/collect,payment[].processorFields[].valuepuede llegar comostring,number,booleanu objeto JSON. - El SDK modela ese campo como valor heterogeneo para evitar fallos de parseo cuando el procesador envia metadatos no-string.
CheckoutConfig.Builder:
| Método | Default | Uso |
|---|---|---|
login(String) |
requerido | Login de comercio |
secretKey(String) |
requerido | Secret de comercio |
environment(Environment) |
SANDBOX |
SANDBOX o PRODUCTION |
country(Country) |
null |
COLOMBIA, ECUADOR, etc |
baseUrl(String) |
- | Override explícito (solo HTTPS) |
connectTimeout(Duration) |
10s | Timeout de conexión |
readTimeout(Duration) |
30s | Timeout de lectura |
retry(RetrySettings) |
exponencial | Retry con jitter |
userAgentSuffix(String) |
- | Sufijo user-agent |
additionalHeaders(Map) |
{} |
Headers extra |
httpClient(HttpClient) |
SDK-owned | Cliente inyectado |
Todas las excepciones heredan de PlaceToPayException:
AuthenticationExceptionValidationExceptionNotFoundExceptionRateLimitExceptionNetworkExceptionServerException
import com.placetopay.checkout.webhook.NotificationPayload;
import com.placetopay.checkout.webhook.NotificationVerifier;
@PostMapping("/placetopay/webhook")
ResponseEntity<Void> webhook(@RequestBody NotificationPayload payload) {
if (!NotificationVerifier.verifySha256(payload, secretKey)) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
}
return ResponseEntity.ok().build();
}Las notificaciones webhook de PlaceToPay están confirmadas sobre SHA-256.
El módulo examples/ es una app Spring Boot para probar los flujos de punta a punta. Ver examples/README.md.
export PLACETOPAY_LOGIN=your-login
export PLACETOPAY_SECRET_KEY=your-secret
./gradlew :examples:bootRun
# http://localhost:8080- Firma: SHA-256.
- Nonce: 16 bytes criptográficos via
SecureRandom. - TLS: HTTPS obligatorio.
- Logging: redacción automática de PAN, CVV,
tranKey,nonce, token, PIN y password. - Disclosure: ver SECURITY.md.
git clone https://github.com/placetopay/checkout-java.git
cd checkout-java
./gradlew :sdk:build
./gradlew :sdk:publishToMavenLocalVer CONTRIBUTING.md.
MIT, ver LICENSE.