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 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
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
Problemas con IOS
- Paquete URL Launcher.
- Irse a la misma URL en Safari.
- Se debe instalar https://pub.dev/packages/flutter_inappwebview
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.
- 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
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>