Transbank
Medio de Pago Transbank
Que se usara
Section titled “Que se usara”- Firebase Functions.
- Handlebars
- Axios
Conciliacion
Section titled “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
Primero ver el diagrama de flujo que esta abajo (Diagrama producto Webpay) y luego seguir:
Creacion de la estructura en BD
Section titled “Creacion de la estructura en BD”- order: frank123
- amount: 1000
- so: “android”
Estructura de la peticion
Section titled “Estructura de la peticion”// Versión 3.x del SDKimport 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 SDKimport cl.transbank.webpay.webpayplus.WebpayPlus;
final WebpayPlusTransactionCreateResponse response = WebpayPlus.Transaction.create( buyOrder, sessionId, amount, returnUrl);Equivalencia en NodeJs

Mecanica de Trabajo. Pagina Web
Section titled “Mecanica de Trabajo. Pagina Web”Se hace uso de una pagina web para procesar el transbank, me refiero a esto:

Entonces se ha de crar una pagina web para procesar esto.
Flutter
Section titled “Flutter”Problemas con IOS
Section titled “Problemas con IOS”- Paquete URL Launcher.
- Irse a la misma URL en Safari.
- Se debe instalar https://pub.dev/packages/flutter_inappwebview
Testing
Section titled “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
Section titled “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.
- Subdominio: devp.limachelocales.cl
- IP: 192.168.100.3
- Puerto: 8080
- https://devp.limachelocales.cl/transbank/oneclick
devp quiere decir desarrollo pasarela de pago.
Anexos
Section titled “Anexos”Construccion del Backend
Section titled “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
Section titled “Datos de produccion e integracion”Integracion
Section titled “Integracion” TEST_MODE: { url: "https://webpay3gint.transbank.cl", tbkApiKeyId: "597055555541", tbkApiKeySecret: "579B532A70BD0A36B1C", responseUrl: "https://tellevoapp.cl/tbk/return_inscription", userName: "tellevoU", mallCode: "597055555542", },Produccion
Section titled “Produccion” PROD_MODE: { url: "https://webpay3g.transbank.cl", tbkApiKeyId: "597049402835", tbkApiKeySecret: "88882323-e953-234234-a65d-008997e51e86", responseUrl: "https://tellevoapp.cl/tbk/return_inscription", userName: "tellevoU", mallCode: "597049402853",
}Tarjetas de pruebas
Section titled “Tarjetas de pruebas”Ejemplos:
- VISA
- 4051 8856 0044 6623
- CVV 123
- cualquier fecha de expiración
- Genera transacciones aprobadas.
Pom.xml
Section titled “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>