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:
operation | Ação | Descrição |
|---|---|---|
"0" | Criar | Reserva o valor no cartão. |
"1" | Modificar | Atualiza uma pré-autorização existente. |
"2" | Remover | Cancela uma pré-autorização. |
"3" | Confirmar | Captura o valor reservado. |
"4" | Consultar | Lista 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âmetro | Descrição | Obrigatório |
|---|---|---|
operation | Defina como "0" para criar a pré-autorização. | Sim |
originalAmount | Valor em moeda local para realizar a transação. | Sim |
amount | Valor a reservar. Os dois últimos dígitos são a parte decimal (ex.: "10000" = $100.00). | Não |
installments | Número de parcelas da transação de crédito. | Não |
plan_id | Plano de parcelamento a ser usado. Consulte Regras de parcelamento. | Não |
interest | Indica 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 |
skipReceipt | Defina como "true" para pular a tela de comprovante do cliente. | Não |
skipConfirmation | Defina como "true" para pular a tela de confirmação dos detalhes de parcelamento. | Não |
callerId | Identificador único para correlacionar a requisição com a resposta. | Não |
allowPrintCurrentTransaction | Defina 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âmetro | Descrição | Obrigatório |
|---|---|---|
result | Status da transação; "0" indica sucesso. | Sim |
resultDetails | Informação adicional quando a transação falha. | Não |
amount | Valor processado na reserva da pré-autorização. | Sim |
authorizationRefCode | Identificador da pré-autorização. Guarde-o — você o envia como reservation_id para modificar, confirmar ou remover a pré-autorização. | Não |
inputType | Forma de leitura do cartão (chip, aproximação ou tarja magnética). | Sim |
authorizationCode | Código de autorização da transação fornecido pelo emissor. | Não |
nsu | Código de autorização da transação Getnet para o terminal. | Não |
cardLastDigits | Últimos 4 dígitos do cartão usado. | Não |
brand | Bandeira do cartão (ex.: Visa, Mastercard). | Não |
gmtDateTime | Data e hora da transação em UTC 0 (MMDDhhmmss). | Não |
automationSlip | Dados 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âmetro | Descrição | Obrigatório |
|---|---|---|
operation | Defina como "3" para capturar o valor pré-autorizado. | Sim |
reservation_id | O authorizationRefCode recebido no Passo 1. | Sim |
amount | Valor 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
- Modifique um pagamento — atualize o valor de uma pré-autorização.
- Parâmetros de deeplink — campos completos de requisição e resposta da pré-autorização.
- Códigos de resultado e estruturas de dados — lista completa dos códigos de status.