Otras funcionalidades - Checkout API - Mercado Pago Developers
Developers
Referencia de API
Soporte
Ingresar

    Inicio

    Empieza por aquí

    Cobros online

    Checkout Pro

    Checkout API

    Link de pago

    Suscripciones

    Marketplace

    Mobile Checkout

    Web Tokenize Checkout

    Pagos presenciales

    Código QR

    Mercado Pago Point

    Plugins y plataformas

    WooCommerce

    Prestashop

    Magento 2

    Shopify

    Tiendanube

    VTEX

    SDKs

    Notificaciones

    Webhooks

    IPN

    Gestión de cuenta

    Reportes

    Obtener pagos

    Mejora la aprobación

    Gestión de contracargos

    Devoluciones y cancelaciones

    Requisitos para ir a producción

    Recursos

    Localización

    Changelog

    Status

EN ESTA PÁGINA

Sugiere cambios
Ayúdanos a mejorar la documentación
¿Viste información errónea, te gustaría que expliquemos algo más o que mejoremos nuestras guías? Déjanos tus sugerencias en GitHub.

Autorización y captura de pagos

Suma funcionalidades específicas a tu integración según las necesidades de tu negocio.

Ofrece la posibilidad de realizar una autorización antes de generar una captura de un pago. Esto te permite hacer una reserva de fondos en la tarjeta de tu comprador sin efectuar el pago.

Por ejemplo, para realizar una autorización a la hora de reservar un auto o con un precio estimado de una compra previo a su confirmación.

Realiza una reserva de fondos

Para hacer una autorización de reserva de fondos solo tienes que agregar el atributo capture=false de la siguiente manera:

  • php
  • java
  • node
  • ruby
          
<?php

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

  $payment = new MercadoPago\Payment();

  $payment->transaction_amount = 100;
  $payment->token = "ff8080814c11e237014c1ff593b57b4d";
  $payment->description = "Title of what you are paying for";
  $payment->installments = 1;
  $payment->payment_method_id = "visa";
  $payment->payer = array(
    "email" => "test_user_19653727@testuser.com"
  );

  $payment->capture=false;

  $payment->save();

?>

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

Payment payment = new Payment();

payment.setTransactionAmount(100f)
      .setToken('ff8080814c11e237014c1ff593b57b4d')
      .setDescription('Title of what you are paying for')
      .setInstallments(1)
      .setPaymentMethodId("visa")
      .setPayer(new Payer("test_user_19653727@testuser.com"))
      .setCapture(false);

payment.save();


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

var payment_data = {
  transaction_amount: 100,
  token: 'ff8080814c11e237014c1ff593b57b4d'
  description: 'Title of what you are paying for',
  installments: 1,
  payment_method_id: 'visa',
  payer: {
    email: 'test_user_3931694@testuser.com'
  },
  capture: false
};

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

}).catch(function (error) {

});


        
          
require 'mercadopago'
MercadoPago::SDK.configure(ACCESS_TOKEN: ENV_ACCESS_TOKEN)

payment = MercadoPago::Payment.new()
payment.transaction_amount = 100
payment.token = 'ff8080814c11e237014c1ff593b57b4d'
payment.description = 'Title of what you are paying for'
payment.installments = 1
payment.payment_method_id = "visa"
payment.payer = {
  email: "test_user_19653727@testuser.com"
}
payment.capture = false
payment.save()

        

La respuesta indica que el pago se encuentra autorizado y pendiente de captura.

json

{
  "id": PAYMENT_ID,
  ...
  "status": "authorized",
  "status_detail": "pending_capture",
  ...
  "captured": false,
  ...
}

También puede resultar rechazada o quedar pendiente. Ten en cuenta que los fondos autorizados no podrán ser utilizados por tu cliente hasta que no sean capturados. Te recomendamos realizar la captura lo antes posible.

