Pagamento via cartão

Venda

  • Faz-se uso da classe mPOSPaymentRequestBuilder.

Exemplo de pagamento

    private fun payment() {
        loginRequest = null
        voidRequest = null
        paymentRequest = MPOSPlugin.createPaymentRequestBuilder()
            .amount(5)
            .option(Option.CREDIT)
            .installments(1)
            //.referenceId("") Identificador próprio (opcional)
            //.metadata("") Metadados adicionais (opcional)
            .callback(object: Callback<mPOSPaymentResponse>() {
                override fun onStart() {
//                startLoadingAnimation()
                    Log.d("mPOS", "onStart")
                    state = state.copy(status = Status.MESSAGE, message = "Iniciando")
                }

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

                override fun onFail(error: Throwable) {
//                handlePaymentFailure(exception)
                    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) {
//                displayUserMessage(messageData.message)
                    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
Chave Tipo Objetivo Exemplo
amount Long Valor da transação (em centavos). 2 (R$ 0,02)
option Option Opção do pagamento (do tipo Option). Option.CREDIT
installments Long Quantidade de parcelas. 2
referenceId String Identificador próprio gerado pelo parceiro (opcional, máx. 50 caracteres) "237ab31-g99c-4e25-9hjs-32u4d3gf7fh2"
metadata String (em JSON) Metadados personalizados fornecidos pelo parceiro (opcional, máx. 512 caracteres). "{\"parcelado\":false,\"tentativa\":1,\"vencimento\":\"2024-02-15\",\"versao\":\"1.23.4\"}"

Opções de pagamento

Option {
    CREDIT,                   // Crédito à vista
    CREDIT_WITH_INSTALLMENTS, // Crédito parcelado
    DEBIT                     // Débito
}

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.
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.

Referência:

    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: Strting? = null // Id do Pix
    )    
.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.