Criar um Pagamento Pré-autorizado
Este guia orienta você no processamento de uma transação de pré-autorização usando a aplicação Get Smart. A pré-autorização permite bloquear um valor específico no cartão de um cliente sem capturar os fundos imediatamente. Isso é normalmente utilizado em hotéis, aluguel de carros ou cenários onde o preço final do serviço ainda está pendente.
Requisitos
Antes de começar, certifique-se de que você possui:
- Perfil de estabelecimento com suporte a pré-autorização - Entre em contato com o suporte da Get Smart para verificar se sua conta suporta este tipo de transação
- Aplicação Get Smart instalada e configurada no dispositivo Android
- Permissão para lançar Intents externos em sua aplicação
Nem todos os perfis de estabelecimento suportam pré-autorização. Verifique com a Get Smart se sua conta está configurada para transações de pré-autorização antes de implementar este recurso.
Processo da Transação de Pré-autorização
Esta seção guia você pelo processo de duas etapas para pré-autorizar e confirmar um pagamento com a integração Get Smart App2App. O fluxo de trabalho envolve duas chamadas de Intent distintas: a pré-autorização para reter os fundos e a confirmação para capturá-los.
Passo 1: Executar a Pré-autorização
Uma transação de pré-autorização bloqueia fundos no cartão do cliente sem capturá-los imediatamente. Você deve criar um Intent com o tipo de transação 10 para iniciar a retenção. A aplicação Get Smart processa a pré-autorização e retorna um ID de pedido (ORDER) que você deve armazenar para a confirmação posterior.
A tabela abaixo lista os parâmetros que você precisa incluir em seu Intent de pré-autorização:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | double | Sim | O valor a ser retido no cartão |
type | int | Sim | Definido como 10 para transações de Pré-autorização |
invoice | String | Não | Número do pedido ou identificador opcional para rastreamento |
O exemplo de código a seguir mostra como criar e lançar um Intent de pré-autorização:
// Define o código de requisição para o tratamento do resultado
static final int REQUEST_CODE_PREAUTH = 2001;
// Inicializa o Intent com a ação Get Smart
Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
// Adiciona os parâmetros de pré-autorização
intent.putExtra("amount", 100.00);
intent.putExtra("type", 10); // 10 = Pré-autorização
intent.putExtra("invoice", "PRE-AUTH-001");
// Lança o Intent
try {
startActivityForResult(intent, REQUEST_CODE_PREAUTH);
} catch (ActivityNotFoundException e) {
// Trata a ausência da aplicação Get Smart
new AlertDialog.Builder(this)
.setTitle("App Get Smart não encontrado")
.setMessage("Por favor, instale e configure a aplicação Get Smart.")
.setPositiveButton("OK", null)
.show();
}Passo 2: Armazenar e Confirmar a Pré-autorização
Quando a pré-autorização é bem-sucedida, o app Get Smart retorna um parâmetro ORDER através do callback onActivityResult. Você deve armazenar este ID de pedido para confirmar e capturar o pagamento mais tarde. As pré-autorizações geralmente expiram após 7 a 30 dias, dependendo do emissor do cartão, portanto, você deve confirmar a captura dentro deste prazo.
Para finalizar o pagamento, envie uma solicitação de confirmação usando o tipo de transação 11 e inclua o ID do pedido original (original_order). O valor da confirmação pode ser igual ou inferior ao valor pré-autorizado, dependendo da configuração do seu contrato de estabelecimento.
A tabela abaixo lista os parâmetros para o Intent de confirmação:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | double | Sim | O valor a ser capturado (igual ou inferior ao valor pré-autorizado) |
type | int | Sim | Definido como 11 para Confirmação de Pré-autorização |
original_order | String | Sim | O ID de pedido (ORDER) retornado da pré-autorização |
O exemplo de código a seguir mostra como tratar o resultado da pré-autorização e, posteriormente, confirmar a captura:
// Trata o resultado da pré-autorização
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_PREAUTH) {
if (resultCode == RESULT_OK && data != null) {
// Pré-autorização bem-sucedida - armazena o ID do pedido
String orderId = data.getStringExtra("ORDER");
String authCode = data.getStringExtra("AUTHORIZATION");
// Armazena o orderId para confirmação posterior
savePreAuthOrderId(orderId);
}
} else if (requestCode == REQUEST_CODE_CONFIRM) {
if (resultCode == RESULT_OK && data != null) {
// Confirmação bem-sucedida
String orderId = data.getStringExtra("ORDER");
// Processar pagamento confirmado
}
}
}
// Mais tarde, quando estiver pronto para capturar os fundos
private void confirmPreAuthorization(String originalOrderId, double captureAmount) {
static final int REQUEST_CODE_CONFIRM = 2002;
Intent intent = new Intent("es.android.redsys.mPOS.movil.tpvAndroid_PAYMENT_REQUEST");
intent.putExtra("amount", captureAmount);
intent.putExtra("type", 11); // 11 = Confirmação de Pré-autorização
intent.putExtra("original_order", originalOrderId); // Obrigatório
try {
startActivityForResult(intent, REQUEST_CODE_CONFIRM);
} catch (ActivityNotFoundException e) {
// Trata a ausência da aplicação Get Smart
}
}Algumas configurações de estabelecimento permitem confirmar um valor inferior ao originalmente autorizado (captura parcial). Verifique seu contrato para validar se este recurso está disponível para sua conta.
Próximos Passos
Agora que você processou com sucesso uma transação de pré-autorização, você pode explorar mais recursos da integração Get Smart App2App:
- Referência de Parâmetros de Resposta - Especificações completas dos campos de resposta
- Estornar um Pagamento - Aprenda como reverter transações
- Referência de Parâmetros de Requisição - Especificações completas de parâmetros