---
title: Operatoria en 2 pasos
slug: operatoria-en-2-pasos
description: Learn about the concept of "2-step operation" and how it enhances transaction authorization and capture in the Checkout and Órdenes de Pago modules. This comprehensive document explains the flow of a 2-step operation in the Checkout module, along with cod
docTags: 
createdAt: 2021-02-24T20:06:47.000Z
---

La operatoria en 2 pasos es un tipo especial de operatoria que requiere autorización a nivel de entidad y permite que la transacción pueda ser primero autorizada y luego capturada en otro momento.

Este tipo de operatoria está disponible actualmente en 2 módulos:

- [Checkout](https://mobbex.dev/checkout)
- [Órdenes de Pago](https://mobbex.dev/ordenes-de-pago)

A modo de ejemplo, se define el flujo de la operación para un Checkout con la modalidad "2 pasos". De igual forma aplicaría para el módulo de Órdenes de Pago:

::Image[]{src="https://api.archbee.com/api/optimize/wYlzYU9oe8HZjh9BkqeFY/t5zemICkaqKDTcep97KHD_flujo-checkout-2step.png" size="90" width="603" height="551" caption="Checkout en 2 pasos" position="center" showCaption="true"}

De forma predeterminada, ambos módulos trabajan sin operatoria en 2 pasos, es decir, la operación es directamente capturada sobre la tarjeta del cliente. Para poder habilitarla, es necesario definir en el cuerpo de la petición de creación del módulo la variable `intent` con el tipo de operatoria a realizar:

- **Pago Normal**: payment.v2
- **Operatoria en 2 pasos**: payment.2-step

Si la operatoria es en 2 pasos y se completa exitosamente la operación dentro del módulo, la misma pasa a estar en estado "Autorizada".

Para poder finalmente capturar la operación, es necesario llamar a la siguiente API:

:::ApiMethodV2
```json
{
  "tab": "request",
  "url": "https://api.mobbex.com/p/operations/{ID}/capture",
  "name": "Capturar Operación",
  "method": "POST",
  "request": {
    "pathParameters": [],
    "queryParameters": [
      {
        "kind": "required",
        "name": "ID",
        "type": "string",
        "description": "ID de la Operación que se intenta capturar."
      }
    ],
    "headerParameters": [
      {
        "kind": "required",
        "name": "x-api-key",
        "type": "string",
        "description": "Clave API de su aplicación."
      },
      {
        "kind": "required",
        "name": "x-access-token",
        "type": "string",
        "description": "Token de acceso de la entidad."
      }
    ],
    "bodyDataParameters": [
      {
        "kind": "required",
        "name": "total",
        "type": "Number",
        "description": "Monto que se capturará. Formato XXX.xx donde el PUNTO es el separador decimal."
      }
    ],
    "formDataParameters": []
  },
  "results": {
    "languages": [
      {
        "id": "8-mlOqHQ1BAE-ee8dSrhi",
        "code": "{\n    \"result\": true,\n    \"status_message\": \"El cupón fue capturado correctamente\"\n}",
        "language": "200"
      }
    ],
    "selectedLanguageId": "8-mlOqHQ1BAE-ee8dSrhi"
  },
  "examples": {
    "languages": [
      {
        "id": "NdNECFzlaXK6D5SzAVvD8",
        "code": "var data = JSON.stringify({\n  \"total\": 100\n});\n\nvar xhr = new XMLHttpRequest();\nxhr.withCredentials = true;\n\nxhr.addEventListener(\"readystatechange\", function() {\n  if(this.readyState === 4) {\n    console.log(this.responseText);\n  }\n});\n\nxhr.open(\"POST\", \"https://api.mobbex.com/p/operations/54g_tal~s4/capture\");\nxhr.setRequestHeader(\"x-api-key\", \"zJ8LFTBX6Ba8D611e9io13fDZAwj0QmKO1Hn1yIj\");\nxhr.setRequestHeader(\"x-access-token\", \"d31f0721-2f85-44e7-bcc6-15e19d1a53cc\");\nxhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\nxhr.send(data);",
        "language": "javascript"
      },
      {
        "id": "0sB3OGXntfywrh1oQ44b2",
        "code": "<?php\r\n\r\n$curl = curl_init();\r\n\r\ncurl_setopt_array($curl, array(\r\n  CURLOPT_URL => 'https://api.mobbex.com/p/operations/54g_tal~s4/capture',\r\n  CURLOPT_RETURNTRANSFER => true,\r\n  CURLOPT_ENCODING => '',\r\n  CURLOPT_MAXREDIRS => 10,\r\n  CURLOPT_TIMEOUT => 0,\r\n  CURLOPT_FOLLOWLOCATION => true,\r\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\r\n  CURLOPT_CUSTOMREQUEST => 'POST',\r\n  CURLOPT_POSTFIELDS =>'{\r\n    \"total\": 100.00\r\n}',\r\n  CURLOPT_HTTPHEADER => array(\r\n    'x-api-key: zJ8LFTBX6Ba8D611e9io13fDZAwj0QmKO1Hn1yIj',\r\n    'x-access-token: d31f0721-2f85-44e7-bcc6-15e19d1a53cc',\r\n    'Content-Type: application/json'\r\n  ),\r\n));\r\n\r\n$response = curl_exec($curl);\r\n\r\ncurl_close($curl);\r\necho $response;\r\n",
        "language": "php"
      }
    ],
    "selectedLanguageId": "NdNECFzlaXK6D5SzAVvD8"
  },
  "description": "Se debe tener en cuenta el acuerdo realizado con la marca ya que se podrá Capturar más o menos de lo Autorizado.",
  "currentNewParameter": {
    "label": "Query Parameter",
    "value": "queryParameters"
  },
  "autoGeneratedAnchorSlug": "capturar-operacin",
  "legacyHash": "2JOFfbEUM3ZvhTsfXa3jD"
}
```
:::

**Resultado**

- *`result`*: Resultado de la llamada realizada. Siendo true cuando la operación se anula correctamente y false cuando se produce un fallo.
- `status_message`: Mensaje de resultado de la llamada o mensaje de la red.



**Consideraciones a tener en cuenta en la Operatoria en 2 pasos:**

- En Argentina solo se puede realizar en **Tarjetas de Crédito**. Cuando se activa la función 2 pasos, las tarjetas de débito, siguen funcionando en 1 paso.
- La autorización solo permanece disponible **15 días corridos** para su captura, pasado ese plazo, queda vencida y no se podrá recuperar ese dinero.
- Se pueden hacer devoluciones, posteriores a la captura.



### Cancelar Autorización

Para cancelar una autorización realizada sobre una tarjeta, se puede utilizar la API documentada en el siguiente enlace: [Devoluciones](https://mobbex.dev/devoluciones#anulacion-devolucion-total)

