Mercado Pago
Iniziare con Mercado Pago Wallet#
Questa pagina fornisce una guida completa per integrare con successo Mercado Pago Wallet con DEUNA.
Mercado Pago è la piattaforma di pagamento di Mercado Libre, progettata per elaborare in modo sicuro le transazioni in America Latina. Attraverso il suo Portafoglio, gli utenti possono memorizzare fondi e carte per effettuare pagamenti in modo rapido ed efficiente.
Come funziona#
Mercado Pago Checkout
- Supporta più metodi di pagamento
- Carte di credito e di debito
- Pagamenti in contanti (OXXO, Pago Fácil, ecc.)
- Trasferimenti bancari (SPEI, PSE, ecc.)
- Acquista ora Pay Later (Mercado Crédito) – disponibile per gli utenti autenticati
- Mercado Bilancio account Pago – disponibile per utenti autenticati
Requisiti#
I seguenti contenuti elencano tutti i requisiti per una corretta integrazione con il Portafoglio Mercado Pago.
- Ambienti:
- Sandbox:
https://api.sandbox.deuna.io - Produzione:
https://api.deuna.io
- Sandbox:
Procedura di integrazione#
Ora che i requisiti tecnici sono definiti, è possibile iniziare l'integrazione.
1. Configurare il processore di pagamento
-
Aggiungi Mercado Pago Portafoglio al tuo Collegamenti nell'Admin DEUNA.
-
Ricerca per Portafoglio Mercado Pago e inserire le credenziali del tuo account aziendale.
-
Selezionare i tipi di metodi di pagamento da mettere a disposizione nel portafoglio.
Metodi di pagamento supportati per Paese
Metodo di pagamento
🇦🇷 Argentina
🇧🇷 Brasile
🇨🇱 Cile
🇨🇴 Colombia
🇲🇽 Messico
🇵🇪 Perù
🇺🇾 Uruguay
Conto di pagamento
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Mercado Pago
Credito digitale
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
PagoEfectivo
–
Trasferimento bancario
–
Pix
–
PSE
CLABE
Yape
–
Carte di credito
Visa, Mastercard, Amex, Diners, Naranja, Cabal, Shopping Tarjeta, 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
Carte di debito
Visa, Mastercard, Maestro, Cabala
Debito virtuale Caixa*, Elo*
Visa, Mastercard, RedCompra
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visto
Carte prepagate
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard
Visa, Mastercard, Mercado Pago
Visa, Mastercard
Visa, Mastercard
Pagamento in contanti (tassi)
Rapipago*, Pago Fácil*
Boleto
–
Efettura
OxxoPay (Cash)
–
Abitab, Red Pagos
Carte di voucher
–
Alelo, Pluxee
–
–
–
–
–
Cryptocurrency
–
Ethereum, Bitcoin
–
–
–
–
–
-
Impostare il tempo di scadenza per le preferenze e metodi di pagamento offline.
-
Modalità binaria
Modalità binaria è un'impostazione Mercado Pago che semplifica la gestione dello stato di pagamento. Quando è abilitato, un pagamento può avere solo due stati finali: approved o rejected, eliminando la possibilità di status intermedio come pending o in_process.
Per impostazione predefinita, l'integrazione di DEUNA con Mercado Pago opera con Modalità binaria disattivata. Questo significa che è possibile ricevere gli stati di pagamento intermedio, come
pendingoin_process, che deve essere gestito adeguatamente nel flusso del commerciante.
2. Creare un ordine
Per effettuare un acquisto, è necessario prima creare un ordine in DEUNA.
Seguire i passaggi per Creare un Ordine.
L'API restituirà un order_token che viene utilizzato durante il flusso.
Campi obbligatori:
| Campo | Descrizione | Valore |
|---|---|---|
order.store_code | Codice negozio unico | all |
order.payment_method | Tipo di metodo di pagamento del DEUNA. | mercadopago_wallet |
order.items_total_amount | Totale degli articoli senza tasse o sconti. | 2000 |
Considerazioni:
- Informazioni su
order.items:total_amount.original_amountdeve essereunit_price.amount * quantity.total_amount.amountdeve essere((unit_price.amount + tax_amount.amount) * quantity) - total_amount.total_discount.total_amount.total_discountè il valore totale degli sconti per la quantità di articoli.
order.items_total_amountè la somma dei prezzi unitari degli articoli. Questo importo, piùorder.total_tax_amounte menoorder.discount_amount, deve corrispondereorder.total_amount.order.sub_totalè la somma del prezzo unitario degli articoli meno gli sconti. Questo importo, piùorder.total_tax_amount, deve corrispondereorder.total_amount.
Ritorno del sito Merchant
Quando si crea l'ordine, si popula l'ordine. callback urls così Mercado Pago può reindirizzare il cliente al tuo sito web dopo ogni risultato di pagamento. Fornisci i tre URL di callback (on success, on pending, on failed) come mostrato di seguito.
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))
}Ritorno dell'app di Merchant
Per flussi iOS/Android che aprono l'app nativa di Mercado Pago, configurare lo stesso callback urls utilizzando i sistemi di link profondi della tua app in modo che il cliente possa tornare alla tua applicazione una volta che il risultato di pagamento è noto.
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. Scegliere il tipo di integrazione
Dopo aver creato un ordine, è possibile elaborare i pagamenti utilizzando il nostro Payment Widget attraverso una delle nostre piattaforme SDK supportate:
Integrazioni SDK disponibili: