Pagamento

Enviar um pagamento

Para fazer o pagamento, é preciso criar uma Intent, adicionando as informações como parâmetros dessa Intent.

val uriBuilder = Uri.Builder()
uriBuilder.authority("pay")
uriBuilder.scheme("payment-app")
uriBuilder.appendQueryParameter("return_scheme", "return_scheme")
uriBuilder.appendQueryParameter("amount", "amount")
uriBuilder.appendQueryParameter("editable_amount", "0/1")
uriBuilder.appendQueryParameter("transaction_type", "debit")
uriBuilder.appendQueryParameter("installment_type", "none")
uriBuilder.appendQueryParameter("installment_count", "2")
uriBuilder.appendQueryParameter("order_id", "123")

 val intent = Intent(Intent.ACTION_VIEW)
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 intent.data = uriBuilder.build()
 startActivity(intent)

Campos utilizados para envio

Todos os campos estão em formato String

🚧

Atenção

Se os campos opcionais não forem enviados via deeplink, serão solicitados no aplicativo de Pagamento.

CampoObrigatório?Descrição
amountNãoValor do pagamento, em centavos. Aceita valores entre 0 e 999999999.
transaction_typeNãoModalidade do pagamento: DEBIT, CREDIT, VOUCHER, INSTANT_PAYMENT e PIX. Esse campo aceita valor nulo.
installment_typeNãoTipo de parcelamento: MERCHANT (parcelado sem juros), ISSUER (parcelado com juros) e NONE (à vista). Esse campo aceita valor nulo.
installment_countNãoQuantidade de parcelas. Aceita valores entre 2 e 99.
order_idNãoIdentificador do pedido. Aceita valores até 9223372036854775807. Caso queira utilizá-lo, habilitar a funcionalidade no aplicativo de Ajustes do POS.
editable_amountNãoPermite que o valor do pagamento seja editado diretamente no aplicativo de Pagamento. Valor 1 para true e 0 para false.
return_schemeSimDetermina para onde será o retorno do deeplink. Deve ser o mesmo valor configurado no lugar da variável scheme no AndroidManifest.

Retorno do pagamento

Para conseguir o retorno do deeplink de pagamento, pode ser utilizada a função abaixo que captura a informação que foi retornada pela Intent.

🚧

Atenção

As mensagens de erro no pagamento são enviadas como Exception, por isso é importante utilizar alguma medida que capture as Exceptions emitidas. A função abaixo é apenas um exemplo de como pode ser implementado.

override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        try {
            Log.i("onNewIntent", intent?.data.toString())
            if (intent?.data != null) {
                Toast.makeText(this, intent.data.toString(), Toast.LENGTH_LONG).show()
                Log.i("Deeplink Response", intent.data.toString())
            }
        } catch (e: Exception) {
            Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show()
            Log.e("Deeplink error", e.toString())
        }
    }
chaveDescrição
cardholder_nameNome impresso no cartão
itkInitiator Transaction Key
atkAuthorizer Transaction Key
authorization_date_timeData/hora da autorização
brandBandeira do cartão
order_idIdentificador do Pedido
authorization_codeCódigo da autorização da transação
installment_countQuantidade de parcelas
pansequencia do PAN
typeTipo da Transação DEBIT, CREDIT, VOUCHER, INSTANT_PAYMENT e PIX)
entry_modeIdentifica o modo de entrada do ponto de venda. (Tarja, CHIP & PIN, etc).
account_ididentificador da carteira digital
customer_wallet_provider_ididentificador do Provider da carteira digital
codecódigo de sucesso ou erro

Exemplos de Retorno

Pagamento feito com Debito

deeplinktest://pay-response?code=0&amount=100&cardholder_name=JOAO%2FSILVA&itk=PB0419AL60480-1.17.7-2278-0003&atk=37820073187607&authorization_date_time=05%2F10%2F2022%2002%3A36%3A17&brand=MASTERCARD&authorization_code=187607&installment_count=0&pan=627303****2166&type=D%C3%A9bito&entry_mode=ICC

Exemplo Erro

deeplinktest://pay-response?code=2&message=Usu%C3%A1rio%20encerrou%20o%20aplicativo
"deeplinktest://pay-response?success=false&reason=1016&response_code=-6&code=-6&message=N%C3%A3o%20autorizada"
  
  // success=false
  // reason=1016 
	// message=N%C3%A3o%20autorizada (Não Autorizado) 
  

🚧

Código de Erro

Transação de sucesso o retorno é 0
diferente disso é considerado como erro

ChaveDescrição
codeCódigo de erro
mensagemMensagem de erro