Crie um pagamento parcelado com planos
Este guia mostra como processar pagamentos com cartão de crédito parcelados usando o Getnet Payment App. Você pode deixar o terminal calcular os juros (modo Manual) ou enviar o valor final já calculado pelo seu próprio sistema (modo Calculado).
Antes de começar
Antes de seguir os passos, você precisa de:
- Getnet Payment App instalado no terminal.
- Usar cartão de crédito como meio de pagamento (
paymentMethod="1"). - O estabelecimento precisa estar autorizado para os planos de parcelamento específicos na configuração do seu Tax Engine.
Os parâmetros de parcelamento se aplicam somente a transações com cartão de crédito. Eles não valem para débito, QR Code ou voucher.
Como funciona
Quando um cartão de crédito é detectado, o terminal valida o plano solicitado contra as configurações autorizadas do estabelecimento por meio de um Tax Engine. Entender essa validação ajuda você a prever o comportamento do terminal:
| Etapa | Condição | Comportamento do terminal |
|---|---|---|
| Seleção | Se os parâmetros planId ou installments estiverem ausentes | O terminal exibe uma tela de seleção para o operador escolher o plano manualmente. |
| Validação do plano | Se o planId informado corresponder à resposta do Tax Engine | O terminal pula a tela de seleção de plano. |
| Validação das parcelas | Se o valor de installments for compatível com a resposta do Tax Engine | O terminal pula a tela de seleção de parcelas e segue para a confirmação. |
| Ajuste | Se o plano solicitado não estiver autorizado ou divergir do Tax Engine | O terminal obriga o usuário a selecionar manualmente uma opção válida e autorizada. |
Passo 1: escolha o modo de operação
Antes de iniciar a transação, defina o operationMode. Esse parâmetro controla como os valores da transação são calculados:
| Modo de operação | Valor | Comportamento |
|---|---|---|
| Manual | “0” (padrão) | O terminal calcula os valores finais da transação com base em regras de negócio internas e nos dados que o usuário informa em tempo real durante o fluxo de pagamento. |
| Calculado | “1” | A aplicação de terceiros é responsável por fazer os cálculos e enviar o valor final; o terminal recebe os dados sem aplicar nenhuma modificação. |
Se o
operationModenão for especificado, o terminal assume o modo manual ("0").
Passo 2: crie o pagamento parcelado
Para processar um pagamento parcelado, você precisa criar um Intent com a operação de pagamento e incluir os parâmetros específicos de parcelamento.
Como funciona a validação de plano e parcelas
O terminal faz uma validação em duas etapas contra o Tax Engine:
Validação do plano: se o
planIdque você envia corresponder aos planos autorizados do estabelecimento retornados pelo Tax Engine, o terminal pula a tela de seleção de plano.Validação das parcelas: depois de validar o plano, se o valor de
installmentsfor compatível com a resposta do Tax Engine para aquele plano, o terminal também pula a tela de seleção de parcelas.Somente quando as duas validações passam o terminal segue direto para a tela de confirmação. Se qualquer uma falhar, o terminal pede que o usuário selecione manualmente uma opção válida e autorizada.
A tabela abaixo lista os parâmetros que você pode enviar no Intent:
| Parâmetro | Tipo | Descrição | Obrigatório |
|---|---|---|---|
amount | String | Valor da transação com duas casas decimais implícitas (por exemplo, “10000” = $100.00). | Sim |
originalAmount | String | Valor em moeda local para realizar a transação. | Sim |
tip | String | Valor da gorjeta a ser somado ao total da transação. A representação decimal é a mesma do parâmetro amount (por exemplo, “500” = $5.00). | Não |
waiterCode | String | Código do garçom para atribuição da gorjeta. Obrigatório se uma gorjeta for informada. | Condicional |
receiptCode | String | Código de identificação a ser impresso no recibo. | Sim |
callerId | String | Identificador único para correlacionar a requisição com a resposta. | Sim |
paymentMethod | String | Meio de pagamento: "1" para Cartão, "2" para QR Code. Se não for especificado, o usuário será solicitado a escolher. | Não |
installments | String | Número de parcelas desejado. Aplicável somente a transações de crédito. | Não |
planId | String | ID do plano de parcelamento. Consulte os planos disponíveis para o seu mercado. | Não |
interest | String | Indica se o plano de parcelamento tem juros ("true") ou é sem juros ("false"). | Não |
operationMode | String | Define o modo de cálculo: "0" para manual (o terminal calcula) ou "1" para calculado (a aplicação calcula). Consulte o guia Estratégia de cálculo de juros. | Não |
skipConfirmation | String | Defina como "true" para pular as telas de confirmação dos detalhes do parcelamento; "false" (padrão) exibe a tela normalmente - o usuário precisa interagir para prosseguir. | Não |
skipReceipt | String | Defina como "true" para suprimir a tela de visualização do recibo do cliente após a aprovação. "false" (padrão) exibe a tela normalmente. | Não |
allowPrintCurrentTransaction | String | Defina como "true" para a Getnet cuidar da impressão do recibo (comportamento padrão), "false" para receber os dados brutos do recibo. Consulte o guia Responsabilidade de impressão. | Não |
O bloco de código a seguir mostra um exemplo de como criar um pagamento parcelado:
private val REQUEST_CODE = 1001
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/payment"))
// Mandatory for Payment
intent.putExtra("amount", "10000") // $100.00
intent.putExtra("originalAmount", "10000")
intent.putExtra("callerId", "123456")
intent.putExtra("receiptCode", "654321")
// Specific for Installments and Plans
intent.putExtra("installments", 5)
intent.putExtra("planId", "plan_emisor")
intent.putExtra("interest", "false")
intent.putExtra("operationMode", "1") // Calculated mode
intent.putExtra("skipConfirmation", "false")
startActivityForResult(intent, REQUEST_CODE)
}Passo 3: trate a resposta
Depois que o cliente conclui a transação, o Getnet Payment App devolve os detalhes finais do plano confirmado para a sua aplicação via onActivityResult.
Parâmetros de resposta
A tabela a seguir lista os parâmetros de resposta que você recebe:
| Parâmetro | Tipo | Descrição |
|---|---|---|
| result | String | Resultado da transação: "0" indica sucesso. Consulte a referência Códigos de resultado para todos os códigos. |
| resultDetails | String | Mensagem detalhada sobre o resultado da transação (por exemplo, “APPROVED”, descrições de erro) |
| amount | String | Valor final da transação com duas casas decimais implícitas |
| tip | String | Valor da gorjeta somado à transação (se informado) |
| waiterCode | String | Código do garçom para atribuição da gorjeta (se informado) |
| receiptCode | String | Código de identificação impresso no recibo |
| callerId | String | Identificador único enviado na requisição para correlacionar com a resposta |
| nsu | String | Código de autorização da transação na Getnet - único por terminal (não pode se repetir no mesmo dia) |
| authorizationCode | String | Código de autorização fornecido pelo emissor do cartão |
| paymentType | String | Tipo de pagamento usado: crédito, débito, voucher etc. |
| brand | String | Bandeira do cartão (por exemplo, “VISA”, “MASTERCARD”) |
| cardBin | String | Primeiros 8 dígitos do cartão (BIN) |
| cardLastDigits | String | Últimos 4 dígitos do cartão usado |
| inputType | String | Método de leitura do cartão: "021" (tarja magnética), "051" (chip), "071" (chip por aproximação), "801" (tarja magnética - fallback) |
| gmtDateTime | String | Data e hora GMT da transação (formato: MMDDhhmmss, GMT UTC 0) |
| installments | String | Número de parcelas confirmado para a transação |
| planId | String | Plano de parcelamento selecionado ou validado durante a transação |
| interest | String | Indica se houve juros: "true" (com juros) ou "false" (sem juros) |
| automationSlip | String | Dados do recibo em formato JSON (retornado quando allowPrintCurrentTransaction = "false"). Consulte o guia Responsabilidade de impressão. |
O bloco de código a seguir mostra um exemplo de tratamento da resposta:
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: Extract transaction details
val installments = extras?.getString("installments")
val planId = extras?.getString("planId")
val interest = extras?.getString("interest")
val nsu = extras?.getString("nsu")
val authCode = extras?.getString("authorizationCode")
val amount = extras?.getString("amount")
Log.d("Payment", "Payment approved with $installments installments")
Log.d("Payment", "Plan: $planId, Interest: $interest")
Log.d("Payment", "NSU: $nsu, Auth Code: $authCode")
} else {
// FAILURE: Handle error
val errorDetails = extras?.getString("resultDetails")
Log.e("Payment", "Payment failed: $errorDetails (Code: $result)")
}
}
}Exemplo de resposta bem-sucedida:
{
"result": "0",
"resultDetails": "APPROVED",
"amount": "10000",
"installments": "5",
"planId": "plan_emisor",
"interest": "false",
"callerId": "123456",
"nsu": "57003",
"authorizationCode": "004433"
}Próximos passos
- Regras de parcelamento por país - os IDs de plano e as restrições de meio de pagamento por país.
- Estratégia de cálculo de juros - decida se o terminal ou a sua aplicação calcula os juros.