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
transaction_qualifierQualificador da transação, como Prepaid, para indicar cartão pré-pago

Exemplos de Retorno

Pagamento feito com Debito

Sucesso
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

Encerrou o pagamento
deeplinktest://pay-response?code=2&message=Usu%C3%A1rio%20encerrou%20o%20aplicativo
1016 - Não Autorizado
"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

Jornada: Integrar por Deeplink
Etapa 4 de 11