Importante
  • La reserva tendrá una validez de 7 días. Si no la capturas hasta ese momento, será cancelada.
  • Debes guardar el ID del pago para poder finalizar el proceso.
  • Captura un pago autorizado

    Para finalizar el pago, es necesario capturar los fondos que reservaste a tu cliente. Puede realizarse por el monto total o uno parcial.

          Capturar el monto total de una reserva

    Para hacer la captura por el monto total solo debes enviar el atributo capture como true.

    • php
    • java
    • node
    • ruby
    • curl
              
    <?php
    
      MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");
    
      $payment = MercadoPago\Payment::find_by_id($payment_id);
      $payment->capture = true;
      $payment->update();
    ?>
    
            
              
    import com.mercadopago.*;
    MercadoPago.SDK.configure("ENV_ACCESS_TOKEN");
    
    Payment payment = Payment.load(paymentId);
    payment.capture = true;
    payment.update();
    
            
              
    var mercadopago = require('mercadopago');
    mercadopago.configurations.setAccessToken(config.access_token);
    
    let paymentId = 123;
    
    mercadopago.payment.capture(paymentId, mercadopago, (error, response) => {
        if (error){
            console.log(error);
        }else{
            console.log(response)
        }
    });
    
            
              
    require 'mercadopago'
    MercadoPago::SDK.configure(ACCESS_TOKEN: ENV_ACCESS_TOKEN)
    
    payment = MercadoPago::Payment.load(paymentId)
    payment.capture=true
    payment.update()
    
            
              
    curl -X PUT \
      'https://api.mercadopago.com/v1/payments/PAYMENT_ID' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \
      -d '{"capture": true}'
    
            

    La respuesta va a devolver que el pago se encuentra aprobado y acreditado.

    json

    {
      ...
      "status": "approved",
      "status_detail": "accredited",
      ...
      "captured": true,
      ...
    }
    Nota
    Si no agregas un monto, se capturará el total reservado.

    Captura un pago por un monto menor al reservado

    Para capturar un monto menor al que reservaste, tienes que sumar el envío del atributo transaction_amount con el nuevo valor.

    • php
    • java
    • node
    • ruby
    • curl
              
    <?php
    
      MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");
    
      $payment = MercadoPago\Payment::find_by_id($payment_id);
      $payment->transaction_amount = 75;
      $payment->capture = true;
      $payment->update();
    ?>
    
            
              
    import com.mercadopago.*;
    MercadoPago.SDK.configure("ENV_ACCESS_TOKEN");
    
    
    Payment payment = Payment.load(paymentId);
    payment.transaction_amount = 75;
    payment.capture = true;
    payment.update();
    
            
              
    var mercadopago = require('mercadopago');
    mercadopago.configurations.setAccessToken(config.access_token);
    
    let captureInfo = {id: 123, transaction_amount: 5}
    
    mercadopago.payment.capturePartial(captureInfo, mercadopago, (error, response) => {
        if (error){
            console.log(error);
        }else{
            console.log(response)
        }
    });
    
            
              
    require 'mercadopago'
    MercadoPago::SDK.configure(ACCESS_TOKEN: ENV_ACCESS_TOKEN)
    
    payment = MercadoPago::Payment.load(paymentId)
    payment.transaction_amount = 75
    payment.capture=true
    payment.update()
    
            
              
    curl -X PUT \
      'https://api.mercadopago.com/v1/payments/PAYMENT_ID' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \
      -d '{
              "transaction_amount": 75,
              "capture": true
    }'
    
            

          Respuesta

    json

    {
      ...
      "status": "approved",
      "status_detail": "accredited",
      ...
      "transaction_amount": 75,
      ...
      "captured": true,
      ...
    }
    Nota
    No es posible capturar un monto mayor al reservado, para eso es necesario cancelar la reserva y generar una nueva.

    Cancelar una reserva

    Puedes cancelar la reserva y liberar el dinero de la tarjeta al actualizar el atributo status del pago al estado cancelled.

    • php
    • java
    • node
    • ruby
    • curl
              
    <?php
    
      MercadoPago\SDK::setAccessToken("ENV_ACCESS_TOKEN");
    
      $payment = MercadoPago\Payment::find_by_id($payment_id);
      $payment->status = "cancelled";
      $payment->update();
    ?>
    
            
              
    import com.mercadopago.*;
    MercadoPago.SDK.configure("ENV_ACCESS_TOKEN");
    
    
    Payment payment = Payment.load(paymentId);
    payment.status = "canceled";
    payment.update();
    
            
              
    var mercadopago = require('mercadopago');
    mercadopago.configurations.setAccessToken(config.access_token);
    
    let paymentToBeCanceled = 123;
    
    mercadopago.payment.cancel(paymentToBeCanceled, mercadopago, (error, response) => {
        if (error){
            console.log(error);
        }else{
            console.log(response)
        }
    });
    
            
              
    require 'mercadopago'
    MercadoPago::SDK.configure(ACCESS_TOKEN: ENV_ACCESS_TOKEN)
    
    payment = MercadoPago::Payment.load(paymentId)
    payment.status = "canceled"
    payment.update()
    
            
              
    curl -X PUT \
      'https://api.mercadopago.com/v1/payments/PAYMENT_ID' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer ENV_ACCESS_TOKEN' \
      -d '{"status": "cancelled"}'
    
            

          Respuesta

    json

    {
      ...
      "status": "cancelled",
      "status_detail": "by_collector",
      ...
      "captured": false,
      ...
    }

    Próximos pasos

    REQUERIDO

    Requisitos para ir a producción

    Conoce los requisitos necesarios para comenzar a recibir pago.

    RECOMENDADO

    Referencias de API

    Encuentra toda la información necesaria para interactuar con nuestras APIs.

    ¿Te resultó útil esta información?

    Copyright © 2021 MercadoLibre S. de R.L. de C.V.

    Términos y condicionesCómo cuidamos tu privacidad
    Partners Mercado Pago

    Al navegar en este sitio aceptas las cookies que utilizamos para mejorar tu experiencia. Más información.