Outros meios de pagamento - Integrar meios de pagamento - Mercado Pago Developers

Integre outros meios de pagamento

Com o Checkout Transparente do Mercado Pago você pode oferecer outras alternativas de meios de pagamento para seus clientes.

Como funciona?

Para receber outros meios de pagamento, é importante ter em conta duas instâncias:

  1. Primeiro, é preciso um frontend para coletar as informações necessárias para realizar o pagamento.

  2. Segundo, um backend que tome os dados do pagamento e pode confirmar e fazer o pagamento.

Tanto para o frontend como para o backend, recomendamos utilizar nossos SDKs para poder coletar os dados sensíveis dos seus usuários de maneira segura.

Consulta os meios de pagamento disponíveis

Meios de pagamento

Além de cartões e Pix, também existem outras opções de pagamento que podem ser oferecidas no seu site.

Tipo de meio de pagamentoMeio de pagamento
ticketBoleto
ticketPagamento em lotérica

Obtenha os meios de pagamento disponíveis

Consulte os meios de pagamento disponíveis sempre que necessite.

          
<?php

  MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");

  $payment_methods = MercadoPago::get("/v1/payment_methods");

?>

        
          
var mercadopago = require('mercadopago');
mercadopago.configurations.setAccessToken(config.access_token);

var response = await mercadopago.payment_methods.listAll();
var payment_methods = response.body;

        
          
import com.mercadopago.*;
MercadoPago.SDK.configure("ENV_ACCESS_TOKEN");

new PaymentMethod();
MPResourceArray methods = PaymentMethod.all();


        
          
require 'mercadopago'
sdk = Mercadopago::SDK.new('ENV_ACCESS_TOKEN')

payment_methods_response = sdk.payment_methods.get()
payment_methods = payment_methods_response[:response]


        
          
using MercadoPago.Client.PaymentMethod;
using MercadoPago.Config;
using MercadoPago.Resource;
using MercadoPago.Resource.PaymentMethod;

MercadoPagoConfig.AccessToken = "ENV_ACCESS_TOKEN";

var client = new PaymentMethodClient();
ResourcesList<PaymentMethod> paymentMethods = await client.ListAsync();


        
          
import mercadopago
sdk = mercadopago.SDK("ACCESS_TOKEN")

payment_methods_response = sdk.payment_methods().list_all()
payment_methods = payment_methods_response["response"]

        
          
curl -X GET \
    -H 'accept: application/json' \
    -H 'content-type: application/json' \
    -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \
    'https://api.mercadopago.com/v1/payment_methods' \

        

O resultado será uma lista com os meios de pagamento e suas propriedades. Por exemplo, os meios de pagamento do payment_type_id que tenham como valor ticket se referem aos meios de pagamento em dinheiro e as de bank_transfer para transferências bancárias.

Tenha em conta que essa resposta devolverá todos os meios de pagamento. Por isso você precisa filtrar as formas de pagamento que queira oferecer de acordo com a lista de pagamentos disponíveis.

json

[
    {
        "id": "bolbradesco",
        "name": "Boleto",
        "payment_type_id": "ticket",
        "status": "active",
        "secure_thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/bolbradesco.gif",
        "thumbnail": "http://img.mlstatic.com/org-img/MP3/API/logos/bolbradesco.gif",
        "deferred_capture": "does_not_apply",
        "settings": [],
        "additional_info_needed": []
    },
    {
        "id": "pec",
        "name": "Pagamento na lotérica sem boleto",
        "payment_type_id": "ticket",
        "status": "active",
        "secure_thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/pec.gif",
        "thumbnail": "https://www.mercadopago.com/org-img/MP3/API/logos/pec.gif",
        "deferred_capture": "supported",
        "settings": [],
        "additional_info_needed": []
    },
]
Obtenha mais informação nas Referências de API.

Capture os dados para pagamento

Client-Side

1. Usa a biblioteca MercadoPago.js

Lembre-se usar nossa biblioteca oficial para acessar a API de Mercado Pago no seu frontend e coletar os dados de forma segura.

html

<script src="https://sdk.mercadopago.com/js/v2"></script>
Esta documentação utiliza a nova versão de MercadoPago.js V2. Para ver a versão anterior, vá para a seção de Checkout Transparente anterior.

2. Adicione o formulário de pagamento

Para realizar a captura dos dados sensíveis dos seus clientes, é muito importante que utilize nosso formulário com os atributos correspondentes para garantir a segurança da informação.

Use a lista que você consultou em Obtenha os meios de pagamento disponíveis para criar as opções de pagamento que deseja oferecer.

Adicione o seguinte formulário com os estilos que quiser.

html

<form action="/process_payment" method="post" id="paymentForm">
    <h3>Forma de Pagamento</h3>
    <div>
      <select class="form-control" id="paymentMethod" name="paymentMethod">
        <option>Selecione uma forma de pagamento</option>

        <!-- Create an option for each payment method with their name and complete the ID in the attribute 'value'. -->
        <option value="--PaymentId--">--PaymentTypeName--</option>
      </select>
    </div>
    <h3>Detalhe do comprador</h3>
    <div>
    <div>
        <label for="payerFirstName">Nome</label>
        <input id="payerFirstName" name="payerFirstName" type="text" value="Nome">
      </div>
      <div>
        <label for="payerLastName">Sobrenome</label>
        <input id="payerLastName" name="payerLastName" type="text" value="Sobrenome">
      </div>
      <div>
        <label for="payerEmail">E-mail</label>
        <input id="payerEmail" name="payerEmail" type="text" value="test@test.com">
      </div>
      <div>
        <label for="docType">Tipo de documento</label>
        <select id="docType" name="docType" data-checkout="docType" type="text"></select>
      </div>
      <div>
        <label for="docNumber">Número do documento</label>
        <input id="docNumber" name="docNumber" data-checkout="docNumber" type="text">
      </div>
    </div>

    <div>
      <div>
        <input type="hidden" name="transactionAmount" id="transactionAmount" value="100">
        <input type="hidden" name="productDescription" id="productDescription" value="Nome do Produto">
        <br>
        <button type="submit">Pagar</button>
        <br>
      </div>
  </div>
</form>

3. Configure sua chave pública

Configure sua chave pública da seguinte forma:

javascript

const mp = new MercadoPago("YOUR_PUBLIC_KEY");
Se ainda não possui conta para ver suas credenciais, registre-se.

4. Obtenha os dados para seu formulário

Obtenha os tipos de documento

Um dos campos obrigatórios é o tipo de documento. Utilize a lista de documentos no momento de completar os dados.

Incluindo o elemento de tipo select com id = docType que se encontra no formulário, MercadoPago.js completará automaticamente as opções disponíveis quando a seguinte função for chamada:

javascript

// Step #getIdentificationTypes

// Helper function to append option elements to a select input
function createSelectOptions(elem, options, labelsAndKeys = { label : "name", value : "id"}){
   const {label, value} = labelsAndKeys;

   elem.options.length = 0;

   const tempOptions = document.createDocumentFragment();

   options.forEach( option => {
       const optValue = option[value];
       const optLabel = option[label];

       const opt = document.createElement('option');
       opt.value = optValue;
       opt.textContent = optLabel;

       tempOptions.appendChild(opt);
   });

   elem.appendChild(tempOptions);
}

// Get Identification Types
(async function getIdentificationTypes () {
   try {
       const identificationTypes = await mp.getIdentificationTypes();
       const docTypeElement = document.getElementById('docType');

       createSelectOptions(docTypeElement, identificationTypes)
   }catch(e) {
       return console.error('Error getting identificationTypes: ', e);
   }
})()
Encontre mais detalhes na seção de Tipos de documentos.

Receber pagamentos com boleto bancário ou em lotéricas

Server-Side

Após capturar os dados com o formulário, para receber pagamentos em boleto ou pagamento em lotérica envie o e-mail e documento do seu cliente e a método de pagamento e detalhe do valor.

Já estando no seu backend com toda a informação coletada, é o momento de enviar a solicitação ao Mercado Pago através das nossas APIs.

