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

me.pagar.model.Transaction Maven / Gradle / Ivy

The newest version!
package me.pagar.model;

import java.math.BigInteger;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.HttpMethod;

import org.joda.time.DateTime;

import com.google.common.base.CaseFormat;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import me.pagar.model.filter.PayableQueriableFields;
import me.pagar.util.JSONUtils;

public class Transaction extends PagarMeModel {

    @Expose(deserialize = false)
    private Boolean async;

    @Expose(deserialize = false)
    private Boolean capture;

    /**
     * Caso essa transação tenha sido originada na cobrança de uma assinatura, o
     * id desta será o valor dessa propriedade
     */
    @Expose(serialize = false)
    @SerializedName("subscription_id")
    private Integer subscriptionId;

    /**
     * Valor, em centavos, da transação
     */
    @Expose
    private Integer amount;

    /**
     * Valor refund, em centavos, da transação
     */
    @Expose
    @SerializedName("refunded_amount")
    private Integer refundedAmount;

    /**
     * Valor autorizado, em centavos, da transação
     */
    @Expose
    @SerializedName("authorized_amount")
    private Integer authorizedAmount;

    /**
     * Valor pago, em centavos, da transação
     */
    @Expose
    @SerializedName("paid_amount")
    private Integer paidAmount;

    /**
     * Número de parcelas/prestações a serem cobradas
     */
    @Expose
    private Integer installments;

    /**
     * Código de referência da transação
     */
    @Expose(deserialize = false)
    @SerializedName("reference_key")
    private String referenceKey;

    @Expose(deserialize = false)
    @SerializedName("card_id")
    private String cardId;

    @Expose(deserialize = false)
    @SerializedName("card_number")
    private String cardNumber;

    @Expose(deserialize = false)
    @SerializedName("card_holder_name")
    private String cardHolderName;

    @Expose(deserialize = false)
    @SerializedName("card_expiration_date")
    private String cardExpirationDate;

    @Expose(deserialize = false)
    @SerializedName("card_cvv")
    private String cardCvv;

    @Expose(deserialize = false)
    @SerializedName("card_emv_data")
    private String cardEmvData;

    @Expose
    @SerializedName("card_emv_response")
    private String cardEmvResponse;	

    @Expose(deserialize = false)
    @SerializedName("card_pin_mode")
    private String cardPinMode;

    @Expose(deserialize = false)
    @SerializedName("card_track_1")
    private String cardTrack1;

    @Expose(deserialize = false)
    @SerializedName("card_track_2")
    private String cardTrack2;

    @Expose(deserialize = false)
    @SerializedName("card_track_3")
    private String cardTrack3;

    @Expose(deserialize = false)
    @SerializedName("card_pin")
    private String cardPin;

    @Expose(deserialize = false)
    @SerializedName("card_pin_kek")
    private String cardPinKek;

    @Expose(deserialize = false)
    @SerializedName("local_time")
    private DateTime localTime;

