Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.accio.cash.ws.server.handle;
- import br.com.accio.cash.domain.core.Operacao;
- import co.aditum.mobilesdk.ConsoleLogger;
- import co.aditum.mobilesdk.IPinpad;
- import co.aditum.mobilesdk.ITransactionProvider;
- import co.aditum.mobilesdk.TransactionProvider;
- import co.aditum.mobilesdk.desktop.DesktopConfigurationManager;
- import co.aditum.mobilesdk.desktop.DesktopPinpadProvider;
- import co.aditum.mobilesdk.gateway.AditumGateway;
- import co.aditum.mobilesdk.gateway.IGateway;
- import co.aditum.mobilesdk.gateway.models.aditum.getTables.GetTablesResponse;
- import co.aditum.mobilesdk.logger.AditumLogger;
- import co.aditum.mobilesdk.models.AditumResultEnum;
- import co.aditum.mobilesdk.models.MessageTypesEnum;
- import co.aditum.mobilesdk.models.TransactionParameters;
- import co.aditum.mobilesdk.models.TransactionResult;
- import co.aditum.mobilesdk.models.callbacks.ITransactionCallbacks;
- import co.aditum.mobilesdk.models.callbacks.MenuTypeEnum;
- import co.aditum.mobilesdk.models.callbacks.ReceiptTypeEnum;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import java.io.IOException;
- import java.util.List;
- import java.util.UUID;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Component;
- import org.springframework.web.socket.TextMessage;
- import org.springframework.web.socket.WebSocketSession;
- import org.springframework.web.socket.handler.TextWebSocketHandler;
- @Component
- @Slf4j
- public class PinPadHandle extends TextWebSocketHandler {
- public static int DEBITO = 1;
- public static int PAY = 1;
- public static int STATUS_OK = 0;
- public static int STATUS_ERROR = 1;
- private Operacao operacao = null;
- public static final String ADITUM_GATEWAY_ENDPOINT = "http://api-dev.aditum.co/v1";
- //public static final String ADITUM_GATEWAY_ENDPOINT = "http://localhost:61449/v1";
- public static final String MERCHANT_KEY = "mk_bmaQn7lvuUmRam02d3kEDg";
- IPinpad abecsPinpad = null;
- static {
- try {
- //abecsPinpad = DesktopPinpadProvider.getPinpad();
- } catch (Exception e) {
- log.debug("Error", e);
- }
- }
- @Override
- public void handleTextMessage(WebSocketSession session, TextMessage message)
- throws InterruptedException, IOException {
- ObjectMapper mapper = new ObjectMapper();
- System.out.println(" -- ADITUM APLICACAO DE EXEMPLO -- \n");
- ConsoleLogger consoleLogger = new ConsoleLogger();
- IGateway aditumGateway = null;
- ITransactionProvider transactionProvider = null;
- IPinpad abecsPinpad = null;
- // Create Aditum SDK main classes:
- try {
- // Create desktop implementation. This allows Aditum SDK to be used in a desktop environment.
- abecsPinpad = DesktopPinpadProvider.getPinpad();
- // Create AditumGateway implementation, responsible for sending and receiving messages with
- // Aditum's Gateway.
- aditumGateway = new AditumGateway(ADITUM_GATEWAY_ENDPOINT, MERCHANT_KEY);
- // Create class responsible for the entire transaction flow (pinpad communication, gateway
- // interaction and callbacks).
- transactionProvider =
- new TransactionProvider(abecsPinpad, aditumGateway, new DesktopConfigurationManager());
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
- try {
- String payload = message.getPayload();
- log.debug("CardReader - PAYLOAD: " + payload);
- operacao = mapper.readValue(payload, Operacao.class);
- AditumLogger.setLogger(consoleLogger);
- // Authorize a transaction:
- pay(transactionProvider, abecsPinpad, operacao.getTransacao().getValorCarga(), session);
- } catch (Exception e) {
- log.error("ERROR", e);
- operacao.setStatus(STATUS_ERROR);
- operacao.setMensagem("Falha na comunição com o serviço de autorização!");
- }
- }
- private void pay(ITransactionProvider transactionProvider, IPinpad abecsPinpad,
- long transactionAmount, WebSocketSession session) {
- ObjectMapper mapper = new ObjectMapper();
- // Class responsible for handle terminal configurations:
- DesktopConfigurationManager desktopConfigurationManager = new DesktopConfigurationManager();
- // Get last EMV table download:
- GetTablesResponse getTablesResponse = desktopConfigurationManager.getActivationData();
- // Generate new transaction key:
- String transactionKey = UUID.randomUUID().toString();
- System.out.printf("Transaction key: '%s'\n", transactionKey);
- // long transactionAmount = getTransactionAmount();
- System.out.printf("Transaction amount: '%d'\n", transactionAmount);
- // Create transaction parameters:
- TransactionParameters transactionParameters = new TransactionParameters(transactionAmount,
- getTablesResponse.emvTables[0], transactionKey);
- // Begin transaction flow:
- transactionProvider.transact(transactionParameters, new ITransactionCallbacks() {
- // Callback used to update transaction status.
- @Override
- public void showMessage(MessageTypesEnum type, String message) {
- System.out.printf("Message: %s\n", message);
- }
- // Basic console menu used to select transaction type and installment details:
- @Override
- public int menuShow(MenuTypeEnum menuType, String title, List<String> lsOpts) {
- return DEBITO;
- }
- // Method called at the end of the transaction.
- // If the transaction was successfull, argument 'result' will be set to
- // AditumResultEnum.TRANSACTION_APPROVED. In
- // this case, argument 'data' will contain transaction information.
- // Otherwise, if argument 'result' is not set to AditumResultEnum.TRANSACTION_APPROVE, the
- // argument 'data' will
- // contain transaction error details.
- @Override
- public void onFinished(AditumResultEnum result, Object data) {
- try {
- System.out.printf("Result: %d - %s\n", result.getCode(), result.getMessage());
- if (result == AditumResultEnum.TRANSACTION_APPROVED) {
- TransactionResult transactionResult = (TransactionResult) data;
- System.out.printf("Transaction Result: \n %s \n", transactionResult.toString());
- operacao.setStatus(STATUS_OK);
- session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
- } else if (result == AditumResultEnum.TRANSACTION_DENNIED) {
- operacao.setStatus(STATUS_ERROR);
- operacao.setMensagem("Não Autorizado!");
- session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
- } else {
- operacao.setStatus(STATUS_ERROR);
- operacao.setMensagem("Falha na comunição com o serviço de autorização!");
- session.sendMessage(new TextMessage(mapper.writeValueAsString(operacao)));
- }
- } catch (Exception e) {
- log.error("Error", e);
- }
- }
- // If transaction amount is not set, this callback is used to get transaction amount in
- // execution time, after
- // card reading. This could be useful in a vending machine context.
- @Override
- public long getAmount() {
- // Intentionally not implemented.
- return transactionAmount;
- }
- // Responsible for print, show or send transaction receipt.
- @Override
- public void printReceipt(ReceiptTypeEnum receiptType, String data) {
- System.out.println(data);
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement