Skip to content

Transbank

Que se usara

  • Firebase Functions.
  • Handlebars
  • Axios

Conciliacion

Es cuando tienes que devolver una vez al mes el dinero a los comercios. Fuera de tu comision. Cuchky.

Transbank concilia por ti

Tiene la tasa de cobro mas baja del mercado

Flujo

Primero ver el diagrama de flujo que esta abajo (Diagrama producto Webpay) y luego seguir:

Creacion de la estructura en BD

  • order: frank123
  • amount: 1000
  • so: “android”

Estructura de la peticion

// Versión 3.x del SDK
import cl.transbank.webpay.webpayplus.responses.WebpayPlusTransactionCreateResponse;
WebpayPlus.Transaction tx = new WebpayPlus.Transaction(new WebpayOptions(IntegrationCommerceCodes.WEBPAY_PLUS, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
final WebpayPlusTransactionCreateResponse response = tx.create(buyOrder, sessionId, amount, returnUrl);
// Versión 2.x del SDK
import cl.transbank.webpay.webpayplus.WebpayPlus;
final WebpayPlusTransactionCreateResponse response = WebpayPlus.Transaction.create(
buyOrder, sessionId, amount, returnUrl
);

Equivalencia en NodeJs

Equivalencia codigo nodejs

Mecanica de Trabajo. Pagina Web

Se hace uso de una pagina web para procesar el transbank, me refiero a esto:

WebPay

Entonces se ha de crar una pagina web para procesar esto.

Flutter

Problemas con IOS

Testing

Para testing se recomienda utilizar un identificador unico

buy_order: buy_order=tellevo-12345

Notar que el video lo hace por webpay y nosotros tenemos oneclick asi que los parametros vienen siendo diferentes.

Segun la documentacion y el codigo que esta funcionando, tenemos que el codigo esta autorizando una transaccion

https://transbankdevelopers.cl/referencia/oneclick#autorizar-una-transaccion

Pero los pasos son:

  • Create an enrollment
  • Elegir el medio de pago

Create an enrollment

Esto lo que hace es gatillar un servicio de transbank y arrojar una pagina web de destino y un token de un uso de 5 minutos.

Esto se debe enviar de vuelta para una pagina web que tendra un formulario con la pagina web que devolvio y el token.

Entonces la pagina web debe tener lo siguiente

<form method="post" action="{{urlWebpay}}">
<input type="hidden" name="TBK_TOKEN" value="{{tbkToken}}" />
<input type="submit" value="Ir a pagar" />
</form>

Donde urlWebpay y tbkToken vienen de una api o bien codigo que genera estos valores.

El codigo en java que permite generar esto es como sigue:

Oneclick.MallInscription inscription = new Oneclick.MallInscription(new WebpayOptions(IntegrationCommerceCodes.ONECLICK_MALL, IntegrationApiKeys.WEBPAY, IntegrationType.TEST));
TransbankResponseEnrollment responseDTO;
try {
final OneclickMallInscriptionStartResponse response = inscription.start(request.getUsername(), request.getEmail(), request.getResponseUrl());
String url_webpay = response.getUrlWebpay();
String tbk_token = response.getToken();
responseDTO = new TransbankResponseEnrollment(url_webpay, tbk_token);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InscriptionStartException e) {
throw new RuntimeException(e);
}

Esta libreria se saca de

<dependency>
<groupId>com.github.transbankdevelopers</groupId>
<artifactId>transbank-sdk-java</artifactId>
<version>5.0.0</version>
</dependency>

Cloudflare y Git

El proyecto ya lo dejamos en GitHub.

En Cloudflare, para motivos de desarrollo, abriremos un canal para el proyecto de pasarela de pago como desarrollo.

devp quiere decir desarrollo pasarela de pago.

Anexos

Construccion del Backend

Aplicacion Java 21, Maven con las siguientes librerias:

  • Spring Web
  • Spring Data JPA
  • Spring Configurator Processor
  • Lombok
  • Spring Dev Tools
  • Java Mail Sender
  • Spring Boot Actuator
  • Spring Reactive Web
  • Mustache

Spring Reactive Web para WebClient y Mustache como Template Engine.

Datos de produccion e integracion

Integracion

TEST_MODE: {
url: "https://webpay3gint.transbank.cl",
tbkApiKeyId: "597055555541",
tbkApiKeySecret: "579B532A7440BB0C9079DED94D31EA1615BACEB56610332264630D42D0A36B1C",
responseUrl: "https://tellevoapp.cl/tbk/return_inscription",
userName: "tellevoU",
mallCode: "597055555542",
},

Produccion

PROD_MODE: {
url: "https://webpay3g.transbank.cl",
tbkApiKeyId: "597049402835",
tbkApiKeySecret: "64df76fd-e953-4a71-a65d-008997e51e86",
responseUrl: "https://tellevoapp.cl/tbk/return_inscription",
userName: "tellevoU",
mallCode: "597049402853",
}

Tarjetas de pruebas

Ejemplos:

  • VISA
  • 4051 8856 0044 6623
  • CVV 123
  • cualquier fecha de expiración
  • Genera transacciones aprobadas.

Notas

Pom.xml

pom.xml del proyecto

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.11</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cl.tellevo.app</groupId>
<artifactId>pasarela-pago</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>pasarela-pago</name>
<description>Todo lo relacionado con los pagos en Te Llevo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mustache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>