Pagamento via cartão

Venda

É recomendado que você faça uma consulta de chave transacional na inicialização do plugin. Caso a chave não exista no terminal, este deverá ser enviado para o fabricante, para correção. A ausência da chave impede a transação e não há correção do lado da Zoop.

  • Faz-se uso da classe DesktopPluginPaymentRequestBuilder.

Exemplo de pagamento

val externalSeller = ExternalSeller(
    addressLine = "Avenida **********, ***",
    softDescriptor = "SDESC TESTE",
    cpfCnpj = "**************",
    state = "SP",
    city = "Campinas",
    country = "076",
    phoneNumber = "+55***********",
    zipCode = "89******",
    subMerchantId = "545*********",
    merchantCategoryCode = "7399",
    name = "VAREJO LTDA",
    voucher_pv = "a9f3b7c1d2e8f4g",
)

val paymentRequest = DesktopPlugin
    .createPaymentRequestBuilder()
    .amount(1000)
    .option(Option.CREDIT)
    .installments(2)
    .referenceId("") // Identificador próprio (opcional)
    .metadata(buildJsonObject {}) // Metadados adicionais (opcional)
    .externalSeller(externalSeller) // External seller (opcional)
    .callback(object: Callback<PayResponse>() {
        override fun onStart() {
            handleInitPayment() 
        }

        override fun onFail(error: Throwable) {
            handlePaymentFailure(error)
        }

        override fun onSuccess(response: PayResponse) {
            handleSucessfullPayment(response)
        }

        override fun onComplete() {
            handleFinishPaymentTransaction()
        }
    })
    .messageCallback(object: Callback<MessageCallbackRequestField.MessageData>() {
        override fun onSuccess(response: MessageCallbackRequestField.MessageData) {
            displayUserMessage(response.message)
        }

        override fun onFail(error: Throwable) {}
    })
    .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
    CREDIT_WITH_INSTALLMENTS, // Crédito parcelado
    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

ExternalSeller(
    addressLine = "Avenida **********, ***",         // Endereço
    softDescriptor = "SDESC TESTE",                  // Descrição
    cpfCnpj = "**************",                      // CPF ou CNPJ
    state = "SP",                                    // UF
    city = "Campinas",                               // Cidade
    country =  "076",                                // Codigo do País
    phoneNumber = "+55***********",                  // Número de telefone
    zipCode = "89******",                            // CEP
    subMerchantId = "545*********",                  // Identificador único
    merchantCategoryCode = "7399",                   // Informação que consta na tabela de CNAEs
    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 PayResponse, contendo um *TransactionData, acessível por response.transactionData, contendo todos os dados da transação.
OnFail -> Falha na transação, é recebida uma exceção, 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
    var 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
    val cardFingerprint: String? = null // Token único do cartão.
)
.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.