    public String getCardNumber() {
        return cardNumber;
    }

    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
        addUnsavedProperty("cardNumber");
    }

    public String getCardHolderName() {
        return cardHolderName;
    }

    public void setCardHolderName(String cardHolderName) {
        this.cardHolderName = cardHolderName;
        addUnsavedProperty("cardHolderName");
    }

    public String getCardExpirationDate() {
        return cardExpirationDate;
    }

    public void setCardExpirationDate(String cardExpirationDate) {
        this.cardExpirationDate = cardExpirationDate;
        addUnsavedProperty("cardExpirationDate");
    }

    public String getCardCvv() {
        return cardCvv;
    }

    public void setCardCvv(String cardCvv) {
        this.cardCvv = cardCvv;
        addUnsavedProperty("cardCvv");
    }

    public String getCardEmvData() {
        return cardEmvData;
    }

    public void setCardEmvData(String cardEmvData) {
        this.cardEmvData = cardEmvData;
        addUnsavedProperty("cardEmvData");
    }

    public String getCardEmvResponse() {
        return cardEmvResponse;
    }

    public void setCardEmvResponse(String cardEmvResponse) {
        this.cardEmvResponse = cardEmvResponse;
        addUnsavedProperty("cardEmvResponse");
    }

    public String getCardTrack1() {
        return cardTrack2;
    }

    public void setCardTrack1(String cardTrack1) {
        this.cardTrack1 = cardTrack1;
        addUnsavedProperty("cardTrack1");
    }

    public String getCardTrack2() {
        return cardTrack2;
    }

    public void setCardTrack2(String cardTrack2) {
        this.cardTrack2 = cardTrack2;
        addUnsavedProperty("cardTrack2");
    }

    public String getCardTrack3() {
        return cardTrack3;
    }

    public void setCardTrack3(String cardTrack3) {
        this.cardTrack3 = cardTrack3;
        addUnsavedProperty("cardTrack3");
    }

    public String getCardPinMode() {
        return cardPinMode;
    }

    public void setCardPinMode(String cardPinMode) {
        this.cardPinMode = cardPinMode;
        addUnsavedProperty("cardPinMode");
    }

    public String getCardPin() {
        return cardPin;
    }

    public void setCardPin(String cardPin) {
        this.cardPin = cardPin;
        addUnsavedProperty("cardPin");
    }

    public String getCardPinKek() {
        return cardPinKek;
    }

    public void setCardPinKek(String cardPinKek) {
        this.cardPinKek = cardPinKek;
        addUnsavedProperty("cardPinKek");
    }

    public DateTime getLocalTime() {
        return localTime;
    }

    public void setLocalTime(DateTime localTime) {
        this.localTime = localTime;
        addUnsavedProperty("localTime");
    }

    /**
     * Custo da transação para o lojista
     */

    @Expose(serialize = false)
    private Integer cost;

    /**
     * Mensagem de resposta do adquirente referente ao status da transação.
     */
    @Expose(serialize = false)
    @SerializedName("acquirer_response_code")
    private String acquirerResponseCode;

    /**
     * Código de autorização retornado pela bandeira.
     */
    @Expose(serialize = false)
    @SerializedName("authorization_code")
    private String authorizationCode;

    /**
     * Texto que irá aparecer na fatura do cliente depois do nome da loja.
     * OBS: Limite de 13 caracteres.
     */
    @Expose
    @SerializedName("soft_descriptor")
    private String softDescriptor;

    /**
     * Código que identifica a transação no adquirente.
     */
    @Expose(serialize = false)
    private String tid;

    /**
     * Código que identifica a transação no adquirente.
     */
    @Expose(serialize = false)
    private String nsu;

    /**
     * URL (endpoint) do sistema integrado a Pagar.me que receberá as respostas
     * a cada atualização do processamento da transação
     */
    @Expose
    @SerializedName("postback_url")
    private String postbackUrl;

    /**
     * URL do boleto para impressão
     */
    @Expose(serialize = false)
    @SerializedName("boleto_url")
    private String boletoUrl;

    /**
     * Código de barras do boleto gerado na transação
     */
    @Expose(serialize = false)
    @SerializedName("boleto_barcode")
    private String boletoBarcode;

    /**
     * Código QR do Pix gerado na transação
     */
    @Expose(serialize = false)
    @SerializedName("pix_qr_code")
    private String pixQRCode;

    /**
     * Mostra se a transação foi criada utilizando a API Key ou Encryption Key.
     */
    @Expose(serialize = false)
    private String referer;

    /**
     * Mostra se a transação foi criada utilizando a API Key ou Encryption Key.
     */
    @Expose(serialize = false)
    private String ip;

    @Expose(deserialize = false)
    @SerializedName("card_hash")
    private String cardHash;

    /**
     * Adquirente responsável pelo processamento da transação.
     */
    @Expose(serialize = false)
    @SerializedName("acquirer_name")
    private AcquirerName acquirerName;

    /**
     * Métodos de pagamento possíveis: credit_card,
     * boleto e debit_card
     */
    @Expose
    @SerializedName("payment_method")
    private PaymentMethod paymentMethod;

    /**
     * Métodos de captura possíveis: emv, magstripe e
     * ecommerce
     */
    @Expose
    @SerializedName("capture_method")
    private CaptureMethod captureMethod;

    /**
     * Para cada atualização no processamento da transação, esta propriedade
     * será alterada, e o objeto transaction retornado como
     * resposta através da sua URL de postback ou após o término do
     * processamento da ação atual.
     */
    @Expose(serialize = false)
    private Status status;

    /**
     * Motivo/agente responsável pela validação ou anulação da transação.
     */
    @Expose(serialize = false)
    @SerializedName(value = "status_reason")
    private StatusReason statusReason;

    /**
     * Data de expiração do boleto (em ISODate)
     */
    @Expose
    private DateTime boletoExpirationDate;

    /**
     * Data de expiração do pix (em ISODate)
     */
    @Expose
    @SerializedName(value = "pix_expiration_date")
    private DateTime pixExpirationDate;

    /**
     * Data de atualização da transação no formato ISODate
     */
    @Expose(serialize = false)
    @SerializedName("date_updated")
    private DateTime updatedAt;

    /**
     * Objeto com dados do telefone do cliente
     */
    @Expose(serialize = false)
    private Phone phone;

    /**
     * Objeto com dados do endereço do cliente
     */
    @Expose(serialize = false)
    private Address address;

    /**
     * Objeto com dados do cliente
     */
    @Expose
    private Customer customer;

    /**
     * Objeto com dados do cartão do cliente
     */
    @Expose(serialize = false)
    private Card card;

    /**
     * Objeto com dados adicionais do cliente/produto/serviço vendido
     */
    @Expose
    private Map metadata;

    @Expose
    @SerializedName("antifraud_metadata")
    private Object antifraudMetadata;

    @Expose(serialize = false)
    @SerializedName("event")
    private Event event;

    @Expose(serialize = false)
    @SerializedName("old_status")
    private Status oldStatus;

    @Expose(serialize = false)
    @SerializedName("current_status")
    private Status currentStatus;

    @Expose(serialize = false)
    @SerializedName("desired_status")
    private Status desiredStatus;

    @SerializedName("refuse_reason")
    public String getRefuseReason() {
        return refuseReason;
    }

    @SerializedName("refuse_reason")
    private String refuseReason;

    @Expose(serialize = true)
    @SerializedName("split_rules")
    private Collection splitRules;

    @Expose
    private Shipping shipping;

    @Expose
    private Billing billing;

    @Expose
    private Collection items;

    @Expose
    private Collection pixAdditionalFields;

    public Transaction() {
        super();
    }

    /**
     * OBS: Apenas para transações de cartão de crédito você deve
     * passar ou o card_hash ou o
     * card_id.
     *
     * @param amount
     *            Valor a ser cobrado. Deve ser passado em centavos.
     * @param cardHash
     *            Informações do cartão do cliente criptografadas no navegador.
     * @param cardId
     *            Ao realizar uma transação, retornamos o card_id
     *            do cartão para que nas próximas transações desse cartão possa
     *            ser utilizado esse identificador ao invés do
     *            card_hash
     * @param customer
     *            Dados do cliente a ser cadastrado
     */
    public Transaction(final Integer amount, final String cardHash, final String cardId, final Customer customer) {
        this();
        this.amount = amount;
        this.cardHash = cardHash;
        this.cardId = cardId;
        this.customer = customer;
    }

    public Transaction find(String id) throws PagarMeException {

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET, String.format("/%s/%s", getClassName(), id));

        final Transaction other = JSONUtils.getAsObject((JsonObject) request.execute(), Transaction.class);
        copy(other);
        flush();

        return other;
    }

    public Transaction find(BigInteger id) throws PagarMeException {

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET, String.format("/%s/%s", getClassName(), id));

        final Transaction other = JSONUtils.getAsObject((JsonObject) request.execute(), Transaction.class);
        copy(other);
        flush();

        return other;
    }

    public Collection findCollection(int totalPerPage, int page) throws PagarMeException {
        return JSONUtils.getAsList(super.paginate(totalPerPage, page), new TypeToken>() {
        }.getType());
    }

    /**
     * @return {@link #subscriptionId}
     */
    public Integer getSubscriptionId() {
        return subscriptionId;
    }

    /**
     * @return {@link #amount}
     */
    public Integer getAmount() {
        return amount;
    }

    /**
     * @return {@link #refundedAmount}
     */
    public Integer getRefundedAmount() {
        return refundedAmount;
    }

    /**
     * @return {@link #authorizedAmount}
     */
    public Integer getAuthorizedAmount() {
        return authorizedAmount;
    }

    /**
     * @return {@link #paidAmount}
     */
    public Integer getPaidAmount() {
        return paidAmount;
    }

    /**
     * @return {@link #installments}
     */
    public Integer getInstallments() {
        return installments;
    }

    /**
     * @return {@link #cost}
     */
    public Integer getCost() {
        return cost;
    }

     /**
     * @return {@link #referenceKey }
     */
    public String getReferenceKey() {
        return referenceKey;
    }

    /**
     * @return {@link #acquirerResponseCode}
     */
    public String getAcquirerResponseCode() {
        return acquirerResponseCode;
    }

    /**
     * @return {@link #authorizationCode}
     */
    public String getAuthorizationCode() {
        return authorizationCode;
    }

    /**
     * @return {@link #softDescriptor}
     */
    public String getSoftDescriptor() {
        return softDescriptor;
    }

    /**
     * @return {@link #tid}
     */
    public String getTid() {
        return tid;
    }

    /**
     * @return {@link #nsu}
     */
    public String getNsu() {
        return nsu;
    }

    /**
     * @return {@link Transaction#postbackUrl}
     */
    public String getPostbackUrl() {
        return postbackUrl;
    }

    public String getBoletoUrl() {
        return boletoUrl;
    }

    /**
     * @return {@link #boletoBarcode}
     */
    public String getBoletoBarcode() {
        return boletoBarcode;
    }

    /**
     * @return {@link #referer}
     */
    public String getReferer() {
        return referer;
    }

    /**
     * @return {@link #ip}
     */
    public String getIp() {
        return ip;
    }

    /**
     * @return {@link #acquirerName}
     */
    public AcquirerName getAcquirerName() {
        return acquirerName;
    }

    /**
     * @return {@link #paymentMethod}
     */
    public PaymentMethod getPaymentMethod() {
        return paymentMethod;
    }

    /**
     * @return {@link #captureMethod}
     */
    public CaptureMethod getCaptureMethod() {
        return captureMethod;
    }

    /**
     * @return {@link #status}
     */
    public Status getStatus() {
        return status;
    }

    /**
     * @return {@link #statusReason}
     */
    public StatusReason getStatusReason() {
        return statusReason;
    }

    /**
     * @return {@link #updatedAt}
     */
    public DateTime getUpdatedAt() {
        return updatedAt;
    }

    /**
     * @return {@link #metadata}
     */
    public Map getMetadata() {
        return metadata;
    }

    public DateTime getBoletoExpirationDate(){
        return boletoExpirationDate;
    }

    public DateTime getPixExpirationDate(){
        return pixExpirationDate;
    }

    /**
     * @return {@link #pixQRCode}
     */
    public String getPixQRCode() {
        return pixQRCode;
    }

    /**
     * @return {@link #card}
     */
    public Card getCard() {
        return card;
    }

    /**
     * @return {@link #customer}
     */
    public Customer getCustomer() {
        return customer;
    }

    /**
     * @return {@link #event}
     */
    public Event getEvent() {
        return event;
    }

    /**
     * @return {@link #oldStatus}
     */
    public Status getOldStatus() {
        return oldStatus;
    }

    /**
     * @return {@link #currentStatus}
     */
    public Status getCurrentStatus() {
        return currentStatus;
    }

    /**
     * @return {@link #desiredStatus}
     */
    public Status getDesiredStatus() {
        return desiredStatus;
    }

    public Object getAntifraudMetadata() {
        return antifraudMetadata;
    }

    public Shipping getShipping() {
        return shipping;
    }

    public Billing getBilling() {
        return billing;
    }

    public Collection getItems() {
        return items;
    }

    public Collection getPixAdditionalFields() {
        return pixAdditionalFields;
    }

    public void setAsync(final Boolean async) {
        this.async = async;
        addUnsavedProperty("async");
    }

    public void setCapture(final Boolean capture) {
        this.capture = capture;
        addUnsavedProperty("capture");
    }

    public void setAmount(final Integer amount) {
        this.amount = amount;
        addUnsavedProperty("amount");
    }

    public void setInstallments(final Integer installments) {
        this.installments = installments;
        addUnsavedProperty("installments");
    }

    public void setReferenceKey(final String referenceKey) {
        this.referenceKey = referenceKey;
        addUnsavedProperty("referenceKey");
    }

    public void setSoftDescriptor(final String softDescriptor) {
        this.softDescriptor = softDescriptor;
        addUnsavedProperty("softDescriptor");
    }

    public void setPostbackUrl(final String postbackUrl) {
        this.postbackUrl = postbackUrl;
        addUnsavedProperty("postbackUrl");
    }

    public void setCardHash(final String cardHash) {
        this.cardHash = cardHash;
        addUnsavedProperty("cardHash");
    }

    public void setPaymentMethod(final PaymentMethod paymentMethod) {
        this.paymentMethod = paymentMethod;
        addUnsavedProperty("paymentMethod");
    }

    public void setCaptureMethod(final CaptureMethod captureMethod) {
        this.captureMethod = captureMethod;
        addUnsavedProperty("captureMethod");
    }

    public void setCardId(final String cardId) {
        this.cardId = cardId;
        addUnsavedProperty("cardId");
    }

    public void setCustomer(final Customer customer) {
        this.customer = customer;
        addUnsavedProperty("customer");
    }

    public void setBoletoExpirationDate(final DateTime boletoExpirationDate) {
        this.boletoExpirationDate = boletoExpirationDate;
        addUnsavedProperty("boletoExpirationDate");
    }

    public void setPixExpirationDate(final DateTime pixExpirationDate) {
        this.pixExpirationDate = pixExpirationDate;
        addUnsavedProperty("pixExpirationDate");
    }

    public void setMetadata(final Map metadata) {
        this.metadata = metadata;
        addUnsavedProperty("metadata");
    }

    public void setSplitRules(final Collection splitRules) {
        this.splitRules = splitRules;

        if (this.splitRules.size() != 0) {
            addUnsavedProperty("splitRules");
        }
    }

    public void setAntifraudMetadata(Object antifraudMetadata) {
        this.antifraudMetadata = antifraudMetadata;
        addUnsavedProperty("antifraud_metadata");
    }

    public void setShipping(final Shipping shipping) {
        this.shipping = shipping;
    }

    public void setBilling(final Billing billing) {
        this.billing = billing;
    }

    public void setItems(final Collection items) {
        this.items = items;
    }

    public void setPixAdditionalFields(final Collection pixAdditionalFields) {
        this.pixAdditionalFields = pixAdditionalFields;
    }

    public Collection getSplitRules() {
        return splitRules;
    }

    public Transaction save() throws PagarMeException {

        final Transaction saved = super.save(getClass());
        copy(saved);

        return saved;
    }

    /**
     * @see #list(int, int)
     */
    public Collection list() throws PagarMeException {
        return list(100, 0);
    }

    /**
     * @param totalPerPage
     *            Retorna n objetos de transação
     * @param page
     *            Útil para implementação de uma paginação de resultados
     * @return Uma {@link Collection} contendo objetos de transações, ordenadas
     *         a partir da transação realizada mais recentemente.
     * @throws PagarMeException
     */
    public Collection list(int totalPerPage, int page) throws PagarMeException {
        return JSONUtils.getAsList(super.paginate(totalPerPage, page), new TypeToken>() {
        }.getType());
    }

    /**
     * Caso você queira/precise criar o card_hash manualmente, essa rota deverá
     * ser utilizada para obtenção de uma chave pública de encriptação dos dados
     * do cartão de seu cliente.
     *
     * @return Um {@link CardHashKey}
     * @throws PagarMeException
     */
    public CardHashKey cardHashKey() throws PagarMeException {
        final String cardHashKeyEndpoint = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,
                CardHashKey.class.getSimpleName());

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s", getClassName(), cardHashKeyEndpoint));

        return JSONUtils.getAsObject((JsonObject) request.execute(), CardHashKey.class);
    }

    /**
     *
     * @param antifraudAnalysisId
     * @return
     * @throws PagarMeException
     */
    public AntifraudAnalysis antifraudAnalysis(final Integer antifraudAnalysisId) throws PagarMeException {
        validateId();

        final AntifraudAnalysis antifraudAnalysis = new AntifraudAnalysis();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET, String.format("/%s/%s/%s/%s", getClassName(),
                getId(), antifraudAnalysis.getClassName(), antifraudAnalysisId));

        return JSONUtils.getAsObject((JsonObject) request.execute(), AntifraudAnalysis.class);
    }

    /**
     * Retorna todas as {@link AntifraudAnalysis} realizadas em uma transação.
     *
     * @return Lista de {@link AntifraudAnalysis}
     * @throws PagarMeException
     */
    public Collection antifraudAnalysises() throws PagarMeException {
        validateId();

        final AntifraudAnalysis antifraudAnalysis = new AntifraudAnalysis();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s", getClassName(), getId(), antifraudAnalysis.getClassName()));

        return JSONUtils.getAsList((JsonArray) request.execute(), new TypeToken>() {
        }.getType());
    }

    /**
     * Retorna um objeto {@link Payable} informando os dados de um pagamento
     * referente a uma determinada transação.
     *
     * @param payableId
     *            ID do {@link Payable}
     * @return Um {@link Payable}
     * @throws PagarMeException
     */
    public Payable payables(final BigInteger payableId) throws PagarMeException {
        validateId();

        final Payable splitRule = new Payable();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s/%s", getClassName(), getId(), splitRule.getClassName(), payableId));

        return JSONUtils.getAsObject((JsonObject) request.execute(), Payable.class);
    }

    /**
     * Retorna um array com objetos {@link Payable} informando os dados dos
     * pagamentos referentes a uma transação.
     *
     * @return Lista de {@link Payable}
     * @throws PagarMeException
     */
    public Collection payables() throws PagarMeException {
        validateId();

        final Payable payable = new Payable();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s", getClassName(), getId(), payable.getClassName()));

        return JSONUtils.getAsList((JsonArray) request.execute(), new TypeToken>() {
        }.getType());
    }

    /**
     * Retorna um {@link Postback} específico relacionado a transação.
     *
     * @param postbackId
     *            ID do {@link Postback}
     * @return Um {@link Postback}
     * @throws PagarMeException
     */
    public Postback postbacks(final String postbackId) throws PagarMeException {
        validateId();

        final Postback postback = new Postback();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s/%s", getClassName(), getId(), postback.getClassName(), postbackId));

        return JSONUtils.getAsObject((JsonObject) request.execute(), Postback.class);
    }

    /**
     * Com essa rota você pode reenviar qualquer {@link Postback} que já foi
     * enviado de uma transação. Lembrando que caso o envio de um
     * {@link Postback} falhe ou seu servidor não o receba, nós o retentamos
     * diversas vezes (com um total de 31 vezes).
     *
     * @param postbackId
     *            ID do {@link Postback}
     * @return Reenviando um {@link Postback}
     * @throws PagarMeException
     */
    public Postback postbackRedeliver(final String postbackId) throws PagarMeException {
        validateId();

        final Postback postback = new Postback();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.POST,
                String.format("/%s/%s/%s/%s/redeliver", getClassName(), getId(), postback.getClassName(), postbackId));

        return JSONUtils.getAsObject((JsonObject) request.execute(), Postback.class);
    }

    /**
     * Retorna todos os {@link Postback} enviados relacionados a transação.
     *
     * @return Todos os {@link Postback}s
     * @throws PagarMeException
     */
    public Collection postbacks() throws PagarMeException {
        validateId();

        final Postback postback = new Postback();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s", getClassName(), getId(), postback.getClassName()));

        return JSONUtils.getAsList((JsonArray) request.execute(), new TypeToken>() {
        }.getType());
    }

    /**
     * Retorna os dados das {@link SplitRule} do valor transacionado.
     *
     * @param splitRuleId
     *            O ID da Regra de Split
     * @return Retornando uma {@link SplitRule} específica
     * @throws PagarMeException
     */
    public SplitRule splitRules(final String splitRuleId) throws PagarMeException {
        validateId();

        final SplitRule splitRule = new SplitRule();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s/%s", getClassName(), getId(), splitRule.getClassName(), splitRuleId));

        return JSONUtils.getAsObject((JsonObject) request.execute(), SplitRule.class);
    }

    /**
     * Retorna os dados de uma {@link SplitRule} de uma determinada transação.
     *
     * @return Lista de {@link SplitRule} para a transação
     * @throws PagarMeException
     */
    public Collection splitRules() throws PagarMeException {
        validateId();

        final SplitRule splitRule = new SplitRule();

        final PagarMeRequest request = new PagarMeRequest(HttpMethod.GET,
                String.format("/%s/%s/%s", getClassName(), getId(), splitRule.getClassName()));

        return JSONUtils.getAsList((JsonArray) request.execute(), new TypeToken>() {
        }.getType());
    }

    /**
     * Essa rota é utilizada quando se deseja estornar uma transação, realizada
     * por uma cobrança via cartão de crédito ou boleto bancário.
     * 

* Em caso de estorno de uma transação realizada com cartão de crédito, * apenas o id da transação é necessário para efetivação do * estorno. *

* Caso a compra tenha sido feita por boleto bancário, você precisará passar * os dados da conta bancária que irá receber o valor estornado, ou o id * desta conta, que pode ser gerada com o modelo {@link BankAccount}. * * @throws PagarMeException */ public Transaction refund(final Integer amount) throws PagarMeException { validateId(); final PagarMeRequest request = new PagarMeRequest(HttpMethod.POST, String.format("/%s/%s/refund", getClassName(), getId())); request.getParameters().put("amount", amount); final Transaction other = JSONUtils.getAsObject((JsonObject) request.execute(), Transaction.class); copy(other); flush(); return other; } public Transaction refund(final BankAccount bankAccount) throws PagarMeException { validateId(); final PagarMeRequest request = new PagarMeRequest(HttpMethod.POST, String.format("/%s/%s/refund", getClassName(), getId())); Map bankAccountMap = JSONUtils.objectToMap(bankAccount); Map parameters = new HashMap(); parameters.put("bank_account", bankAccountMap); request.setParameters(parameters); final Transaction other = JSONUtils.getAsObject((JsonObject) request.execute(), Transaction.class); copy(other); flush(); return other; } /** * Você pode capturar o valor de uma transação após a autorização desta, no * prazo máximo de 5 dias após a autorização. * * @param amount * @return * @throws PagarMeException */ public Transaction capture(final Integer amount) throws PagarMeException { validateId(); final PagarMeRequest request = new PagarMeRequest(HttpMethod.POST, String.format("/%s/%s/capture", getClassName(), getId())); request.getParameters().put("amount", amount); if (this.getMetadata() != null) request.getParameters().put("metadata", this.getMetadata()); if (this.getSplitRules() != null) request.getParameters().put("split_rules", this.getSplitRules()); final Transaction other = JSONUtils.getAsObject((JsonObject) request.execute(), Transaction.class); copy(other); flush(); return other; } public Collection findPayableCollection(final Integer totalPerPage, Integer page) throws PagarMeException { validateId(); JsonArray responseArray = super.paginateThrough(totalPerPage, page, new PayableQueriableFields()); return JSONUtils.getAsList(responseArray, new TypeToken>() { }.getType()); } public Payable findPayable(BigInteger payableId) throws PagarMeException { validateId(); Payable payable = new Payable(); payable.setId(payableId); JsonObject responseObject = super.getThrough(payable); return JSONUtils.getAsObject(responseObject, Payable.class); } /** * Atualiza a instância do objeto com os dados mais recentes do backend. * * @return Instância atualizada do Objeto. */ public Transaction refresh() throws PagarMeException { final Transaction other = JSONUtils.getAsObject(refreshModel(), Transaction.class); copy(other); flush(); return other; } private void copy(Transaction other) { super.copy(other); this.subscriptionId = other.subscriptionId; this.amount = other.amount; this.installments = other.installments; this.cost = other.cost; this.status = other.status; this.statusReason = other.statusReason; this.acquirerName = other.acquirerName; this.acquirerResponseCode = other.acquirerResponseCode; this.authorizationCode = other.authorizationCode; this.softDescriptor = other.softDescriptor; this.tid = other.tid; this.nsu = other.nsu; this.postbackUrl = other.postbackUrl; this.paymentMethod = other.paymentMethod; this.boletoUrl = other.boletoUrl; this.boletoBarcode = other.boletoBarcode; this.boletoExpirationDate = other.boletoExpirationDate; this.pixExpirationDate = other.pixExpirationDate; this.pixQRCode = other.pixQRCode; this.referer = other.referer; this.referenceKey = other.referenceKey; this.ip = other.ip; this.cardId = other.cardId; this.metadata = other.metadata; this.card = other.card; this.paidAmount = other.paidAmount; this.refundedAmount = other.refundedAmount; this.authorizedAmount = other.authorizedAmount; this.refuseReason = other.refuseReason; this.antifraudMetadata = other.antifraudMetadata; this.splitRules = other.splitRules; this.cardEmvResponse = other.cardEmvResponse; this.updatedAt = other.updatedAt; } /** * Adquirente responsável pelo processamento da transação. */ public enum AcquirerName { /** * em ambiente de testes */ @SerializedName("development") DEVELOPMENT, /** * adquirente Pagar.me */ @SerializedName("pagarme") PAGARME, @SerializedName("stone") STONE, @SerializedName("cielo") CIELO, @SerializedName("rede") REDE, @SerializedName("mundipagg") MUNDIPAGG } public enum Event { @SerializedName("transaction_status_changed") TRANSACTION_STATUS_CHANGED } /** * Método de pagamento */ public enum PaymentMethod { @SerializedName("credit_card") CREDIT_CARD, @SerializedName("boleto") BOLETO, @SerializedName("debit_card") DEBIT_CARD, @SerializedName("pix") PIX } public enum CaptureMethod { @SerializedName("emv") EMV, @SerializedName("magstripe") MAGSTRIPE, @SerializedName("ecommerce") ECOMMERCE } /** * Quando uma transação é criada, ela inicialmente é retornada com o status * {@link #PROCESSING}. */ public enum Status { /** * Transação sendo processada. */ @SerializedName("processing") PROCESSING, /** * Transação autorizada. Cliente possui saldo na conta e este valor foi * reservado para futura captura, que deve acontecer em no máximo 5 * dias. Caso a transação não seja capturada, a autorização é * cancelada automaticamente. */ @SerializedName("authorized") AUTHORIZED, /** * Transação paga (autorizada e capturada). */ @SerializedName("paid") PAID, /** * Transação estornada. */ @SerializedName("refunded") REFUNDED, /** * Transação aguardando pagamento (status para transações criadas com * boleto bancário ou pix). */ @SerializedName("waiting_payment") WAITING_PAYMENT, /** * Transação paga com boleto aguardando para ser estornada. */ @SerializedName("pending_refund") PENDING_REFUND, /** * Transação não autorizada. */ @SerializedName("refused") REFUSED, /** * Transação sofreu chargeback. */ @SerializedName("chargedback") CHARGEDBACK } /** * Motivo/agente responsável pela validação ou anulação da transação. */ public enum StatusReason { @SerializedName("acquirer") ACQUIRER, @SerializedName("antifraud") ANTIFRAUD, @SerializedName("internal_error") INTERNAL_ERROR, @SerializedName("no_acquirer") NO_ACQUIRER, @SerializedName("acquirer_timeout") ACQUIRER_TIMEOUT } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy