Integrar o fluxo de pagamento
O SDK do Mercado Pago oferece um conjunto abrangente de funcionalidades projetadas para simplificar e otimizar todo o processo de pagamentos.
Você poderá configurar, adaptar e automatizar o fluxo de cobrança conforme as demandas específicas de seu aplicativo. Isso abrange ações como gerir meios de pagamentos, otimizar fluxos de cobrança, gerir erros e até fazer o tratamento de pagamentos aprovados.
Veja a seguir como configurar cada uma dessas funcionalidades.
Para facilitar a integração de meios de pagamento em seu aplicativo, nosso SDK disponibiliza uma instância de PaymentsMethodsTools. A partir disso, utilizando a função getPaymentMethods é possível obter uma lista dos meios de pagamento disponíveis, que são apresentados em PaymentMethod.
Esse recurso permite recuperar os meios de pagamento suportados, de acordo com as especificações de cada país. Essas informações são fundamentais no momento de iniciar o fluxo de pagamento.
FEEDING_VOUCHER_LIST) como meio de pagamento (paymentMethod) deverá ser solicitada com a equipe comercial responsável por sua integração.Veja abaixo um exemplo de como acessar essa função pelo objeto MPManager e obter os meios de pagamento disponíveis de acordo com o país.
MPManager.paymentMethodsTools.getPaymentMethods { response ->
response
.doIfSuccess { result ->
// você pode renderizar a lista de métodos de pagamento em um recycler view
}.doIfError { exception ->
// tratar o erro
}
}
/**
* Consulta o status de um pagamento usando a referência do pagamento
* @param paymentReference Referência do pagamento (descrição inserida no campo)
*/
public static void getPaymentStatus(String paymentReference) {
PaymentStatus paymentStatus = MPManager.INSTANCE.getPaymentStatus();
paymentStatus.getPaymentStatus(paymentReference, response -> {
doIfSuccess(response, result -> {
Log.i("PaymentStatusManager", "Payment status: " + result);
return null;
});
doIfError(response, error -> {
Log.e("PaymentStatusManager", "Payment status error: " + error.getMessage());
return null;
});
return null;
});
}
Para iniciar o fluxo de pagamento no seu SmartApp com o SDK do Mercado Pago, utilize a função PaymentFlow, disponível na classe launchPaymentFlow. Ela permite gerenciar as respostas por meio de callbacks, simplificando tanto a implementação quanto o controle posterior.
Ao implementar o objeto PaymentFlowRequestData, atente-se à definição do parâmetro paymentMethod, que pode variar conforme o país da integração. Utilize o recurso para consultar os meios de pagamento disponíveis e configure-os de acordo com cada país.
FEEDING_VOUCHER_LIST) como meio de pagamento (paymentMethod) deverá ser solicitada com a equipe comercial responsável por sua integração.Veja abaixo um exemplo de como acessar essa função pelo objeto MPManager e iniciar o fluxo de pagamento.
val paymentFlow = MPManager.paymentFlow
val paymentFlowRequestData = PaymentFlowRequestData(
amount = 10.0,
description = "test description",
paymentMethod = paymentMethod, // este parâmetro é obtido pelo método getPaymentMethods
printOnTerminal = false, // campo opcional se lançar o pagamento sem impressão no terminal
taxes = listOf(
Tax(
payerCondition = PayerCondition.PAYMENT_TAXABLE_IVA
)
), // campo opcional se lançar o pagamento com taxas
)
paymentFlow.launchPaymentFlow(
paymentFlowRequestData = paymentFlowRequestData
) { response ->
response.doIfSuccess { result ->
// tratar sucesso utilizando uma mensagem
}.doIfError { error ->
// tratar o erro
}
}
final PaymentFlow paymentFlow = MPManager.INSTANCE.getPaymentFlow();
final String amount = "2.0";
final String description = "Payment description";
final ArrayList<Tax> taxes = new ArrayList<>();
taxes.add(new Tax(
PayerCondition.PAYMENT_TAXABLE_IVA
));
final PaymentFlowData paymentFlowData = new PaymentFlowData(
amount,
description,
PaymentMethod, // este parâmetro é obtido pelo método getPaymentMethods
6, // campo opcional se lançar o pagamento com parcelas
false, // campo opcional se lançar o pagamento sem impressão no terminal
taxes, // campo opcional se lançar o pagamento com taxas
);
final Function1<MPResponse<PaymentResponse>, Unit> callback = (final MPResponse<PaymentResponse> response) -> {
if (response.getStatus() == ResponseStatus.SUCCESS) {
// manejo de éxito utilizando un mensaje
} else {
// manejo del error
}
return Unit.INSTANCE;
};
paymentFlow.launchPaymentFlow(paymentFlowData, callback);
| Parâmetro | Tipo | Descrição | Obrigatoriedade |
amount | String | Valor do pagamento. | Sim |
description | String | Descrição do fluxo de pagamento. Esse campo deverá conter uma informação única por transação porque será utilizado como base para consulta do status do pagamento. | Sim |
paymentMethod | String | O meio de pagamento a ser configurado. | Não |
printOnTerminal | Boolean | Flag para impressão automática do comprovante de pagamento no terminal (padrão: true ). | Não |
taxes | List | Lista de sinalizadores para inclusão de taxas na venda, sendo: - PAYMENT_EXEMPT_IVA: pagamento isento de IVA. - PAYMENT_TAXABLE_IVA: pagamento com taxa de IVA. | Não |
Em caso de sucesso, a resposta será semelhante ao exemplo abaixo.
kotlin
paymentFlow.launchPaymentFlow( paymentFlowRequestData = paymentFlowRequestData ) { response -> response.doIfSuccess { result -> // result é um objeto PaymentResponse com as seguintes informações: println("Referência de pagamento: ${result.paymentReference}") println("Método de pagamento: ${result.paymentMethod}") println("Valor: ${result.paymentAmount}") println("Data de criação: ${result.paymentCreationDate}") println("Últimos 4 dígitos: ${result.paymentLastFourDigits}") println("Terminal: ${result.paymentSnDevice}") println("Usuário: ${result.paymentBrandName}") println("Gorjeta: ${result.tipAmount}") println("Referência externa: ${result.externalReference}") }.doIfError { error -> // error contém a mensagem de erro println("Erro: ${error.message}") } }
| Parâmetro | Tipo | Descrição |
paymentReference | String | Número que serve como identificador único da transação. |
paymentMethod | PaymentMethod | Meio de pagamento utilizado para realizar o pagamento (ex: CREDIT_CARD, DEBIT_CARD, etc.). |
paymentAmount | Number | Valor do pagamento realizado. |
paymentCreationDate | String | Data em que a transação foi criada. |
paymentLastFourDigits | String | Últimos 4 dígitos do cartão do cliente utilizado no pagamento. |
paymentSnDevice | String | Número de série do terminal Point Smart que realizou a transação. |
paymentBrandName | String | Nome do usuário cadastrado no terminal Point Smart. |
tipAmount | String | Valor da gorjeta cobrada no pagamento. |
externalReference | String | Referência externa do pagamento. |
paymentStatusError | String | Campo para registrar problemas e erros da transação. Vazio se o pagamento foi bem-sucedido. |
Nosso SDK apresenta um método para consultar o status de um pagamento aprovado ao finalizar o fluxo na tela de conclusão do pagamento.
A consulta é realizada a partir da descrição do pagamento. Por isso, esse campo deve conter uma informação única por transação. Caso múltiplos pagamentos utilizem a mesma descrição, o sistema atualizará o status com base no pagamento mais recente e exibirá apenas os dados do último registro associado.
Implementar a consulta de status
Com o método getPaymentStatus, que recebe como parâmetro a descrição (description) correspondente ao pagamento, se executa uma consulta em nossa base de dados e é retornado um objeto do tipo PaymentResponse, com todas as informações relacionadas ao pagamento aprovado.
A função parseResponse, disponível em PaymentFlow, permite analisar as respostas de cada transação. Ao converter os dados do URI em um objeto PaymentResponse, é possível acessar informações como referência do pagamento, meio utilizado e eventuais erros associados.
Veja abaixo um exemplo de como implementar esse recurso.
// Inicializamos o status de pagamento através do MPManager
private val paymentStatus = MPManager.paymentStatus
// Este é o resultado do que é escrito no campo de descrição
private val paymentReference = ""
paymentStatus.getPaymentStatus(paymentReference) { response ->
response.doIfSuccess {
// Tratar o caso de sucesso com o objeto PaymentResponse
}.doIfError {
// Tratar o caso de erro
}
}
// Inicializamos o status de pagamento através do MPManager
PaymentStatus paymentStatus = MPManager.getPaymentStatus();
// Este é o resultado do que é escrito no campo de descrição
String paymentReference = "";
paymentStatus.getPaymentStatus(paymentReference, new PaymentStatusCallback() {
@Override
public void onSuccess(PaymentResponse result) {
// tratar o caso de sucesso com o objeto PaymentResponse
}
@Override
public void onError(Throwable error) {
// Tratar o caso de erro
}
});
Em caso de sucesso, a resposta será semelhante ao exemplo abaixo.
kotlin
// Inicializamos o status de pagamento através do MPManager private val paymentStatus = MPManager.paymentStatus // Este é o valor do campo de descrição usado para buscar o status private val paymentReference = "12345678" paymentStatus.getPaymentStatus(paymentReference) { response -> response.doIfSuccess { result -> // result é um objeto ApprovedPaymentData com as seguintes informações: println("ID do pagamento: ${result.paymentId}") println("Tipo de pagamento: ${result.type}") println("Valor: ${result.amount}") println("Data de criação: ${result.creationDate}") println("Número de série do terminal: ${result.snDevice}") println("Status: ${result.status}") println("Marca: ${result.brandName}") println("Últimos 4 dígitos: ${result.lastFourDigits}") println("Referência externa: ${result.externalReference}") println("Descrição: ${result.description}") println("Gorjeta: ${result.tip}") }.doIfError { error -> // Tratar o caso de erro println("Erro: ${error.message}") } }
| Parâmetro | Tipo | Descrição |
paymentId | String | ID do pagamento. |
type | String | Tipo de pagamento. |
amount | Number | Valor do pagamento realizado. |
creationDate | String | Data de criação do pagamento. |
snDevice | String | Número de série do terminal Point Smart que realizou a transação. |
status | String | Status do pagamento. |
brandName | String | Nome do usuário cadastrado no terminal Point Smart. |
lastFourDigits | String | Últimos 4 dígitos do cartão do cliente utilizado no pagamento. |
externalReference | String | Referência externa do pagamento. |
description | String | Descrição da transação. |
tip | String | Valor da gorjeta cobrada no pagamento. |
paymentStatusError | String | Campo para registrar problemas e erros da transação. Vazio se o pagamento foi bem-sucedido. |