MercadoPago
Comenzando con la Cartera de Mercado Pago#
Esta página proporciona una guía completa para integrar exitosamente Mercado Pago Wallet con DEUNA.
Mercado Pago es la plataforma de pagos de Mercado Libre, diseñada para procesar transacciones de forma segura en América Latina. A través de su Wallet, los usuarios pueden almacenar fondos y tarjetas para realizar pagos de forma rápida y eficiente.
Cómo funciona#
Pago de Mercado Pago
- Admite múltiples métodos de pago
- Tarjetas de crédito y débito
- Pagos en efectivo (OXXO, Pago Fácil, etc.)
- Transferencias bancarias (SPEI, PSE, etc.)
- Compre Ahora Pague Después (Mercado Crédito) – disponible para usuarios autenticados
- Saldo de cuenta de Mercado Pago – disponible para usuarios autenticados
Requisitos#
El siguiente contenido enumera todos los requisitos para una integración exitosa con Mercado Pago Wallet.
- Entornos:
- Caja de arena:
https://api.sandbox.deuna.io - Producción:
https://api.deuna.io
- Caja de arena:
Pasos de integración#
Ahora que los requisitos técnicos están definidos, puede comenzar la integración.
1. Configurar el procesador de pagos
-
Agrega Cartera de Mercado Pago a tu Conexiones en el Admin de DEUNA.
-
Buscar Billetera Mercado Pago e ingrese las credenciales de su cuenta comercial.
-
Seleccione los tipos de métodos de pago que estarán disponibles en la billetera.
Métodos de pago admitidos por país
Método de pago
🇦🇷 Argentina
🇧🇷 Brasil
🇨🇱 Chile
🇨🇴 colombia
🇲🇽 México
🇵🇪 Perú
🇺🇾 Uruguay
Dinero de la cuenta
MercadoPago
MercadoPago
MercadoPago
MercadoPago
MercadoPago
MercadoPago
MercadoPago
Crédito Digital
Mercado Credito
Mercado Credito
Mercado Credito
Mercado Credito
Mercado Credito
Mercado Credito
Mercado Credito
ATM
–
–
–
–
Bancomer, Citibanamex, Santander.
PagoEfectivo
–
Transferencia bancaria
–
foto
–
PSE
CLABE
Yapé
–
Tarjetas 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
Tarjetas de débito
Visa, Mastercard, Maestro, Cabal
Débito Virtual Caixa*, Elo*
Visa, Mastercard, RedCompra
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
visa
Tarjetas Prepago
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard, Mercado Pago
Visa, Mastercard
Visa, Mastercard
Pagos en efectivo (boletos)
Rapipago*, Pago Fácil*
Boleto
–
Efectividad
OxxoPay (Efectivo)
–
Abitab, Pagos Rojos
Tarjetas de vales
–
Alelo, Pluxee
–
–
–
–
–
Criptomoneda
–
Etereum, Bitcoin
–
–
–
–
–
-
Establezca el tiempo de vencimiento para preferencias y métodos de pago fuera de línea.
-
Modo binario
Modo binario es una configuración de Mercado Pago que simplifica la gestión del estado de los pagos. Cuando está habilitado, un pago sólo puede tener dos estados finales: approved o rejected, eliminando la posibilidad de estados intermedios como pending o in_process.
Por defecto, la integración de DEUNA con Mercado Pago opera con Modo binario deshabilitado. Esto significa que es posible recibir estados de pago intermedios, como
pendingoin_process, que debe manejarse adecuadamente en el flujo del comerciante.
2. Crea un pedido
Para realizar una compra, primero debes crear un pedido en DEUNA.
Siga los pasos para Crear un pedido.
La API devolverá un order_token que se utiliza durante todo el flujo.
Campos obligatorios:
| Campo | Descripción | Valor |
|---|---|---|
order.store_code | Código de tienda único | all |
order.payment_method | Tipo de método de pago de DEUNA. | mercadopago_wallet |
order.items_total_amount | Importe total de artículos sin impuestos ni descuentos. | 2000 |
Consideraciones:
- Acerca de
order.items:total_amount.original_amountdebe serunit_price.amount * quantity.total_amount.amountdebe ser((unit_price.amount + tax_amount.amount) * quantity) - total_amount.total_discount.total_amount.total_discountes el valor total de los descuentos por la cantidad de artículos.
order.items_total_amountes la suma de los precios unitarios de los artículos. Esta cantidad, másorder.total_tax_amounty menosorder.discount_amount, debe coincidirorder.total_amount.order.sub_totales la suma del precio unitario de los artículos menos los descuentos. Esta cantidad, másorder.total_tax_amount, debe coincidirorder.total_amount.
Devolución del sitio comercial
Al crear el pedido, complete order.callback_urls para que Mercado Pago pueda redirigir al comprador a su sitio web después de cada resultado de pago. Proporcione las tres URL de devolución de llamada (on_success, on_pending, on_failed) como se muestra a continuación.
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))
}Devolución de la aplicación comercial
Para flujos de iOS/Android que abren la aplicación nativa de Mercado Pago, configure las mismas callback_urls usando los esquemas de enlaces profundos de su aplicación para que el comprador pueda regresar a su aplicación una vez que conozca el resultado del pago.
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. Elige el tipo de integración
Después de crear un pedido, puede procesar pagos utilizando nuestro widget de pago a través de cualquiera de nuestras plataformas SDK compatibles:
Integraciones de SDK disponibles: