Procesar pagos
Con Wallet Connect, los pagos se procesan por medio de Orders API, una API desarrollada para simplificar la integración con Mercado Pago. La order representa la intención de compra y concentra las transacciones de pago asociadas a ella, permitiendo debitar el monto directamente de la billetera del comprador a partir del token de pago obtenido en la vinculación.
Antes de procesar pagos, es necesario haber concluido el flujo de vinculación y obtenido el payer_token. Si aún no lo has hecho, consulta la sección Configurar la vinculación.
capture_mode, y determina si el pago será debitado inmediatamente al crear la order (automatic) o solamente autorizado para una captura posterior (manual). Si defines que la captura se realizará posteriormente, después de la creación de la order deberás capturarla a través del endpoint /v1/orders/{order_id}/capturePOST.La creación de la order es la operación que efectiva el cobro en la billetera del comprador. Solo es posible asociar una transacción de pago por order en integraciones con Wallet Connect.
Para ello, envía una solicitud al endpoint /v1/ordersPOST, incluyendo tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`. y el payer_token obtenido en la vinculación.
additional_info.sub_merchant en la creación de la order, conforme el ejemplo a continuación. Para más información, accede a la documentación de Facilitadores de pagos.curlcurl -X POST \ 'https://api.mercadopago.com/v1/orders' \ -H 'Content-Type: application/json' \ -H 'X-Idempotency-Key: {{SOME_UNIQUE_VALUE}}' \ -H 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}' \ -d '{ "type": "online", "external_reference": "ext_ref_1234", "total_amount": "24.90", "description": "Smartphone", "capture_mode": "automatic", "integration_data": { "platform_id": "123abc" }, "additional_info": { "sub_merchant": { "id": "123123", "legal_name": "LOJINHA DO ZE", "mcc": "5462", "document_type": "CNPJ", "document_number": "222222222222222", "phone": "5551999999999", "url": "www.nomedofacilitador.com.br", "address_street": "RUA A", "address_door_number": 123, "zip": "01310100", "city": "Sao Paulo", "region_code_iso": "BR-SP", "region_code": "BR", "country": "BRA" } }, "transactions": { "payments": [ { "amount": "24.90", "payment_method": { "type": "wallet", "id": "wallet", "token": "PAYER_TOKEN", "statement_descriptor": "My Store" } } ] } }'
Consulta en la tabla a continuación las descripciones de los parámetros que son obligatorios en la solicitud y aquellos que, aunque son opcionales, tienen alguna particularidad importante que debe destacarse.
| Parámetro | Tipo | Descripción | Obligatoriedad |
X-Idempotency-Key | Header | Clave de idempotencia. Esta clave garantiza que cada solicitud sea procesada solo una vez, evitando cobros duplicados en caso de reenvío de la solicitud. Usa un valor exclusivo por intento de pago, como un UUID V4 o una string aleatoria, con un tamaño entre 1 y 64 caracteres. | Obligatorio |
Authorization | Header | Se refiere a tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`.. | Obligatorio |
type | Body. String | Tipo de order, asociada a la solución de Mercado Pago para la cual fue creada. Para pagos con Wallet Connect, el único valor posible es online. | Obligatorio |
external_reference | Body. String | Referencia externa de la order, atribuida en el momento de su creación. Debe ser un valor único para cada order y no puede contener datos PII. El límite máximo es de 64 caracteres y los permitidos son: letras mayúsculas y minúsculas, números y los símbolos de guion (-) y guion bajo (_). | Obligatorio |
total_amount | Body. String | Monto total a pagar. El campo debe contener obligatoriamente 2 decimales, incluso cuando sea un número entero (por ejemplo, "10.00"). | Obligatorio |
description | Body. String | Descripción del producto o servicio comprado, es decir, la razón de la order de pago. | Opcional |
capture_mode | Body. String | Define cuándo el pago es capturado. Los valores posibles son: - automatic: debita el monto de la billetera del comprador inmediatamente en la creación de la order. Es el valor predeterminado si el campo no es enviado. - manual: solamente autoriza el pago en la creación de la order, siendo necesario capturarlo posteriormente por el endpoint de captura. | Opcional |
integration_data.platform_id | Body. String | Identificador de la plataforma atribuido por Mercado Pago. | Opcional |
transactions.payments.amount | Body. String | Monto de la transacción de pago. Debe coincidir con el valor informado en total_amount y seguir la misma regla de decimales. | Obligatorio |
transactions.payments.payment_method.type | Body. String | Tipo del medio de pago. Para transacciones con Wallet Connect, el único valor posible es wallet. | Obligatorio |
transactions.payments.payment_method.id | Body. String | Identificador del medio de pago. Para transacciones con Wallet Connect, el único valor posible es wallet. | Obligatorio |
transactions.payments.payment_method.token | Body. String | Token de pago (payer_token) obtenido al concluir el flujo de vinculación de la billetera. Debe contener exactamente 32 caracteres alfanuméricos, sin caracteres especiales. | Obligatorio |
transactions.payments.payment_method.statement_descriptor | Body. String | Descripción con la cual el pago aparecerá en el extracto del comprador. Acepta hasta 50 caracteres. | Opcional |
transactions.payments.stored_credential | Body. Object | Credencial de pago previamente autorizada por el comprador, utilizada para procesar pagos recurrentes iniciados por el vendedor (MIT — Merchant Initiated Transaction). Envía los campos reason con el valor recurring y payment_initiator con el valor merchant solamente en pagos recurrentes, omitiendo el parámetro en pagos únicos. | Opcional |
additional_info.sub_merchant | Body. Object | Información sobre el subcomercio involucrado en la transacción. Necesario solamente para integraciones de Facilitadores de pagos — entidades obligadas por la Circular BCB nº 3978/2020 a identificar los subcomercios en el momento de la transacción. | Opcional |
additional_info.sub_merchant.id | Body. String | Código del subcomercio. | Obligatorio |
additional_info.sub_merchant.legal_name | Body. String | Nombre del subcomercio. | Obligatorio |
additional_info.sub_merchant.mcc | Body. String | MCC (Merchant Category Code) del subcomercio, según la clasificación de Abecs y/o el CNAE primario. | Obligatorio |
additional_info.sub_merchant.document_type | Body. String | Tipo de documento del subcomercio, pudiendo ser CPF o CNPJ. | Obligatorio |
additional_info.sub_merchant.document_number | Body. String | Número de CPF o CNPJ del subcomercio. | Obligatorio |
additional_info.sub_merchant.phone | Body. String | Teléfono del subcomercio. | Obligatorio |
additional_info.sub_merchant.url | Body. String | URL del facilitador de pago. | Obligatorio |
additional_info.sub_merchant.address_street | Body. String | Calle donde el subcomercio está ubicado. | Obligatorio |
additional_info.sub_merchant.address_door_number | Body. Integer | Número de la dirección donde el subcomercio está ubicado. | Obligatorio |
additional_info.sub_merchant.zip | Body. String | CEP del subcomercio. | Obligatorio |
additional_info.sub_merchant.city | Body. String | Ciudad donde el subcomercio está ubicado. | Obligatorio |
additional_info.sub_merchant.region_code_iso | Body. String | Código ISO del estado donde el subcomercio está ubicado. | Obligatorio |
additional_info.sub_merchant.region_code | Body. String | Código de país del subcomercio. | Obligatorio |
additional_info.sub_merchant.country | Body. String | País donde el subcomercio está ubicado. | Obligatorio |
Si la solicitud es exitosa, la respuesta devolverá el estado 201 con la order creada. Para orders con capture_mode=automatic, el pago devolverá status=processed y status_detail=accredited, indicando que el monto ya fue debitado de la billetera del comprador.
json{ "id": "ORDBTA01KJZ06DEJX3DMY26FAB44BXNN", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "description": "Smartphone", "total_amount": "24.90", "total_paid_amount": "24.90", "status": "processed", "status_detail": "accredited", "capture_mode": "automatic", "transactions": { "payments": [ { "id": "PAY01KJZ06DEJX3DMXXXXXXXXXXXX", "amount": "24.90", "paid_amount": "24.90", "status": "processed", "status_detail": "accredited", "payment_method": { "id": "wallet", "type": "wallet", "statement_descriptor": "My Store", "installments": 1 } } ] } }
Entre los parámetros devueltos, tenemos los indicados en la tabla a continuación.
| Parámetro | Tipo | Descripción |
id | String | Identificador de la order creada, generado automáticamente por Mercado Pago. Utilízalo para consultar, capturar, cancelar o reembolsar la order. |
status | String | Devuelve el status de la order. Los valores posibles son processed, action_required, failed y canceled. |
status_detail | String | Detalla el motivo del status de la order. En los pagos aprobados, devuelve accredited. En orders creadas con capture_mode igual a manual, devuelve waiting_capture hasta que la captura sea realizada. |
total_paid_amount | String | Monto efectivamente pagado de la order, incluyendo eventuales descuentos aplicados. |
transactions.payments.id | String | Identificador de la transacción de pago, generado automáticamente por Mercado Pago. Es necesario para realizar reembolsos parciales. |
transactions.payments.status | String | Devuelve el status de la transacción de pago. |
transactions.payments.attempts | Array | Lista ordenada de los intentos de procesamiento realizados para este pago, con el status y el medio de pago de cada uno. |
Si creaste la order en modo manual, es decir, con el campo capture_mode=manual, recuerda que el procesamiento del pago requiere una etapa adicional. En ese escenario, el monto es solamente autorizado en la creación de la order y la respuesta devolverá status=action_required con status_detail=waiting_capture, indicando que la transacción aguarda la captura. Para efectuar el cobro y debitar el monto de la billetera del comprador, es necesario realizar una solicitud al endpoint /v1/orders/{order_id}/capturePOST. Después de la captura, la order pasará a devolver status=processed con status_detail=accredited.
La consulta permite obtener los datos actualizados de una order, incluyendo el status del pago y los intentos de procesamiento realizados. Recomendamos utilizarla como alternativa a las notificaciones cuando sea necesario confirmar el resultado de una transacción.
Para realizar la consulta, envía una solicitud al endpoint /v1/orders/{order_id}GET, incluyendo tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`. y el ID de la order (order_id) obtenido en la respuesta a su creación.
curlcurl -X GET \ 'https://api.mercadopago.com/v1/orders/{{ORDER_ID}}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
order_id | Path. String | Identificador de la order que se desea consultar, obtenido en la respuesta a su creación. | Obligatorio |
Authorization | Header | Se refiere a tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`.. | Obligatorio |
Si la solicitud es exitosa, la respuesta devolverá el estado 200 con los datos actualizados de la order.
json{ "id": "ORDBTA01KJZ06DEJX3DMY26FAB44BXNN", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "description": "Smartphone", "total_amount": "24.90", "total_paid_amount": "24.90", "status": "processed", "status_detail": "accredited", "transactions": { "payments": [ { "id": "PAY01KJZ06DEJX3DMXXXXXXXXXXXX", "amount": "24.90", "paid_amount": "24.90", "status": "processed", "status_detail": "accredited" } ] } }
La cancelación libera la autorización de un pago que aún no fue capturado, sin que ningún monto sea transferido de la billetera del comprador. Se aplica solamente a orders en el estado action_required, es decir, creadas con capture_mode=manual y aún pendientes de captura.
Para cancelar una order, envía una solicitud al endpoint /v1/orders/{order_id}/cancelPOST sin enviar el body en la solicitud. Asegúrate de incluir tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`. y el ID de la order (order_id) que deseas cancelar.
curlcurl -X POST \ 'https://api.mercadopago.com/v1/orders/{{ORDER_ID}}/cancel' \ -H 'Content-Type: application/json' \ -H 'X-Idempotency-Key: {{SOME_UNIQUE_VALUE}}' \ -H 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
order_id | Path. String | Identificador de la order que se desea cancelar, obtenido en la respuesta a su creación. | Obligatorio |
X-Idempotency-Key | Header | Clave de idempotencia. Usa un valor exclusivo por solicitud para evitar el reprocesamiento de la cancelación. | Obligatorio |
Authorization | Header | Se refiere a tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`.. | Obligatorio |
Si la solicitud es exitosa, la respuesta traerá la order con status=canceled y status_detail=canceled_transaction, indicando que la autorización fue liberada.
order_already_canceled en nuevos intentos.Los reembolsos son transacciones realizadas cuando determinado cobro es revertido y los montos pagados son devueltos al comprador. Con Wallet Connect, es posible realizar la devolución total o parcial de una order ya procesada.
Elige la opción que mejor se adecue a tus necesidades y sigue las instrucciones correspondientes.
Para realizar el reembolso total de una order, envía una solicitud al endpoint /v1/orders/{order_id}/refundPOST sin enviar el body en la solicitud. Asegúrate de incluir tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`. y el ID de la order (order_id) que deseas reembolsar.
curlcurl -X POST \ 'https://api.mercadopago.com/v1/orders/{{ORDER_ID}}/refund' \ -H 'Content-Type: application/json' \ -H 'X-Idempotency-Key: {{SOME_UNIQUE_VALUE}}' \ -H 'Authorization: Bearer {{YOUR_ACCESS_TOKEN}}'
| Parámetro | Tipo | Descripción | Obligatoriedad |
order_id | Path. String | Identificador de la order que se desea reembolsar, obtenido en la respuesta a su creación. | Obligatorio |
X-Idempotency-Key | Header | Clave de idempotencia. Usa un valor exclusivo por solicitud para evitar el reprocesamiento del reembolso. | Obligatorio |
Authorization | Header | Se refiere a tu Access Token de pruebaClave privada utilizada en el backend para autenticar las solicitudes. En la integración con Wallet Connect, en un primer momento tu Access Token será entregado por el equipo responsable de crear tu aplicación en Mercado Pago, pero después de tener acceso a esa aplicación podrás visualizarlo en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`.. | Obligatorio |
Si la solicitud es exitosa, la respuesta traerá el status=refunded y un nuevo nodo transactions.refunds, que contendrá los detalles del reembolso, además del id de la transacción de pago original y el id de la transacción de reembolso.
json{ "id": "ORDBTA01KJZ0AYZPD3SXDYCQ109Q69EA", "status": "refunded", "status_detail": "refunded", "transactions": { "refunds": [ { "id": "REF01KJZ0BPKX0BQ0KG1VPBMJDX9G", "transaction_id": "PAY01KJZ0AYZPD3SXDYCQ10RYPF8E", "amount": "24.90", "status": "processed" } ] } }