Tenha em conta que para que esse passo funcione é necessário que configure sua chave privada.

          
<?php

 require_once 'vendor/autoload.php';

 MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");

 $payment = new MercadoPago\Payment();
 $payment->transaction_amount = 100;
 $payment->description = "Título do produto";
 $payment->payment_method_id = "bolbradesco";
 $payment->payer = array(
     "email" => "test@test.com",
     "first_name" => "Test",
     "last_name" => "User",
     "identification" => array(
         "type" => "CPF",
         "number" => "19119119100"
      ),
     "address"=>  array(
         "zip_code" => "06233200",
         "street_name" => "Av. das Nações Unidas",
         "street_number" => "3003",
         "neighborhood" => "Bonfim",
         "city" => "Osasco",
         "federal_unit" => "SP"
      )
   );

 $payment->save();

?>

        
          
var mercadopago = require('mercadopago');
mercadopago.configurations.setAccessToken(config.access_token);

var payment_data = {
  transaction_amount: 100,
  description: 'Título do produto',
  payment_method_id: 'bolbradesco',
  payer: {
    email: 'test@test.com',
    first_name: 'Test',
    last_name: 'User',
    identification: {
        type: 'CPF',
        number: '19119119100'
    },
    address:  {
        zip_code: '06233200',
        street_name: 'Av. das Nações Unidas',
        street_number: '3003',
        neighborhood: 'Bonfim',
        city: 'Osasco',
        federal_unit: 'SP'
    }
  }
};

mercadopago.payment.create(payment_data).then(function (data) {

}).catch(function (error) {

});


        
          
PaymentClient client = new PaymentClient();

PaymentCreateRequest paymentCreateRequest =
   PaymentCreateRequest.builder()
       .transactionAmount(new BigDecimal("100"))
       .description("Título do produto")
       .paymentMethodId("bolbradesco")
       .dateOfExpiration(OffsetDateTime.of(2023, 1, 10, 10, 10, 10, 0, ZoneOffset.UTC))
       .payer(
           PaymentPayerRequest.builder()
               .email("test@test.com")
               .firstName("Test")
               .lastName("User")
               .identification(
                   IdentificationRequest.builder().type("CPF").number("19119119100").build())
               .build())
       .build();

client.create(paymentCreateRequest);

        
          
require 'mercadopago'
sdk = Mercadopago::SDK.new('ENV_ACCESS_TOKEN')

payment_request = {
  transaction_amount: 100,
  description: 'Título do produto',
  payment_method_id: 'bolbradesco',
  payer: {
    email: 'test@test.com',
    first_name: 'Test',
    last_name: 'User',
    identification: {
      type: 'CPF',
      number: '19119119100',
    },
    address: {
      zip_code: '06233200',
      street_name: 'Av. das Nações Unidas',
      street_number: '3003',
      neighborhood: 'Bonfim',
      city: 'Osasco',
      federal_unit: 'SP'
    }
  }
}

payment_response = sdk.payment.create(payment_request)
payment = payment_response[:response]


        
          
using MercadoPago.Config;
using MercadoPago.Client.Common;
using MercadoPago.Client.Payment;
using MercadoPago.Resource.Payment;

MercadoPagoConfig.AccessToken = "ENV_ACCESS_TOKEN";

var request = new PaymentCreateRequest
{
    TransactionAmount = 105,
    Description = "Título do produto",
    PaymentMethodId = "bolbradesco",
    Payer = new PaymentPayerRequest
    {
        Email = "test@test.com",
        FirstName = "Test",
        LastName = "User",
        Identification = new IdentificationRequest
        {
            Type = "CPF",
            Number = "191191191-00",
        },
    },
};

var client = new PaymentClient();
Payment payment = await client.CreateAsync(request);


        
          
import mercadopago
sdk = mercadopago.SDK("ENV_ACCESS_TOKEN")

payment_data = {
    "transaction_amount": 100,
    "description": "Título do produto",
    "payment_method_id": "bolbradesco",
    "payer": {
        "email": "test@test.com",
        "first_name": "Test",
        "last_name": "User",
        "identification": {
            "type": "CPF",
            "number": "191191191-00"
        },
        "address": {
            "zip_code": "06233-200",
            "street_name": "Av. das Nações Unidas",
            "street_number": "3003",
            "neighborhood": "Bonfim",
            "city": "Osasco",
            "federal_unit": "SP"
        }
    }
}

