Mercado Pago Android SDK

La manera más rápida de cobrar en una app con la mejor experiencia.

Versión

Esta documentación corresponde a la versión de la SDK de Android.
Ya puedes integrarte con la nueva versión !

Antes de comenzar, ten en cuenta que en esta versión sólo puedes integrar el SDK mobile para Argentina, México, Brasil y Colombia*.
Si necesitas integrarte desde otro lugar, puedes ver qué países soportamos en la nueva versión.

*En Colombia sólo soportamos pagos con tarjetas de crédito.


Intégrate en 6 pasos de menos de 1 minuto

¿Demasiado rápido? Te damos todo tan resuelto que nos animamos a decirte eso.
Y además hicimos cuentas, cada paso lleva 50 segundos.
Algunos desarrolladores amigos ya lo lograron. ¡Increíble! Solo tienes que decirnos qué quieres cobrar y nos encargamos del resto.
Paso a paso en video.


1. Agrega la dependencia a tu proyecto

¿Usas Gradle? Agrégala en el build.gradle del módulo donde nos integres.

Sino descarga el SDK de Mercado Pago.

                     dependencies {
   compile 'com.mercadopago:sdk:'
}
                     
         
                  

2. Crea un botón de pago

Inicia el checkout de Mercado Pago desde un botón:

Crea un Activity para insertar el botón (MainActivity, por ejemplo).

Agrega un campo de texto, para mostrar el resultado del pago.

Pega este código de ejemplo en res/layout/activity_main.xml.

                     
                     

                     
                  

3. Inicia el checkout desde tu aplicación

Pruébalo con nuestros datos:
Usa este código con nuestros datos, así podrás probar rápido la experiencia completa.
Cuando quieras ir a producción, sólo necesitarás usar tus propios datos.

Para iniciar nuestro checkout sólo necesitas:

  • Clave pública: es un identificador que agrupa tu cuenta, tu aplicación y sus configuraciones.
  • Identificador de la preferencia de pago: es una representación de lo que cobras. Incluye estos atributos:
    • Datos y monto.
    • Medios de pago que aceptas.
    • Información del comprador (Por seguridad, el e-mail es obligatorio).
  • Opcional: puedes cambiar los colores de Nuestro Checkout utilizando la clase DecorationPreference:
    • Crea una instancia: DecorationPreference decorationPreference = new DecorationPreference();
    • Configura un color base: decorationPreference.setBaseColor(color);
    • Puedes activar la fuente oscura: decorationPreference.enableDarkFont();
    • Agrégalo a los setters del checkout!

                     
// Método ejecutado al hacer clic en el botón
public void submit(View view) {

  // Iniciar el checkout de Mercado Pago
  new MercadoPago.StartActivityBuilder()
    .setActivity(this)
    .setPublicKey("TEST-ad365c37-8012-4014-84f5-6c895b3f8e0a")
    .setCheckoutPreferenceId("150216849-ceed1ee4-8ab9-4449-869f-f4a8565d386f")
    .startCheckoutActivity();

}
                     
                     
                  

* A modo de prueba, estamos usando una preferencia cuyo producto es un Bajo de $100 con todos los medios de pago disponibles en Mercado Pago.

                     
// Método ejecutado al hacer clic en el botón
public void submit(View view) {
  //Puedes cambiar los colores
  DecorationPreference decorationPreference = new DecorationPreference();
  //Puedes obtener el color desde un recurso de tu colors.xml
  decorationPreference.setBaseColor(ContextCompat.getColor(context, R.color.your_color));
  //O con un código de color hexadecimal
  decorationPreference.setBaseColor("#77B2D2");
  //También puedes habilitar la fuente oscura
  decorationPreference.enableDarkFont();

  // Iniciar el checkout de Mercado Pago
  new MercadoPago.StartActivityBuilder()
    .setActivity(this)
    .setPublicKey("TEST-ad365c37-8012-4014-84f5-6c895b3f8e0a")
    .setCheckoutPreferenceId("150216849-ceed1ee4-8ab9-4449-869f-f4a8565d386f")
    .setDecorationPreference(decorationPreference)
    .startCheckoutActivity();

}
                     
                     
                  

4. Espera el resultado del pago

El SDK devolverá siempre un resultado del pago.

Si hubo algún error insalvable o el usuario lo abandonó, devolverá una excepción para que puedas entender qué pasó.

Estos son los atributos más importantes del pago:

  • id: Identificador del pago.
  • status: Estados del pago.
  • payment_method_id: Identificador del medio de pago que eligió tu usuario.
  • payment_type_id: Tipo de medio elegido.
  • card: Objeto que identifica la tarjeta de tu usuario.
  • issuer_id: Identificador del banco de la tarjeta que eligió tu usuario.
  • installments: Cantidad de cuotas elegidas.

