Pagamento

Venda

  • Faz-se uso do método TapOnPhone::pay ou TapOnPhone::payByGateway.

Parâmetros

É necessário passar os parâmetros conforme a seguir:

data class PaymentRequest(
    val amount: Long,
    val paymentType: PaymentType,
    val installments: Int? = null,
    val referenceId: String? = null, 
    val metadata: String? = null, 
    val externalSeller: ExternalSeller? = null, 
)
ChaveTipoObjetivoExemplo
amountLongValor da transação (em centavos).2 (R$ 0,02)
paymentTypePaymentTypeTipo do pagamento (do tipo PaymentType).PaymentType.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

enum class PaymentType {
    CREDIT, // Crédito
    DEBIT, // Débito
    PIX,  // Pix 
}

Metadados em JsonObject

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

val metadata = buildJsonObject {
    put("clientId","1234")
    put("name","John Doe")
}

Exemplo de pagamento

val tapOnPhone = TapOnPhone()

// Depois de inicializado com sucesso
coroutineScope.launch {
    tapOnPhone.pay(
        payRequest = PaymentRequest(
            amount = 10000, // R$ 10,00
            paymentType = PaymentType.CREDIT, 
            installments = 2,
            referenceId = UUID.randomUUID().toString(),
            metadata = """
                {
                    "clientId": "1234",
                    "name": "John Doe"        
                }
            """,
        ),
        onApproved = { result ->
            println("Pagamento Aprovado! Id: ${result.transactionId}")
        },
        onError = { error ->
            println("Pagamento negado - id: ${error.transactionId}")
            println("Mensagem: ${error.message}")
            println("Código: ${error.code}")
            println("Descrição: ${error.description}")
        },
    )
}

External seller

val externalSeller = 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)  
)

Exemplo de pagamento Gateway

Na classe ExternalSeller, o campo voucherPv é opcional (Mínimo 8 e máximo 15 caracteres).

val tapOnPhone = TapOnPhone()

val externalSeller = 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)    
)

// Depois de inicializado com sucesso
coroutineScope.launch {
    tapOnPhone.payByGateway(
        payRequest = PaymentRequest(
            amount = 10000, // R$ 10,00
            paymentType = PaymentType.CREDIT,
            installments = 2,
            referenceId = UUID.randomUUID().toString(),
            externalSeller = externalSeller,
        ),
        onApproved = { result ->
            println("Pagamento Aprovado! Id: ${result.transactionId}")
        },
        onError = { error ->
            println("Pagamento negado - id: ${error.transactionId}")
            println("Mensagem: ${error.message}")
            println("Código: ${error.code}")
            println("Descrição: ${error.description}")
        },
    )
}

Resposta de sucesso PaymentApprovedResponse

data class PaymentApprovedResponse(
    val transactionId: String, // Id da transação na Zoop
    val referenceId: String, // Seu id para transação, se fornecido no request
    val cardBrand: CardBrand // Bandeira do cartão
)

Resposta de erro PaymentErrorResponse

data class PaymentErrorResponse(
    val transactionId: String?, // Id da transação na Zoop se disponível, caso a falha tenha ocorrido antes de ser enviado para Zoop, será `null`
    val referenceId: String?, // Seu id para transação, se fornecido no request
    val message: String, // mensagem de erro para o usuário
    val code: Int?, // código de erro
    val source: String?, // onde ocorreu o erro
    val description: String?, // descrição mais detalhada do erro
    val errorSource: String?, // onde ocorreu o erro ex: sdk, backend, kernel, acquirer
    val operationType: String?, // Tipo de operação que originou o erro ex: pay, activation
    val kernel: KernelError? // Detalhes do erro do kernel
) {
    data class KernelError(
        val code: Int, // código do erro kernel
        val name: String, // nome do erro kernel
        val description: String // descrição do erro kernel
    )
}