Getnet DocsGetnet Docs

Crie um pagamento pré-autorizado

Este guia mostra como processar uma transação de pré-autorização com o Getnet Payment App. A pré-autorização retém temporariamente um valor no cartão de crédito do cliente para uma captura futura. É comum em reservas de hotel ou aluguel de carros, quando o valor final pode variar.

Antes de começar

Antes de seguir os passos, você precisa de:

  • Getnet Payment App instalado no terminal.
  • Conhecimento dos códigos de plano de parcelamento, se aplicável.

Como funciona

Todas as ações de pré-autorização usam a URI getnet://payment/v1/pre-auth. O parâmetro operation seleciona a ação:

operationAçãoDescrição
"0"CriarReserva o valor no cartão.
"1"ModificarAtualiza uma pré-autorização existente.
"2"RemoverCancela uma pré-autorização.
"3"ConfirmarCaptura o valor reservado.
"4"ConsultarLista as pré-autorizações pendentes.

a operação de criação retorna um authorizationRefCode. Esse valor é o identificador da pré-autorização. Você o envia de volta como reservation_id para modificar, confirmar ou remover a pré-autorização. Guarde-o após cada criação.

Passo 1: crie uma pré-autorização

Para reservar um valor no cartão do cliente, envie um Intent com operation definido como "0".

Parâmetros de requisição

ParâmetroDescriçãoObrigatório
operationDefina como "0" para criar a pré-autorização.Sim
originalAmountValor em moeda local para realizar a transação.Sim
amountValor a reservar. Os dois últimos dígitos são a parte decimal (ex.: "10000" = $100.00).Não
installmentsNúmero de parcelas da transação de crédito.Não
plan_idPlano de parcelamento a ser usado. Consulte Regras de parcelamento.Não
interestIndica se o plano tem juros (true) ou é sem juros (false).Não
operationMode"0" para manual (o terminal calcula) ou "1" para calculado (o app calcula).Não
skipReceiptDefina como "true" para pular a tela de comprovante do cliente.Não
skipConfirmationDefina como "true" para pular a tela de confirmação dos detalhes de parcelamento.Não
callerIdIdentificador único para correlacionar a requisição com a resposta.Não
allowPrintCurrentTransactionDefina como "false" para receber os dados do comprovante em automationSlip.Não

O bloco de código abaixo mostra como criar uma pré-autorização:

private val REQUEST_CODE = 1001

private fun createPreAuth() {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "0") // 0 = create
    intent.putExtra("amount", "10000") // $100.00
    intent.putExtra("originalAmount", "10000")
    intent.putExtra("installments", "1")
    intent.putExtra("plan_id", "plan_emisor")
    intent.putExtra("operationMode", "0")
    intent.putExtra("skipReceipt", "true")

    startActivityForResult(intent, REQUEST_CODE)
}

Parâmetros de resposta

ParâmetroDescriçãoObrigatório
resultStatus da transação; "0" indica sucesso.Sim
resultDetailsInformação adicional quando a transação falha.Não
amountValor processado na reserva da pré-autorização.Sim
authorizationRefCodeIdentificador da pré-autorização. Guarde-o — você o envia como reservation_id para modificar, confirmar ou remover a pré-autorização.Não
inputTypeForma de leitura do cartão (chip, aproximação ou tarja magnética).Sim
authorizationCodeCódigo de autorização da transação fornecido pelo emissor.Não
nsuCódigo de autorização da transação Getnet para o terminal.Não
cardLastDigitsÚltimos 4 dígitos do cartão usado.Não
brandBandeira do cartão (ex.: Visa, Mastercard).Não
gmtDateTimeData e hora da transação em UTC 0 (MMDDhhmmss).Não
automationSlipDados do comprovante em JSON quando allowPrintCurrentTransaction é "false".Não

Veja um exemplo de tratamento da resposta de criação:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        val extras = data?.extras
        val result = extras?.getString("result")

        if (result == "0") {
            // SUCCESS: store the pre-authorization identifier
            val reservationId = extras?.getString("authorizationRefCode")
            val amount = extras?.getString("amount")

            // Store authorizationRefCode - you send it as reservation_id later
            saveReservationId(reservationId)
        } else {
            val errorDetails = extras?.getString("resultDetails")
            Log.e("PreAuth", "Pre-authorization failed: $errorDetails (Code: $result)")
        }
    }
}

Guarde o authorizationRefCode retornado na resposta. Esse identificador é obrigatório para confirmar, modificar ou remover a pré-autorização. Se você não informá-lo nas operações seguintes, o valor é liberado automaticamente quando o prazo da reserva expira.

Passo 2: confirme a pré-autorização

Depois de entregar o serviço ou o produto, confirme a pré-autorização para transformar a reserva temporária em pagamento definitivo. Essa operação captura o valor e conclui a transação.

Parâmetros de requisição

ParâmetroDescriçãoObrigatório
operationDefina como "3" para capturar o valor pré-autorizado.Sim
reservation_idO authorizationRefCode recebido no Passo 1.Sim
amountValor final atualizado a capturar. Se omitido, o app usa o valor originalmente reservado.Não
private fun confirmPreAuth(reservationId: String, finalAmount: String? = null) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "3") // 3 = confirm
    intent.putExtra("reservation_id", reservationId)

    finalAmount?.let { intent.putExtra("amount", it) }

    startActivityForResult(intent, REQUEST_CODE)
}

Confirme o sucesso verificando se result é igual a "0" em onActivityResult.

Modifique uma pré-autorização

Para atualizar o valor reservado antes da captura, envie operation definido como "1" junto com o reservation_id. Consulte Modifique um pagamento para ver o fluxo completo.

Remova uma pré-autorização

Para cancelar uma pré-autorização e liberar o valor reservado, envie operation definido como "2" junto com o reservation_id.

private fun removePreAuth(reservationId: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/pre-auth"))

    intent.putExtra("operation", "2") // 2 = remove
    intent.putExtra("reservation_id", reservationId)

    startActivityForResult(intent, REQUEST_CODE)
}

Consulte as pré-autorizações pendentes

Para listar as pré-autorizações pendentes, envie operation definido como "4". Você pode restringir os resultados com os parâmetros de filtro filterReservationId, filterInitialDate, filterFinalDate, filterAuthorizationCode, filterCardLastDigits e filterAllowedBrands. A resposta traz uma lista pendingAuthorizations com até as 30 pré-autorizações pendentes mais recentes. Consulte Parâmetros de deeplink.

Próximos passos