Conoce más sobre el objeto Payment aquí.

                     
// Espera los resultados del checkout
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {

  if (requestCode == MercadoPago.CHECKOUT_REQUEST_CODE) {
    if (resultCode == RESULT_OK && data != null) {

      // Listo! El pago ya fue procesado por MP.
      Payment payment = JsonUtil.getInstance()
        .fromJson(data.getStringExtra("payment"), Payment.class);
      TextView results = (TextView) findViewById(R.id.mp_results);

      if (payment != null) {
          results.setText("PaymentID: " + payment.getId() +
          " - PaymentStatus: " + payment.getStatus());
      } else {
          results.setText("El usuario no concretó el pago.");
      }

    } else {
      if ((data != null) && (data.hasExtra("mpException"))) {
          MPException mpException = JsonUtil.getInstance()
            .fromJson(data.getStringExtra("mpException"), MPException.class);
          // Manejá tus errores.
      }
    }
  }
}
                     
                     
                  

5. Testea nuestro checkout

Usa estas tarjetas de prueba para testear los diferentes resultados del pago.

Luego podrás usar nuestra herramienta de preferencias de pago, para que trabajes con diferentes configuraciones:

  • Excluír medios de pago.
  • Excluir tipos de pago (solo tarjeta, por ejemplo).
  • Agregar un medio de pago por defecto (la tarjeta que más usa tu cliente).
  • Limitar la cantidad de cuotas o elegir la que se mostrará por defecto.

Tarjetas para probar nuestro checkout:

  • Visa: 4509 9535 6623 3704
  • Mastercard: 5031 7557 3453 0604
  • American Express: 3711 803032 57522

Prefijos del nombre del titular de la tarjeta.

  • APRO: Pago aprobado
  • CONT: Pago pendiente
  • CALL: Rechazo llamar para autorizar
  • FUND: Rechazo por monto insuficiente
  • SECU: Rechazo por código de seguridad
  • EXPI: Rechazo por fecha de expiración
  • FORM: Rechazo por error en formulario
  • OTHE: Rechazo general

APROJuan Perez retornará un pago acreditado.

6. Sal a producción

Primero:

Desde tu servidor:
Sólo tienes que crear una preferencia de pago y retornar la respuesta que te dan nuestros servicios. Hazlo desde tu servidor, porque tendrás que firmarla con tu clave privada. De esta forma nos aseguramos proteger tanto al comprador, como a tu propio usuario vendedor. Cómo crear una preferencia desde tu servidor.

Las preferencias completas funcionan mucho mejor.
Envíanos toda la información que puedas y verás que ofrecerás tan buena experiencia para los compradores, que ¡tendrás más pagos acreditados!

Desde tu aplicación:
Te ofrecemos una clase llamada MerchantServer que se conecta con tu servidor. El método createPreference hace un POST y envía como cuerpo del mensaje el mapa que hayas definido (preferenceMap). Indícanos tu URL base (https://api.tunombre.com) y la URI (/create_preference) donde esperas los datos para crear la preferencia.
MerchantServer se encargará de transformar la respuesta de tu servicio (la misma que los servicios de Mercado Pago) en un objeto CheckoutPreference cuyo ID es el punto de entrada a nuestro checkout.

                     
// Cuidado! Es el callback de Mercado Pago.
import com.mercadopago.callbacks.Callback;

public void submit(View view) {

  // Crea un mapa con los datos de la compra y el mail de tu cliente.
  Map<String, Object> preferenceMap = new HashMap<>();
  preferenceMap.put("item_id", "1");
  preferenceMap.put("amount", new BigDecimal(10));
  preferenceMap.put("currency_id", "ARS");
  preferenceMap.put("payer_email", "mail_de_tu_cliente@gmail.com");

  // Envía la información a tu servidor
  MerchantServer.createPreference(this, "https://api.tunombre.com",
    "/create_preference", preferenceMap, new Callback<CheckoutPreference>() {

      @Override
      public void success(CheckoutPreference checkoutPreference) {
          // La preferencia se creó correctamente.
          // Aquí puedes iniciar el Checkout de MercadoPago.
          new MercadoPago.StartActivityBuilder()
            .setActivity(mActivity)
            .setPublicKey("TEST-ad365c37-8012-4014-84f5-6c895b3f8e0a")
            .setCheckoutPreferenceId(checkoutPreference.getId())
            .startCheckoutActivity();
      }

      @Override
      public void failure(ApiException error) {
        // Ups, ocurrió un error
      }
  });
}