payment_response = sdk.payment().create(payment_data)
payment = payment_response["response"]

        
          
curl -X POST \
    -H 'accept: application/json' \
    -H 'content-type: application/json' \
    -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \
    'https://api.mercadopago.com/v1/payments' \
    -d '{
      "transaction_amount": 100,
      "description": "Título do produto",
      "payment_method_id": "bolbradesco",
      "payer": {
        "email": "test@test.com",
        "first_name": "Test",
        "last_name": "User",
        "identification": {
            "type": "CPF",
            "number": "19119119100"
        },
        "address": {
            "zip_code": "06233200",
            "street_name": "Av. das Nações Unidas",
            "street_number": "3003",
            "neighborhood": "Bonfim",
            "city": "Osasco",
            "federal_unit": "SP"
        }
      }
    }'

        

A resposta mostrará o estado pendente até que o comprador realize o pagamento. O ID do cupom de pagamento é igual ao ID da transação no Mercado Pago.

json

[
{
    ...,
    "id": 5466310457,
    "status": "pending",
    "status_detail": "pending_waiting_payment",
    ...,
    "transaction_details": {
        "net_received_amount": 0,
        "total_paid_amount": 100,
        "overpaid_amount": 0,
        "external_resource_url": "https://www.mercadopago.com/mlb/payments/ticket/helper?payment_id=123456789&payment_method_reference_id= 123456789&caller_id=123456",
        "installment_amount": 0,
        "financial_institution": null,
        "payment_method_reference_id": "1234567890"
    }
}
]

No campo external_resource_url você encontrará um endereço que contêm as instruções para que o comprador possa pagar. Você pode redirecioná-lo ao link para que acesse.

Nota
O cliente tem entre 3 e 5 días para pagar, dependendo do meio de pagamento. Após esse tempo, deve cancelá-lo.

Data de vencimento para pagamentos

Pagamentos com boleto

A data de expiração padrão para pagamentos com boleto é de 3 dias. Opcionalmente, é possível alterar essa data enviando o campo date_of_expiration na requisição de criação do pagamento.

Importante
A data configurada deve estar entre 1 e 30 dias a partir da data de emissão do boleto.

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
$payment->date_of_expiration = "2020-05-30T23:59:59.000-04:00";

        

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
date_of_expiration: "2020-05-30T23:59:59.000-04:00",

        

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
payment.setDateOfExpiration("2020-05-30T23:59:59.000-04:00")

        

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
date_of_expiration: '2020-05-30T23:59:59.000-04:00',

        

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
paymentCreateRequest.DateOfExpiration = DateTime.Parse("2020-05-30T23:59:59.000-04:00");

        

A data usa o formato ISO 8601 format: yyyy-MM-dd'T'HH:mm:ssz

          

"date_of_expiration": "2020-05-30T23:59:59.000-04:00"

        

A data usa o formato ISO 8601: yyyy-MM-dd'T'HH:mm:ssz

          
"date_of_expiration": "2020-05-30T23:59:59.000-04:00",

        

O prazo de aprovação do boleto é de até 48h úteis. Por isso, recomenda-se configurar a data de expiração com no mínimo 3 dias para garantir que o pagamento seja abonado.

Importante
Caso o boleto seja pago depois da data de expiração, o valor será estornado na conta do Mercado Pago do pagador.

Cancelar um pagamento

É importante que se possa cancelar pagamentos vencidos para evitar problemas de cobrança. Os pagamentos em dinheiro devem ser pagos entre 3 e 5 dias úteis de acordo com o tempo de cada um.

Tenha em conta que é possível cancelar apenas os pagamentos que se encontram pendentes ou em processo. Se a expiração de um pagamento ocorre aos 30 dias, o cancelamento é automático e o estado final do mesmo será cancelado ou expirado.

Encontre toda informação na seção Devoluções e cancelamentos.

Prazo de aprovação de pagamento

Cada meio de pagamento possui sua própria data de aprovação, em alguns casos a aprovação é imediata e em outros pode demorar até 3 dias úteis.

Revise os tempos de aprovação por meio de pagamento sempre que necessite.