Pagamento via cartão

Pagamento Via Cartão

Faz-se uso da classe mPOSPaymentRequestBuilder.

Exemplo de pagamento
val paymentRequest = MPOSPlugin.createPaymentRequestBuilder()
    .amount(5)
    .option(Option.CREDIT)
    .installments(1)
    //.referenceId("")                     // Identificador próprio (opcional)
    //.metadata(buildJsonObject {})        // Metadados adicionais (opcional)
    //.externalSeller(ExternalSeller(...)) // External seller (opcional)
    .callback(object: Callback<mPOSPaymentResponse>() {
        override fun onStart() {
            Log.d("mPOS", "onStart")
            state = state.copy(status = Status.MESSAGE, message = "Iniciando")
        }

        override fun onSuccess(response: mPOSPaymentResponse) {
            Log.d("mPOS", "onSuccess")
            state = state.copy(status = Status.MESSAGE, message = "SUCESSO")
        }

        override fun onFail(error: Throwable) {
            Log.d("mPOS", "onFail ${error.message}")
            val message = if (error.message?.contains("invalid session") == true) {
                "Não foi realizado um login"
            } else {
                error.message
            }

            state = state.copy(status = Status.MESSAGE, message = message ?: "Falha")
        }
    })
    .messageCallback(object: Callback<MessageCallbackRequestField.MessageData>() {
        override fun onSuccess(response: MessageCallbackRequestField.MessageData) {
            Log.d("mPOS", "messageCallback ${response.message}")
            state = state.copy(status = Status.MESSAGE, message = response.message)
        }

        override fun onFail(error: Throwable) {
            Log.d("mPOS", "messageCallback fail")
        }
    })
    .build()

Zoop.post(paymentRequest)

Parâmetros de Entrada

ChaveTipoObjetivoExemplo
amountLongValor da transação (em centavos).2 (R$ 0,02)
optionOptionOpção do pagamento (do tipo Option).Option.CREDIT
installmentsLongQuantidade de parcelas.2
referenceIdStringIdentificador próprio gerado pelo parceiro (opcional, máx. 50 caracteres)."237ab31-g99c-4e25-9hjs-32u4d3gf7fh2"
metadataString (em JSON) ou JsonObjectMetadados personalizados fornecidos pelo parceiro (opcional, máx. 512 caracteres).Vide Metadados em JsonObject
externalSellerExternalSellerDados do external seller (opcional).Vide External seller

Opções de pagamento

Option.CREDIT                   // Crédito à vista
Option.CREDIT_WITH_INSTALLMENTS // Crédito parcelado
Option.DEBIT                    // Débito

Metadados em JsonObject

Para criar um objeto de JsonObject, faça como no seguinte exemplo:

val metadata = buildJsonObject {
    put("endereco","Avenida X")
    put("parcelado", false)
    put("tentativa", 1)
    put("vencimento", "2024-02-15")
    put("versao", "1.23.4")
}

External seller

data class ExternalSeller(
    addressLine = "Avenida **********, ***", // Endereço.
    softDescriptor = "SDESC TESTE", // Nome da empresa.
    cpfCnpj =  "***********", // CPF ou CNPJ, não é necessário adicionar máscara nesse campo.
    state = "SP", // Estado.
    city = "Campinas", // Cidade.
    country =  "076", // Sigla ou código do país.
    phoneNumber =  "+55***********", // O número de telefone deve iniciar com o código do país, DDD e o número.
    zipCode = "89******", // CEP do cliente.
    subMerchantId = "545*********", // Informação que identifica se a bandeira e o emissor possam discernir qual o estabelecimento que está.
    merchantCategoryCode = "7399", // MCC do estabelecimento.
    name = "VAREJO LTDA.", // Razão social da empresa.
    voucherPv = "a9f3b7c1d2e8f4g" // Código de cadastro na adquirente (Opcional, mínimo 8 e máximo 15 caracteres)    
)

Callbacks

.callback

Responsável pelo fluxo do pagamento, início, processamento, conclusão (sucesso/falha).

onStart

Esta callback é sinalizada quando o fluxo do pagamento começa, podendo ser sinalizado pela aplicação o início do processamento.

onSuccess

Neste momento, a transação foi aprovada, e você recebe o objeto do tipo mPOSPaymentResponse, contendo um TransactionData, acessível por response.transactionData, contendo todos os dados da transação.

data class TransactionData(
    val value: Int?, // Valor da transação em centavos
    val paymentType: Int?, // Tipo de pagamento
    val installments: Int?, // Parcelas
    val status: String?, // Status (approved/canceled)
    val brand: String?, // Marca do cartão ex: Visa
    val address: String?, // Endereço do seller
    val sellerName: String?, // Nome do seller
    val acquiring: String?, // Adquirente
    val pan: String?, // PAN do cartão
    val autoCode: String?, // Código de autorização
    val documentType: String?, // Tipo de documento, CPF/CNPJ
    val document: String?, // Documento
    val nsu: String?, // NSU
    val date: String?, // Data da transação
    val hour: String?, // Hora da transação
    val cv: String?, // CV
    val arqc: String?, // ARQC
    val aid: String?, // AID
    val sellerReceipt: String?, // Recibo do estabelecimento
    val customerReceipt: String?, // Recibo do cliente
    val approvalMessage: String?, // Mensagem de aprovação ex: APROVADA PELO EMISSOR
    val aidLabel: String?, // Label do cartão
    val transactionId: String?, // Id da transação
    val receiptId: String? = null, // Id do recibo, caso aplicável (hoje, apenas transações Pix)
    val pixId: String? = null, // Id do Pix
    var cardFingerprint: String? = null, // Token único do cartão
    val cardEntryMode: String? // Identifica qual o modo de entrada do cartão(TARJA, CHIP, NFC)
)

onFail

Falha na transação, é recebido um exception, podendo ser do tipo:

  • ZoopPaymentException: Falha no fluxo do pagamento, neste caso, passamos a mensagem de erro, podendo ser acessada como exception.message.
  • ZoopTimeoutException: Tempo excedido na operação.
  • ZoopClosedConnectionException: Conexão interrompida.
  • ZoopNetworkException: Falha de conexão.

onComplete

Sinaliza o final do fluxo do pagamento, tanto em casos de sucesso/falha.

.messageCallback

Responsável pelas mensagens no fluxo do pagamento. Ex.: “Aproxime, insira ou passe o cartão”.

onSuccess

Mensagem a ser exibida pela aplicação para o usuário, acessada como response.message.

onFail

Não recebe nenhum dado, esta callback não é chamada.