Todos los medios de pago - Ejemplo de código - Mercado Pago Developers

Ejemplo de código (todos los medios de pago)

Para facilitar y optimizar su proceso de integración, ve a continuación un ejemplo completo de cómo incluir la Cuenta de Mercado Pago como medio de pago con Payment Brick.

Crea tu preferencia

Server-Side

Requerido para Cuenta de Mercado Pago.
          
<?php
  // SDK do Mercado Pago
  require __DIR__ .  '/vendor/autoload.php';
  // Agregar credenciales
  MercadoPago\SDK::setAccessToken('PROD_ACCESS_TOKEN');

  // Crear un objeto de preferencia
  $preference = new MercadoPago\Preference();

  // Crear un elemento en la preferencia
  $item = new MercadoPago\Item();
  $item->title = 'Meu produto';
  $item->quantity = 1;
  $item->unit_price = 75.56;
  $preference->items = array($item);

  // el $preference->purpose = 'wallet_purchase'; solo permite pagos registrados
  // para permitir pagos de guest, puede omitir esta propiedad
  $preference->purpose = 'wallet_purchase';
  $preference->save();
?>

        
          
// SDK de Mercado Pago
const mercadopago = require ('mercadopago');
// Agregar credenciales
mercadopago.configure({
 access_token: 'PROD_ACCESS_TOKEN'
});
 
// Crear un objeto de preferencia
let preference = {
  // el "purpose": "wallet_purchase" solo permite pagos registrados
  // para permitir pagos de guest, puede omitir esta propiedad
  "purpose": "wallet_purchase",
  "items": [
    {
      "id": "item-ID-1234",
      "title": "Meu produto",
      "quantity": 1,
      "unit_price": 75.76
    }
  ]
};

mercadopago.preferences.create(preference)
  .then(function (response) {
    // Este valor es el ID de preferencia que se enviará al ladrillo al inicio
    const preferenceId = response.body.id;
  }).catch(function (error) {
    console.log(error);
  });

        
          
// SDK de Mercado Pago
import com.mercadopago.MercadoPagoConfig;
// Agregar credenciales
MercadoPagoConfig.setAccessToken("PROD_ACCESS_TOKEN");

// Crear un objeto de preferencia
PreferenceClient client = new PreferenceClient();

// Crear un elemento en la preferencia
List<PreferenceItemRequest> items = new ArrayList<>();
PreferenceItemRequest item =
   PreferenceItemRequest.builder()
       .title("Meu produto")
       .quantity(1)
       .unitPrice(new BigDecimal("100"))
       .build();
items.add(item);

PreferenceRequest request = PreferenceRequest.builder()
  // el .purpose('wallet_purchase') solo permite pagos registrados
  // para permitir pagos de guest, puede omitir esta línea
  .purpose('wallet_purchase')
  .items(items).build();

client.create(request);

        
          
# SDK de Mercado Pago
require 'mercadopago'
# Agregar credenciales
sdk = Mercadopago::SDK.new('PROD_ACCESS_TOKEN')

# Crear un objeto de preferencia
preference_data = {
  # el purpose: 'wallet_purchase', solo permite pagos registrados
  # para permitir pagos de guests, puede omitir esta propiedad
  purpose: 'wallet_purchase',
  items: [
    {
      title: 'Meu produto',
      unit_price: 75.56,
      quantity: 1
    }
  ]
}
preference_response = sdk.preference.create(preference_data)
preference = preference_response[:response]

# Este valor es el ID de preferencia que usará en el HTML en el inicio del Brick
@preference_id = preference['id']

        
          
// SDK de Mercado Pago
 using MercadoPago.Config;
 // Agregar credenciales
MercadoPagoConfig.AccessToken = "PROD_ACCESS_TOKEN";

// Crear el objeto de request de preferencia
var request = new PreferenceRequest
{
  // el Purpose = 'wallet_purchase', solo permite pagos registrados
  // para permitir pagos de invitados, puede omitir esta propiedad
    Purpose = 'wallet_purchase',
    Items = new List<PreferenceItemRequest>
    {
        new PreferenceItemRequest
        {
            Title = "Meu produto",
            Quantity = 1,
            CurrencyId = "BRL",
            UnitPrice = 75.56m,
        },
    },
};

// Crea la preferencia usando el cliente
var client = new PreferenceClient();
Preference preference = await client.CreateAsync(request);

        
          
# SDK de Mercado Pago
import mercadopago
# Agregar credenciales
sdk = mercadopago.SDK("PROD_ACCESS_TOKEN")

# Crear un elemento en la preferencia
preference_data = {
  # el "purpose": "wallet_purchase", solo permite pagos registrados
  # para permitir pagos de invitados, puede omitir esta propiedad
    "purpose": "wallet_purchase",
    "items": [
        {
            "title": "Mi elemento",
            "quantity": 1,
            "unit_price": 75.76
        }
    ]
}

preference_response = sdk.preference().create(preference_data)
preference = preference_response["response"]

        
          
curl -X POST \
  'https://api.mercadopago.com/checkout/preferences' \
  -H 'Content-Type: application/json' \
  -H 'cache-control: no-cache' \
  -H 'Authorization: Bearer **PROD_ACCESS_TOKEN**' \
  -d '{
    "purpose": "wallet_purchase",
    "items": [
        {
            "title": "Mi producto",
            "quantity": 1,
            "unit_price": 75.76
        }
    ]
}'

        

Configurar la integración

Client-Side

NOTAAtenciónSi es necesario cerrar y volver a abrir el Brick (cuando un usuario vuelve al carrito para cambiar algún detalle de compra, por ejemplo) es necesario eliminar la instancia actual del Brick y crear una nueva cuando sea necesario mostrarlo otra vez. Para ello, utilice el método unmount disponible en el controller de Brick, en este caso: window.paymentBrickController.unmount().

html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bricks</title>
</head>
<body>
  <div id="paymentBrick_container"></div>
  <script src="https://sdk.mercadopago.com/js/v2"></script>
  <script>
    const mp = new MercadoPago('YOUR_PUBLIC_KEY');
    const bricksBuilder = mp.bricks();
    const renderPaymentBrick = async (bricksBuilder) => {
      const settings = {
        initialization: {
           /*
           "amount" es el monto a ser pago
           por todos los medios de pago a excepción de la Cuenta de Mercado Pago,
           que tiene su valor de procesamiento determinado en el backend a través de "preferenceId"
           */
          amount: 100, // cantidad de procesamiento a realizar
          preferenceId: '<PREFERENCE_ID>', // preferenceId generado en el backend
        },
        customization: {
          paymentMethods: {
            creditCard: 'all',
            debitCard: 'all',
            ticket: 'all',
          },
        },
        callbacks: {
          onReady: () => {
            /*
             Callback llamado cuando Brick está listo
             Aquí puedes ocultar loadings de su sitio, por ejemplo.
            */
          },
          onSubmit: ({ selectedPaymentMethod, formData }) => {
            //  callback llamado al hacer clic en el botón de envío de datos

            return new Promise((resolve, reject) => {
              let url = undefined;

              if (selectedPaymentMethod === 'credit_card' || selectedPaymentMethod === 'debit_card') {
                url = 'process_payment_card';
              } else if (selectedPaymentMethod === 'ticket') {
                url = 'process_payment_ticket';
              }

              if (url) {
                fetch(url, {
                  method: "POST",
                  headers: {
                    "Content-Type": "application/json",
                  },
                  body: JSON.stringify(formData)
                })
                  .then((response) => {
                    // recibir el resultado del pago
                    resolve();
                  })
                  .catch((error) => {
                    // manejar la respuesta de error al intentar crear el pago
                    reject();
                  })
              } else if (selectedPaymentMethod === 'wallet_purchase') {
                // wallet_purchase (Cuenta de Mercado Pago) no necesita ser enviado desde el backend
                resolve();
              } else {
                reject();
              }
            });
          },
          onError: (error) => {
            // callback llamado para todos los casos de error de Brick
            console.error(error);
          },
        },
      };
      window.paymentBrickController = await bricksBuilder.create(
        'payment',
        'paymentBrick_container',
        settings
      );
    };
    renderPaymentBrick(bricksBuilder);
  </script>
</body>
</html>

Envía el pago a Mercado Pago

Server-Side

  • Para el endpoint /process_payment_card:

    Puedes encontrar el estado del pago en el valor status.

            
    <?php
        require_once 'vendor/autoload.php';
    
        MercadoPago\SDK::setAccessToken("YOUR_ACCESS_TOKEN");
    
        $payment = new MercadoPago\Payment();
        $payment->transaction_amount = (float)$_POST['transactionAmount'];
        $payment->token = $_POST['token'];
        $payment->description = $_POST['description'];
        $payment->installments = (int)$_POST['installments'];
        $payment->payment_method_id = $_POST['paymentMethodId'];
        $payment->issuer_id = (int)$_POST['issuer'];
    
        $payer = new MercadoPago\Payer();
        $payer->email = $_POST['cardholderEmail'];
        $payer->identification = array(
            "type" => $_POST['identificationType'],
            "number" => $_POST['identificationNumber']
        );
        $payer->first_name = $_POST['cardholderName'];
        $payment->payer = $payer;
    
        $payment->save();
    
        $response = array(
            'status' => $payment->status,
            'status_detail' => $payment->status_detail,
            'id' => $payment->id
        );
        echo json_encode($response);
    
    ?>
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    var mercadopago = require('mercadopago');
    mercadopago.configurations.setAccessToken("YOUR_ACCESS_TOKEN");
    
    var payment_data = {
      amount: req.body.amount,
      ...
    }
    mercadopago.payment.save(payment_data)
      .then(function(response) {
        const { status, status_detail, id } = response.body;
        res.status(response.status).json({ status, status_detail, id });
      })
      .catch(function(error) {
        console.error(error);
      });
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    
    PaymentClient client = new PaymentClient();
    
    PaymentCreateRequest paymentCreateRequest =
       PaymentCreateRequest.builder()
           .transactionAmount(request.getTransactionAmount())
           .token(request.getToken())
           .description(request.getDescription())
           .installments(request.getInstallments())
           .paymentMethodId(request.getPaymentMethodId())
           .payer(
               PaymentPayerRequest.builder()
                   .email(request.getPayer().getEmail())
                   .firstName(request.getPayer().getFirstName())
                   .identification(
                       IdentificationRequest.builder()
                           .type(request.getPayer().getIdentification().getType())
                           .number(request.getPayer().getIdentification().getNumber())
                           .build())
                   .build())
           .build();
    
    client.create(paymentCreateRequest);
    
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    require 'mercadopago'
    sdk = Mercadopago::SDK.new('YOUR_ACCESS_TOKEN')
    
    payment_data = {
      transaction_amount: params[:transactionAmount].to_f,
      token: params[:token],
      description: params[:description],
      installments: params[:installments].to_i,
      payment_method_id: params[:paymentMethodId],
      payer: {
        email: params[:cardholderEmail],
        identification: {
          type: params[:identificationType],
          number: params[:identificationNumber]
        },
        first_name: params[:cardholderName]
      }
    }
    
    payment_response = sdk.payment.create(payment_data)
    payment = payment_response[:response]
    
    puts payment
    
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    using System;
    using MercadoPago.Client.Common;
    using MercadoPago.Client.Payment;
    using MercadoPago.Config;
    using MercadoPago.Resource.Payment;
    
    MercadoPagoConfig.AccessToken = "YOUR_ACCESS_TOKEN";
    
    var paymentRequest = new PaymentCreateRequest
    {
        TransactionAmount = decimal.Parse(Request["transactionAmount"]),
        Token = Request["token"],
        Description = Request["description"],
        Installments = int.Parse(Request["installments"]),
        PaymentMethodId = Request["paymentMethodId"],
        Payer = new PaymentPayerRequest
        {
            Email = Request["cardholderEmail"],
            Identification = new IdentificationRequest
            {
                Type = Request["identificationType"],
                Number = Request["identificationNumber"],
            },
            FirstName = Request["cardholderName"]
        },
    };
    
    var client = new PaymentClient();
    Payment payment = await client.CreateAsync(paymentRequest);
    
    Console.WriteLine(payment.Status);
    
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    import mercadopago
    sdk = mercadopago.SDK("ACCESS_TOKEN")
    
    payment_data = {
        "transaction_amount": float(request.POST.get("transaction_amount")),
        "token": request.POST.get("token"),
        "description": request.POST.get("description"),
        "installments": int(request.POST.get("installments")),
        "payment_method_id": request.POST.get("payment_method_id"),
        "payer": {
            "email": request.POST.get("cardholderEmail"),
            "identification": {
                "type": request.POST.get("identificationType"), 
                "number": request.POST.get("identificationNumber")
            }
            "first_name": request.POST.get("cardholderName")
        }
    }
    
    payment_response = sdk.payment().create(payment_data)
    payment = payment_response["response"]
    
    print(payment)
    
          

    Puedes encontrar el estado del pago en el valor status.

            
    curl -X POST \
        -H 'accept: application/json' \
        -H 'content-type: application/json' \
        -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
        'https://api.mercadopago.com/v1/payments' \
        -d '{
              "transaction_amount": 100,
              "token": "ff8080814c11e237014c1ff593b57b4d",
              "description": "Blue shirt",
              "installments": 1,
              "payment_method_id": "visa",
              "issuer_id": 310,
              "payer": {
                "email": "test@test.com"
              }
        }'