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.
Campo | Obrigatório? | Descrição |
---|---|---|
amount | Não | Valor do pagamento, em centavos. Aceita valores entre 0 e 999999999. |
transaction_type | Não | Modalidade do pagamento: DEBIT, CREDIT, VOUCHER, INSTANT_PAYMENT e PIX. Esse campo aceita valor nulo. |
installment_type | Não | Tipo de parcelamento: MERCHANT (parcelado sem juros), ISSUER (parcelado com juros) e NONE (à vista). Esse campo aceita valor nulo. |
installment_count | Não | Quantidade de parcelas. Aceita valores entre 2 e 99. |
order_id | Não | Identificador do pedido. Aceita valores até 9223372036854775807. Caso queira utilizá-lo, habilitar a funcionalidade no aplicativo de Ajustes do POS. |
editable_amount | Não | Permite que o valor do pagamento seja editado diretamente no aplicativo de Pagamento. Valor 1 para true e 0 para false. |
return_scheme | Sim | Determina 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())
}
}
chave | Descrição |
---|---|
cardholder_name | Nome impresso no cartão |
itk | Initiator Transaction Key |
atk | Authorizer Transaction Key |
authorization_date_time | Data/hora da autorização |
brand | Bandeira do cartão |
order_id | Identificador do Pedido |
authorization_code | Código da autorização da transação |
installment_count | Quantidade de parcelas |
pan | sequencia do PAN |
type | Tipo da Transação DEBIT, CREDIT, VOUCHER, INSTANT_PAYMENT e PIX) |
entry_mode | Identifica o modo de entrada do ponto de venda. (Tarja, CHIP & PIN, etc). |
account_id | identificador da carteira digital |
customer_wallet_provider_id | identificador do Provider da carteira digital |
code | código de sucesso ou erro |
transaction_qualifier | Qualificador da transação, como Prepaid , para indicar cartão pré-pago |
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
Chave | Descrição |
---|---|
code | Código de erro |
mensagem | Mensagem de erro |