Todos os meios de pagamento - Exemplo de código - Mercado Pago Developers

Exemplo de código (todos os meios de pagamento)

Para facilitar e otimizar o seu processo de integração, veja abaixo um exemplo completo de como incluir todos os meios de pagamento com o Payment Brick.

Crie sua preferência

Server-Side

Necessário para Conta Mercado Pago.
          
<?php
  // SDK do Mercado Pago
  require __DIR__ .  '/vendor/autoload.php';
  // Adicione as credenciais
  MercadoPago\SDK::setAccessToken('PROD_ACCESS_TOKEN');

  // Cria um objeto de preferência
  $preference = new MercadoPago\Preference();

  // Cria um item na preferência
  $item = new MercadoPago\Item();
  $item->title = 'Meu produto';
  $item->quantity = 1;
  $item->unit_price = 75.56;
  $preference->items = array($item);

  // o $preference->purpose = 'wallet_purchase'; permite apenas pagamentos logados
  // para permitir pagamentos como guest, você pode omitir essa propriedade
  $preference->purpose = 'wallet_purchase';
  $preference->save();
?>

        
          
// SDK do Mercado Pago
const mercadopago = require ('mercadopago');
// Adicione as credenciais
mercadopago.configure({
 access_token: 'PROD_ACCESS_TOKEN'
});
 
// Cria um objeto de preferência
let preference = {
  // o "purpose": "wallet_purchase" permite apenas pagamentos logados
  // para permitir pagamentos como guest, você pode omitir essa propriedade
  "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 é o preferenceId que será enviado para o Brick na inicialização
    const preferenceId = response.body.id;
  }).catch(function (error) {
    console.log(error);
  });

        
          
// SDK do Mercado Pago
import com.mercadopago.MercadoPagoConfig;
// Adicione as credenciais
MercadoPagoConfig.setAccessToken("PROD_ACCESS_TOKEN");

// Cria um objeto de preferência
PreferenceClient client = new PreferenceClient();

// Cria um item na preferência
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()
  // o .purpose('wallet_purchase') permite apenas pagamentos logados
  // para permitir pagamentos como guest, você pode omitir essa linha
  .purpose('wallet_purchase')
  .items(items).build();

client.create(request);

        
          
# SDK do Mercado Pago
require 'mercadopago'
# Adicione as credenciais
sdk = Mercadopago::SDK.new('PROD_ACCESS_TOKEN')

# Cria um objeto de preferência
preference_data = {
  # o purpose: 'wallet_purchase', permite apenas pagamentos logados
  # para permitir pagamentos como guest, você pode omitir essa propriedade
  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 é o preferenceId que você usará no HTML na inicialização no Brick
@preference_id = preference['id']

        
          
// SDK do Mercado Pago
 using MercadoPago.Config;
 // Adicione as credenciais
MercadoPagoConfig.AccessToken = "PROD_ACCESS_TOKEN";

// Cria o objeto de request da preferência
var request = new PreferenceRequest
{
  // o Purpose = 'wallet_purchase', permite apenas pagamentos logados
  // para permitir pagamentos como guest, você pode omitir essa propriedade
    Purpose = 'wallet_purchase',
    Items = new List<PreferenceItemRequest>
    {
        new PreferenceItemRequest
        {
            Title = "Meu produto",
            Quantity = 1,
            CurrencyId = "BRL",
            UnitPrice = 75.56m,
        },
    },
};

// Cria a preferência usando o client
var client = new PreferenceClient();
Preference preference = await client.CreateAsync(request);

        
          
# SDK do Mercado Pago
import mercadopago
# Adicione as credenciais
sdk = mercadopago.SDK("PROD_ACCESS_TOKEN")

# Cria um item na preferência
preference_data = {
  # o "purpose": "wallet_purchase", permite apenas pagamentos logados
  # para permitir pagamentos como guest, você pode omitir essa propriedade
    "purpose": "wallet_purchase",
    "items": [
        {
            "title": "My Item",
            "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": "Meu produto",
            "quantity": 1,
            "unit_price": 75.76
        }
    ]
}'

        

Configure a integração

Client-Side

Atenção
Caso seja necessário fechar e abrir o Brick novamente (quando um usuário retorna ao carrinho para alterar algum detalhe da compra, por exemplo) é necessário eliminar a instância atual do Brick e criar uma nova quando for preciso mostrar o Brick novamente. Para isso, utilize o método unmount disponível no controller do Brick, sendo neste 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" é o valor total a ser pago
            por todos os meios de pagamento com exceção da Conta Mercado Pago,
            que tem seu valor de processamento determinado no backend através do "preferenceId"
          */
          amount: 100, // valor do processamento a ser realizado
          preferenceId: '<PREFERENCE_ID>', // preferenceId gerado no backend
        },
        customization: {
          paymentMethods: {
            creditCard: 'all',
            debitCard: 'all',
            ticket: 'all',
          },
        },
        callbacks: {
          onReady: () => {
            /*
              Callback chamado quando o Brick estiver pronto.
              Aqui você pode ocultar loadings do seu site, por exemplo.
            */
          },
          onSubmit: ({ selectedPaymentMethod, formData }) => {
            // callback chamado ao clicar no botão de submissão dos dados

            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) => {
                    // receber o resultado do pagamento
                    resolve();
                  })
                  .catch((error) => {
                    // lidar com a resposta de erro ao tentar criar o pagamento
                    reject();
                  })
              } else if (selectedPaymentMethod === 'wallet_purchase') {
                // wallet_purchase (Conta Mercado Pago) não precisa ser enviado pelo backend
                resolve();
              } else {
                reject();
              }
            });
          },
          onError: (error) => {
            // callback chamado para todos os casos de erro do Brick
            console.error(error);
          },
        },
      };
      window.paymentBrickController = await bricksBuilder.create(
        'payment',
        'paymentBrick_container',
        settings
      );
    };
    renderPaymentBrick(bricksBuilder);
  </script>
</body>
</html>

Enviar pagamento ao Mercado Pago

Server-Side

Os pagamentos com Conta Mercado Pago e Parcelamento sem cartão de crédito não precisam ser enviados via backend. Caso o usuário selecione esta opção como meio de pagamento, a preferenceId enviada na inicialização do Brick é responsável por redirecionar o comprador ao site do Mercado Pago, onde será feito o pagamento diretamente em nosso site. Para redirecionar o comprador de volta para o seu site, você pode configurar as back_urls como descrito neste artigo.
  • Para o endpoint /process_payment_card:

    Encontre o estado do pagamento no campo 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);
    
    ?>
    
          

    Encontre o estado do pagamento no campo 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);
      });
    
          

    Encontre o estado do pagamento no campo 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);
    
    
          

    Encontre o estado do pagamento no campo 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
    
    
          

    Encontre o estado do pagamento no campo 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);
    
    
          

    Encontre o estado do pagamento no campo 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)
    
          

    Encontre o estado do pagamento no campo 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"
              }
        }'