Mercado Pago
Nesta página
Primeiros passos com a carteira do Mercado Pago#
Esta página fornece um guia completo para integrar com sucesso a Carteira Mercado Pago com DEUNA.
O Mercado Pago é a plataforma de pagamentos do Mercado Libre, projetada para processar transações com segurança na América Latina. Através de sua Carteira, os usuários podem armazenar fundos e cartões para efetuar pagamentos de forma rápida e eficiente.
Como funciona#
Check-out do Mercado Pago
- Suporta vários métodos de pagamento
- Cartões de crédito e débito
- Pagamentos em dinheiro (OXXO, Pago Fácil, etc.)
- Transferências bancárias (SPEI, PSE, etc.)
- Compre Agora, Pague Depois (Mercado Crédito) – disponível para usuários autenticados
- Saldo da conta Mercado Pago – disponível para usuários autenticados
Requisitos#
O conteúdo a seguir lista todos os requisitos para uma integração bem-sucedida com a Carteira Mercado Pago.
- Ambientes:
- Caixa de areia:
https://api.sandbox.deuna.io - Produção:
https://api.deuna.io
- Caixa de areia:
Etapas de integração#
Agora que os requisitos técnicos estão definidos, você pode iniciar a integração.
1. Configure o processador de pagamento
-
Adicione a carteira do Mercado Pago à sua Conexões no DEUNA Admin.
-
Procure por Carteira Mercado Pago e insira as credenciais da sua conta comercial.
-
Selecione os tipos de métodos de pagamento a serem disponibilizados na carteira.
Métodos de pagamento suportados por país
Método de pagamento
🇦🇷 Argentina
🇧🇷 Brasil
🇨🇱 Chile
🇨🇴 Colômbia
🇲🇽 México
🇵🇪 Perú
🇺🇾 Uruguai
Dinheiro da conta
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Crédito Digital
Mercado Crédito
Mercado Crédito
Mercado Crédito
Mercado Crédito
Mercado Crédito
Mercado Crédito
Mercado Crédito
ATM
–
–
–
–
Bancomer, Citibanamex, Santander
Pago Efectivo
–
Transferência Bancária
–
Pix
–
PSE
CLABE
Sim
–
Cartões de crédito
Visa, Mastercard, Amex, Diners, Naranja, Cabal, Tarjeta Shopping, Cencosud, Argencard, CMR
Visa, Mastercard, Amex, Hipercard, Elo
Visa, Mastercard, Amex, Magna, Presto
Visa, Mastercard, Amex, Diners, Codensa
Visa, Mastercard, Amex
Visa, Mastercard, Diners, Amex
Visa, Mastercard, Oca, Amex, Creditel, Líder
Cartões de Débito
Visa, Mastercard, Maestro, Cabal
Débito Virtual Caixa*, Elo*
Visa, Mastercard, RedCompra
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visto
Cartões pré-pagos
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard, Mercado Pago
Visa, Mastercard
Visa, Mastercard
Pagamentos em dinheiro (ingressos)
Rapipago*, Pago Fácil*
Boleto
–
Efeito
OxxoPay (dinheiro)
–
Abitab, Pagos Vermelhos
Cartões de voucher
–
Alelo, Pluxée
–
–
–
–
–
Criptomoeda
–
Ethereum, Bitcoin
–
–
–
–
–
-
Defina o prazo de validade para preferências e métodos de pagamento offline.
-
Modo Binário
Modo Binário é uma configuração do Mercado Pago que simplifica o gerenciamento do status do pagamento. Quando ativado, um pagamento só pode ter dois status finais: approved ou rejected, eliminando a possibilidade de status intermediários como pending ou in_process.
Por padrão, a integração da DEUNA com o Mercado Pago opera com Modo binário desativado. Isso significa que é possível receber status de pagamentos intermediários, como
pendingouin_process, que deve ser tratado adequadamente no fluxo do lojista.
2. Crie um pedido
Para efetuar uma compra, você deve primeiro criar um pedido na DEUNA.
Siga os passos para Crie um pedido.
A API retornará um order_token que é usado em todo o fluxo.
Campos obrigatórios:
| Campo | Descrição | Valor |
|---|---|---|
order.store_code | Código de loja exclusivo | all |
order.payment_method | Tipo de meio de pagamento da DEUNA. | mercadopago_wallet |
order.items_total_amount | Quantidade total de itens sem impostos ou descontos. | 2000 |
Considerações:
- Sobre
order.items:total_amount.original_amountdeve serunit_price.amount * quantity.total_amount.amountdeve ser((unit_price.amount + tax_amount.amount) * quantity) - total_amount.total_discount.total_amount.total_discounté o valor total dos descontos pela quantidade de itens.
order.items_total_amounté a soma dos preços unitários dos itens. Esse valor, maisorder.total_tax_amounte menosorder.discount_amount, deve corresponderorder.total_amount.order.sub_totalé a soma do preço unitário dos itens menos os descontos. Esse valor, maisorder.total_tax_amount, deve corresponderorder.total_amount.
Devolução do site do comerciante
Ao criar o pedido, preencha order.callback_urls para que o Mercado Pago possa redirecionar o comprador de volta ao seu site após cada resultado de pagamento. Forneça os três URLs de retorno de chamada (on_success, on_pending, on_failed) conforme mostrado abaixo.
curl --request POST \
--url https://api.sandbox.deuna.io/merchants/orders \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"order": {
...
"callback_urls": {
"on_success": "https://yourdomain.com/success",
"on_pending": "https://yourdomain.com/pending",
"on_failed": "https://yourdomain.com/failed"
},
...
}
}'const response = await fetch("https://api.sandbox.deuna.io/merchants/orders", {
method: "POST",
headers: {
"accept": "application/json",
"content-type": "application/json"
},
body: "{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"https://yourdomain.com/success\",\n \"on_pending\": \"https://yourdomain.com/pending\",\n \"on_failed\": \"https://yourdomain.com/failed\"\n },\n ...\n }\n }"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/orders",
headers={
"accept": "application/json",
"content-type": "application/json"
},
data="{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"https://yourdomain.com/success\",\n \"on_pending\": \"https://yourdomain.com/pending\",\n \"on_failed\": \"https://yourdomain.com/failed\"\n },\n ...\n }\n }",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json"
],
CURLOPT_POSTFIELDS => "{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"https://yourdomain.com/success\",\n \"on_pending\": \"https://yourdomain.com/pending\",\n \"on_failed\": \"https://yourdomain.com/failed\"\n },\n ...\n }\n }"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders"))
.header("accept", "application/json")
.header("content-type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"https://yourdomain.com/success\",\n \"on_pending\": \"https://yourdomain.com/pending\",\n \"on_failed\": \"https://yourdomain.com/failed\"\n },\n ...\n }\n }"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/orders", strings.NewReader("{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"https://yourdomain.com/success\",\n \"on_pending\": \"https://yourdomain.com/pending\",\n \"on_failed\": \"https://yourdomain.com/failed\"\n },\n ...\n }\n }"))
if err != nil { panic(err) }
request.Header.Set("accept", "application/json")
request.Header.Set("content-type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}Devolução do aplicativo do comerciante
Para fluxos iOS/Android que abrem o aplicativo nativo do Mercado Pago, configure os mesmos callback_urls usando os esquemas de deep link do seu aplicativo para que o comprador possa retornar ao seu aplicativo assim que o resultado do pagamento for conhecido.
curl --request POST \
--url https://api.sandbox.deuna.io/merchants/orders \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"order": {
...
"callback_urls": {
"on_success": "yourapp://success",
"on_pending": "yourapp://pending",
"on_failed": "yourapp://failed"
},
...
}
}'const response = await fetch("https://api.sandbox.deuna.io/merchants/orders", {
method: "POST",
headers: {
"accept": "application/json",
"content-type": "application/json"
},
body: "{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"yourapp://success\",\n \"on_pending\": \"yourapp://pending\",\n \"on_failed\": \"yourapp://failed\"\n },\n ...\n }\n }"
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();import requests
response = requests.request(
"POST",
"https://api.sandbox.deuna.io/merchants/orders",
headers={
"accept": "application/json",
"content-type": "application/json"
},
data="{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"yourapp://success\",\n \"on_pending\": \"yourapp://pending\",\n \"on_failed\": \"yourapp://failed\"\n },\n ...\n }\n }",
)
response.raise_for_status()
data = response.json()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sandbox.deuna.io/merchants/orders",
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json"
],
CURLOPT_POSTFIELDS => "{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"yourapp://success\",\n \"on_pending\": \"yourapp://pending\",\n \"on_failed\": \"yourapp://failed\"\n },\n ...\n }\n }"
]);
$response = curl_exec($curl);
curl_close($curl);import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sandbox.deuna.io/merchants/orders"))
.header("accept", "application/json")
.header("content-type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"yourapp://success\",\n \"on_pending\": \"yourapp://pending\",\n \"on_failed\": \"yourapp://failed\"\n },\n ...\n }\n }"))
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
request, err := http.NewRequest("POST", "https://api.sandbox.deuna.io/merchants/orders", strings.NewReader("{\n \"order\": {\n ...\n \"callback_urls\": {\n \"on_success\": \"yourapp://success\",\n \"on_pending\": \"yourapp://pending\",\n \"on_failed\": \"yourapp://failed\"\n },\n ...\n }\n }"))
if err != nil { panic(err) }
request.Header.Set("accept", "application/json")
request.Header.Set("content-type", "application/json")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
body, _ := io.ReadAll(response.Body)
fmt.Println(string(body))
}3. Escolha o tipo de integração
Depois de criar um pedido, você pode processar pagamentos usando nosso widget de pagamento por meio de qualquer uma de nossas plataformas SDK suportadas:
Integrações SDK disponíveis: