All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cl.transbank.pos.POSIntegrado Maven / Gradle / Ivy

package cl.transbank.pos;

import cl.transbank.pos.exceptions.common.TransbankException;
import cl.transbank.pos.exceptions.common.TransbankLoadKeysException;
import cl.transbank.pos.exceptions.common.TransbankRefundException;
import cl.transbank.pos.exceptions.integrado.*;
import cl.transbank.pos.responses.common.LoadKeysResponse;
import cl.transbank.pos.responses.common.RefundResponse;
import cl.transbank.pos.responses.integrado.*;
import cl.transbank.pos.utils.Serial;
import lombok.extern.log4j.Log4j2;

import java.util.ArrayList;
import java.util.List;

@Log4j2
@SuppressWarnings({"unused", "UnusedReturnValue"})
public class POSIntegrado extends Serial {
    public boolean poll() throws TransbankException {
        try {
            checkCanWrite();
            String command = createCommand("0100");
            byte[] hexCommand = command.getBytes();

            log.debug(String.format("Request [Hex]: %s", toHexString(hexCommand)));
            log.debug(String.format("Request [ASCII]: %s", command));

            port.writeBytes(hexCommand, hexCommand.length);
            return checkAck();

        } catch (TransbankException e) {
            throw new TransbankException("Unable to send Poll command on port", e);
        }
    }

    public boolean setNormalMode() throws TransbankException {
        try {
            String command = createCommand("0300");
            byte[] hexCommand = command.getBytes();

            log.debug(String.format("Request [Hex]: %s", toHexString(hexCommand)));
            log.debug(String.format("Request [ASCII]: %s", command));

            port.writeBytes(hexCommand, hexCommand.length);
            return checkAck();

        } catch (TransbankException e) {
            throw new TransbankException("Unable to send Normal Mode command on port", e);
        }
    }

    public LoadKeysResponse loadKeys() throws TransbankLoadKeysException {
        try {
            write("0800");
            LoadKeysResponse response = new LoadKeysResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankLoadKeysException("Unable to execute load keys in pos", e);
        }
    }

    public SaleResponse sale(int amount, String ticket, boolean sendStatus) throws TransbankSaleException {
        if (amount < 50) throw new TransbankSaleException("Amount must be greater than 50.");
        if (amount > 999999999) throw new TransbankSaleException("Amount must be less than 999999999.");
        if (ticket.trim().length() > 6) throw new TransbankSaleException("Ticket must be up to 6 in length");

        String command = String.format("0200|%s|%s|||%s|", amount, ticket, sendStatus ? 1 : 0);

        try {
            write(command, sendStatus);
            SaleResponse response = new SaleResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankSaleException("Unable to execute sale on pos", e);
        }
    }

    public MultiCodeSaleResponse multiCodeSale(int amount, String ticket, long commerceCode, boolean sendStatus) throws TransbankMultiCodeSaleException {
        if (amount < 50) throw new TransbankMultiCodeSaleException("Amount must be greater than 50.");
        if (amount > 999999999) throw new TransbankMultiCodeSaleException("Amount must be less than 999999999.");
        if (ticket.trim().length() > 6) throw new TransbankMultiCodeSaleException("Ticket must be up to 6 in length");

        String command = String.format("0270|%s|%s|||%s|%s|", amount, ticket, sendStatus ? 1 : 0, commerceCode);

        try {
            write(command, sendStatus);
            MultiCodeSaleResponse response = new MultiCodeSaleResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankMultiCodeSaleException("Unable to execute sale on pos", e);
        }
    }

    public LastSaleResponse lastSale() throws TransbankLastSaleException {
        try {
            write("0250|");
            LastSaleResponse response = new LastSaleResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankLastSaleException("Unable to recover last sale from pos", e);
        }
    }

    public MultiCodeLastSaleResponse multiCodeLastSale(boolean sendVoucher) throws TransbankMultiCodeLastSaleException {
        String command = String.format("0280|%s", sendVoucher ? 1 : 0);

        try {
            write(command);
            MultiCodeLastSaleResponse response = new MultiCodeLastSaleResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankMultiCodeLastSaleException("Unable to recover last sale from pos", e);
        }
    }

    public RefundResponse refund(int operationId) throws TransbankRefundException {
        String command = String.format("1200|%s|", operationId);

        try {
            write(command);
            RefundResponse response = new RefundResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankRefundException("Unable to make refund on pos", e);
        }
    }

    public TotalsResponse totals() throws TransbankTotalsException {
        try {
            write("0700||");
            TotalsResponse response = new TotalsResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankTotalsException("Unable to get totals from pos", e);
        }
    }

    public List details(boolean printOnPOS) throws TransbankDetailException {
        String command = String.format("0260|%s|", printOnPOS ? 0 : 1);
        List details = new ArrayList<>();

        try {
            write(command, false, true, printOnPOS);
            for (String sale : saleDetailResponse) {
                DetailResponse saleDetail = new DetailResponse(sale);
                details.add(saleDetail);
                log.debug(saleDetail.toString());
            }
            return details;
        } catch (TransbankException e) {
            throw new TransbankDetailException("Unable to request sale detail on pos", e);
        }
    }

    public List multiCodeDetails(boolean printOnPOS) throws TransbankMultiCodeDetailException {
        String command = String.format("0260|%s|", printOnPOS ? 0 : 1);
        List details = new ArrayList<>();

        try {
            write(command, false, true, printOnPOS);
            for (String sale : saleDetailResponse) {
                MultiCodeDetailResponse saleDetail = new MultiCodeDetailResponse(sale);
                details.add(saleDetail);
                log.debug(saleDetail.toString());
            }
            return details;
        } catch (TransbankException e) {
            throw new TransbankMultiCodeDetailException("Unable to request sale detail on pos", e);
        }
    }

    public CloseResponse close() throws TransbankCloseException {
        try {
            write("0500||");
            CloseResponse response = new CloseResponse(currentResponse);
            log.debug(response.toString());
            return response;
        } catch (TransbankException e) {
            throw new TransbankCloseException("Unable to execute close in pos", e);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy