Getnet DocsGetnet Docs

Início rápido

Este guia prático mostra a integração básica entre seu aplicativo Android e o aplicativo de pagamento Getnet via Deeplink. Ao final deste tutorial, você terá disparado um comando de pagamento e processado a resposta da transação.

Antes de começar

Antes de seguir os passos abaixo, confirme que você atende a estes pré-requisitos.

  • Você precisa entender o que é uma chamada de Polling (getnet://payment/v1/polling). Ela verifica se o Getnet Payment App está conectado e pronto para receber comandos antes do início de uma transação.

  • Conhecimento básico de Intents do Android e de onActivityResult.

Passo 1: valide a conexão do terminal (polling)

Antes de iniciar um pagamento, a prática recomendada é executar uma operação de Polling. Essa requisição não financeira verifica se o Getnet Payment App está conectado e pronto para processar transações.

Para fazer essa verificação, dispare um Intent com a seguinte URI:

URI de Polling: getnet://payment/v1/polling

Veja um exemplo de implementação:

val POLLING_REQUEST_CODE = 2001
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/polling"))
startActivityForResult(intent, POLLING_REQUEST_CODE)

o Polling não exige nenhum parâmetro. Envie o deeplink e o terminal responde com o status atual.

O app Getnet retorna os seguintes parâmetros:

ParâmetroTipoDescrição
resultStringResultado da operação: "0" para sucesso (terminal pronto).
resultDetailsStringMensagem detalhada sobre o status do terminal.

Se o result for "0", você está liberado para seguir para o pagamento.

Passo 2: inicialize a transação de pagamento

A comunicação acontece por meio de um Intent com uma URI específica. Neste tutorial, você cria uma transação de pagamento com a seguinte URI:

URI de pagamento: getnet://payment/v1/payment

Para iniciar um pagamento, monte um Intent com parâmetros de requisição específicos passados como extras. A tabela abaixo traz os parâmetros obrigatórios da transação de pagamento:

ParâmetroTipoObrigatórioDescrição
amountStringSimValor da transação com duas casas decimais implícitas (ex.: “10000” = $100.00)
originalAmountStringSimValor em moeda local para realizar a transação
receiptCodeStringSimCódigo de identificação a ser impresso no comprovante
callerIdStringSimIdentificador único para correlacionar a requisição com a resposta

Parâmetros opcionais

ParâmetroTipoDescrição
paymentMethodString"1" para cartão, "2" para QR Code. Pula a tela de seleção do meio de pagamento.
operationModeString"1" para modo calculado, "0" para manual (padrão)
skipReceiptStringDefina como "true" para ocultar a tela de visualização do comprovante do cliente após a aprovação
allowPrintCurrentTransactionStringDefina como "true" para a Getnet cuidar da impressão do comprovante, "false" para receber os dados brutos do comprovante

Veja um exemplo de implementação em Android:

private val PAYMENT_REQUEST_CODE = 1001

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Define the payment URI
    val paymentUri = Uri.parse("getnet://payment/v1/payment")
    
    // Configure the Intent with the required parameters
    val intent = Intent(Intent.ACTION_VIEW, paymentUri)
    intent.putExtra("amount", "10000")        // $100.00
    intent.putExtra("originalAmount", "10000")
    intent.putExtra("receiptCode", "123456") 
    intent.putExtra("callerId", "payment_001")
    intent.putExtra("allowPrintCurrentTransaction", "true")
    
    // Start the activity and expect a result
    startActivityForResult(intent, PAYMENT_REQUEST_CODE)
}

Passo 3: processe a resposta do pagamento

Quando o processo de pagamento termina, o app Getnet retorna um Intent com os resultados da transação. Extraia esses extras para verificar se o pagamento foi aprovado.

Parâmetros de resposta

ParâmetroTipoDescrição
resultStringResultado da operação: "0" para sucesso; qualquer outro valor indica falha ou cancelamento
resultDetailsStringMensagem detalhada sobre o resultado da transação
amountStringValor final cobrado com duas casas decimais implícitas
receiptCodeStringCódigo de identificação impresso no comprovante
callerIdStringO identificador único enviado na requisição
nsuStringCódigo de autorização da transação Getnet (único por terminal)
authorizationCodeStringCódigo de autorização fornecido pelo emissor do cartão
brandStringBandeira do cartão usada na transação (ex.: “VISA”, “MASTERCARD”)
cardLastDigitsStringÚltimos 4 dígitos do cartão usado
cardBinStringPrimeiros 8 dígitos do cartão (BIN)
inputTypeStringForma de leitura do cartão: "021" (magnético), "051" (chip), "071" (aproximação), "801" (fallback)
installmentsStringNúmero de parcelas (se aplicável)
planIdStringID do plano de parcelamento usado (se aplicável)
gmtDateTimeStringData e hora da transação em formato GMT (MMDDhhmmss)
automationSlipStringDados do comprovante em formato JSON (se allowPrintCurrentTransaction = "false")

Veja um exemplo de resposta de uma transação bem-sucedida:

{
  "result": "0",
  "resultDetails": "APPROVED",
  "amount": "10000",
  "tip": "0",
  "receiptCode": "123456",
  "callerId": "payment_001",
  "nsu": "57003",
  "nsuLastSuccesfullMessage": "750057003",
  "paymentType": "credit",
  "brand": "VISA",
  "inputType": "051",
  "installments": "1",
  "planId": "",
  "Interest": "false",
  "gmtDateTime": "0612211725",
  "authorizationCode": "004433",
  "cardBin": "51559030",
  "cardLastDigits": "8015",
  "automationSlip": ""
}

Use o método onActivityResult para extrair os parâmetros de resposta. Veja um exemplo de implementação para tratar a resposta do pagamento:

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

    if (requestCode == PAYMENT_REQUEST_CODE && resultCode == RESULT_OK) {
        val extras = data?.extras ?: return

        // Transaction Status
        val result = extras.getString("result")
        val resultDetails = extras.getString("resultDetails")

        if (result == "0") {
            // Payment successful
            val nsu = extras.getString("nsu")
            val authCode = extras.getString("authorizationCode")
            val amount = extras.getString("amount")
            val brand = extras.getString("brand")
            val cardLastDigits = extras.getString("cardLastDigits")
            
            // Log or display success
            Log.d("Payment", "Success! NSU: $nsu, Auth: $authCode")
            
        } else {
            // Payment failed or cancelled
            Log.e("Payment", "Failed: $resultDetails")
            // Handle error appropriately
        }
    }
}

Exemplo completo de implementação

Veja um exemplo completo que reúne os três passos:

class PaymentActivity : AppCompatActivity() {

    private val POLLING_REQUEST_CODE = 2001
    private val PAYMENT_REQUEST_CODE = 1001

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // Step 1: Verify terminal is ready
        val pollingIntent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/polling"))
        startActivityForResult(pollingIntent, POLLING_REQUEST_CODE)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        
        if (resultCode == RESULT_OK && data != null) {
            val result = data.extras?.getString("result")
            
            when (requestCode) {
                POLLING_REQUEST_CODE -> {
                    // If terminal is ready, proceed to payment
                    if (result == "0") {
                        // Step 2: Initiate payment
                        val paymentIntent = Intent(Intent.ACTION_VIEW, Uri.parse("getnet://payment/v1/payment"))
                        paymentIntent.putExtra("amount", "10000")
                        paymentIntent.putExtra("originalAmount", "10000")
                        paymentIntent.putExtra("receiptCode", "123456")
                        paymentIntent.putExtra("callerId", "payment_001")
                        paymentIntent.putExtra("allowPrintCurrentTransaction", "true")
                        startActivityForResult(paymentIntent, PAYMENT_REQUEST_CODE)
                    } else {
                        // Terminal not ready
                        val resultDetails = data.extras?.getString("resultDetails")
                        Log.e("Polling", "Terminal not ready: $resultDetails")
                    }
                }
                
                PAYMENT_REQUEST_CODE -> {
                    // Step 3: Handle payment response
                    if (result == "0") {
                        val nsu = data.extras?.getString("nsu")
                        val authCode = data.extras?.getString("authorizationCode")
                        val amount = data.extras?.getString("amount")
                        // Payment successful
                        Log.d("Payment", "Success! NSU: $nsu")
                    } else {
                        val resultDetails = data.extras?.getString("resultDetails")
                        // Payment failed or cancelled
                        Log.e("Payment", "Failed: $resultDetails")
                    }
                }
            }
        }
    }
}

Próximos passos

Parabéns! Você concluiu a integração básica entre seu aplicativo Android e o Getnet Payment App via Deeplink.

Agora você tem uma base funcional para processar pagamentos pelo Getnet Payment App. Com esse conhecimento, você pode expandir a integração para cenários mais complexos. Você também pode implementar outras opções de pagamento e criar uma experiência de pagamento robusta para seus usuários.