{"componentChunkName":"component---src-templates-article-template-tsx","path":"/co/transfer-payments/bre-b-payments","result":{"data":{"article":{"title":"Acepta pagos con Bre-b","subtitle":null,"fullWidth":null,"hero":null,"heroTextColor":null,"heroImg":null,"content":[{"body":{"childMdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\nvar Aside = makeShortcode(\"Aside\");\nvar CodeTabs = makeShortcode(\"CodeTabs\");\nvar NextStep = makeShortcode(\"NextStep\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Bre-B ofrece un flujo alternativo para aceptar pagos por transferencia bancaria en Colombia. En lugar de requerir los datos de la cuenta del pagador, Kushki genera un c\\xF3digo QR que el usuario escanea desde su aplicaci\\xF3n bancaria para autorizar el pago en tiempo real.\"), mdx(\"p\", null, \"Este flujo convive con el proceso ACH existente \\u2014 ning\\xFAn cambio es requerido en integraciones actuales.\"), mdx(Aside, {\n    type: \"danger\",\n    title: \"Importante\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Disponible exclusivamente para Colombia con el procesador Bre-B configurado en tu MID. Para habilitarlo, contacta a tu ejecutivo de cuenta.\")), mdx(\"h2\", {\n    \"id\": \"detalles-de-operación\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#detalles-de-operaci%C3%B3n\",\n    \"aria-label\": \"detalles de operación permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Detalles de operaci\\xF3n\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Par\\xE1metro\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Detalle\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Moneda\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"COP\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Campo adicional requerido\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"flowType = \\\"BRE_B\\\"\"), \" en el cuerpo del token\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Consulta de listado de bancos\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No requerida para este flujo\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Resultado del init\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"C\\xF3digo QR (base64 PNG) para pago desde app bancaria\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Vigencia del QR\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"10 minutos. Pasado ese tiempo el QR se invalida y debe generarse un nuevo token e init.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Tiempo de procesamiento\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Tiempo real\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Cancelaci\\xF3n\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"PATCH /transfer/v1/cancel/{token}\"), \" \\u2014 disponible mientras la transacci\\xF3n no tenga estado final. Retorna HTTP 204 No Content.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Webhook\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Sin cambios respecto al flujo ACH\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"C\\xF3digos de error\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Sin cambios respecto al flujo ACH\")))), mdx(\"h2\", {\n    \"id\": \"1-crea-el-token\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#1-crea-el-token\",\n    \"aria-label\": \"1 crea el token permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. Crea el token\"), mdx(\"p\", null, \"Realiza la petici\\xF3n del token usando el mismo endpoint que el flujo ACH. Para activar el flujo Bre-B, incluye el campo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"flow\"), \". No es necesario consultar el listado de bancos antes de este paso.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Campos requeridos\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Campo\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Tipo\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Descripci\\xF3n\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.subtotalIva0\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Monto de la transacci\\xF3n (sin IVA)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.subtotalIva\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Monto de la transacci\\xF3n (con IVA). Igual a subtotalIva0 si iva = 0\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.iva\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Valor del IVA (0 si no aplica)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"currency\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Moneda. Debe ser \\u201CCOP\\u201D\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"flow.processorName\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"NUEVO campo requerido. Debe ser \\u201CBRE-B\\u201D para activar este flujo\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"flow.type\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"NUEVO campo requerido. Debe ser \\u201CQR\\u201D para activar este flujo\")))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Campos opcionales\")), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"callbackUrl\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"userType\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentType\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentNumber\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"paymentDescription\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"email\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"bankId\")), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'POST',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/tokens',\\n  'headers': { 'Public-Merchant-Id': '', 'Content-Type': 'application/json' },\\n  body: JSON.stringify({\\n    \\\"amount\\\": { \\\"subtotalIva0\\\": 1000, \\\"subtotalIva\\\": 1000, \\\"iva\\\": 0 },\\n    \\\"currency\\\": \\\"COP\\\",\\n    \\\"flow\\\":{\\n        \\\"processorName\\\":\\\"BRE-B\\\",\\n        \\\"type\\\":\\\"QR\\\"\\n    }\\n  })\\n};\\nrequest(options, function(error, response) {\\n  var data = JSON.parse(response.body);\\n  console.log('token:', data.token);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"payload = json.dumps({\\n  \\\"amount\\\": { \\\"subtotalIva0\\\": 1000, \\\"subtotalIva\\\": 1000, \\\"iva\\\": 0 },\\n  \\\"currency\\\": \\\"COP\\\",\\n  \\\"flow\\\":{\\n        \\\"processorName\\\":\\\"BRE-B\\\",\\n        \\\"type\\\":\\\"QR\\\"\\n    }\\n})\\nheaders = {'Public-Merchant-Id': '', 'Content-Type': 'application/json'}\\nresponse = requests.post('https://api-uat.kushkipagos.com/transfer/v1/tokens',\\n                          headers=headers, data=payload)\\nprint('token:', response.json()['token'])\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$body->append(json_encode([\\n  \\\"amount\\\" => [\\\"subtotalIva0\\\" => 1000, \\\"subtotalIva\\\" => 1000, \\\"iva\\\" => 0],\\n  \\\"currency\\\" => \\\"COP\\\",\\n  \\\"flow\\\" => [\\n        \\\"processorName\\\" => \\\"BRE-B\\\",\\n        \\\"type\\\" => \\\"QR\\\"\\n    ]\\n]));\\n// POST a /transfer/v1/tokens con Public-Merchant-Id\\necho json_decode($client->getResponse()->getBody(), true)['token'];\\n\"))), mdx(\"h2\", {\n    \"id\": \"2-genera-el-código-qr\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#2-genera-el-c%C3%B3digo-qr\",\n    \"aria-label\": \"2 genera el código qr permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. Genera el c\\xF3digo QR\"), mdx(\"p\", null, \"Con el token obtenido, inicializa la transacci\\xF3n. Kushki retorna un c\\xF3digo QR en formato base64 que debes mostrar al usuario para que lo escanee desde su aplicaci\\xF3n bancaria.\"), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'POST',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/init',\\n  'headers': { 'Private-Merchant-Id': '', 'Content-Type': 'application/json' },\\n  body: JSON.stringify({\\n    \\\"token\\\": \\\"{{token}}\\\",\\n    \\\"amount\\\": { \\\"subtotalIva\\\": 0, \\\"subtotalIva0\\\": 1000, \\\"iva\\\": 0 },\\n    // \\\"fullResponse\\\": \\\"v2\\\"  // opcional \\u2014 incluye el objeto details en la respuesta\\n  })\\n};\\nrequest(options, function(error, response) {\\n  var data = JSON.parse(response.body);\\n  console.log('qr:', data.qr);\\n  console.log('ref:', data.transactionReference);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"payload = json.dumps({\\n  \\\"token\\\": \\\"{{token}}\\\",\\n  \\\"amount\\\": { \\\"subtotalIva\\\": 0, \\\"subtotalIva0\\\": 1000, \\\"iva\\\": 0 },\\n  # \\\"fullResponse\\\": \\\"v2\\\"  # opcional \\u2014 incluye el objeto details en la respuesta\\n})\\nheaders = {'Private-Merchant-Id': '', 'Content-Type': 'application/json'}\\ndata = requests.post('https://api-uat.kushkipagos.com/transfer/v1/init',\\n                      headers=headers, data=payload).json()\\nprint('qr:', data['qr'])\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$body->append(json_encode([\\n  \\\"token\\\" => \\\"{{token}}\\\",\\n  \\\"amount\\\" => [\\\"subtotalIva\\\" => 0, \\\"subtotalIva0\\\" => 1000, \\\"iva\\\" => 0],\\n  // \\\"fullResponse\\\" => \\\"v2\\\"  // opcional\\n]));\\n// POST a /transfer/v1/init con Private-Merchant-Id\\n$data = json_decode($client->getResponse()->getBody(), true);\\necho $data['qr'];\\n\"))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Ejemplo de respuesta \\u2014 sin fullResponse\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"qr\\\": \\\"data:image/png;base64,iVBORw0KGgoAAAANS...\\\",\\n  \\\"transactionReference\\\": \\\"f2110170-8eec-4214-b2d0-38970d44f8e1\\\"\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Ejemplo de respuesta \\u2014 con fullResponse: \\u201Cv2\\u201D\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"qr\\\": \\\"data:image/png;base64,iVBORw0KGgoAAAANS...\\\",\\n  \\\"transactionReference\\\": \\\"f2110170-8eec-4214-b2d0-38970d44f8e1\\\",\\n  \\\"details\\\": {\\n    \\\"status\\\": \\\"initializedTransaction\\\",\\n    \\\"amount\\\": { \\\"currency\\\": \\\"COP\\\", \\\"iva\\\": 0, \\\"subtotalIva\\\": 1000, \\\"subtotalIva0\\\": 1000 },\\n    \\\"created\\\": 1784125900901,\\n    \\\"merchantId\\\": \\\"20000000106921087000\\\",\\n    \\\"merchantName\\\": \\\"Mi Comercio Colombia\\\"\\n  }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"cómo-renderizar-el-campo-qr\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#c%C3%B3mo-renderizar-el-campo-qr\",\n    \"aria-label\": \"cómo renderizar el campo qr permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"C\\xF3mo renderizar el campo qr\"), mdx(\"p\", null, \"El campo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"qr\"), \" contiene una cadena Data URI completa (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"data:image/png;base64,...\"), \"). Para mostrarlo en web:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<img src=\\\"{qr}\\\" alt=\\\"Escanea para pagar\\\" width=\\\"250\\\" />\\n\")), mdx(\"p\", null, \"En apps nativas, decodifica el base64 y renderiza el bitmap con el componente de imagen de tu plataforma.\"), mdx(\"h2\", {\n    \"id\": \"3-muestra-el-qr-al-usuario-y-espera-el-pago\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#3-muestra-el-qr-al-usuario-y-espera-el-pago\",\n    \"aria-label\": \"3 muestra el qr al usuario y espera el pago permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. Muestra el QR al usuario y espera el pago\"), mdx(\"p\", null, \"El usuario escanea el QR desde su aplicaci\\xF3n bancaria y autoriza el pago. Kushki notifica el resultado de forma as\\xEDncrona.\\nEl QR expira en 10 minutos. Si el usuario no escanea en ese tiempo, deber\\xE1s generar un nuevo token e init.\\nPara monitorear el resultado: configura un webhook (ver paso 5) o consulta Get Status manualmente.\\nMientras el pago est\\xE1 pendiente, puedes cancelar la transacci\\xF3n (ver paso 4).\"), mdx(\"h2\", {\n    \"id\": \"4-cancela-la-transacción-opcional\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#4-cancela-la-transacci%C3%B3n-opcional\",\n    \"aria-label\": \"4 cancela la transacción opcional permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. Cancela la transacci\\xF3n (opcional)\"), mdx(\"p\", null, \"Si el usuario no puede completar el pago o necesitas invalidar el QR activo, cancela la transacci\\xF3n antes de que alcance un estado final.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Cu\\xE1ndo usar la cancelaci\\xF3n\"), \"\\nUsa este endpoint cuando el usuario ingrese un monto incorrecto, decida no completar el pago, o necesites emitir un nuevo QR antes de que el QR original expire (vigencia de 10 minutos). Solo es posible si la transacci\\xF3n a\\xFAn no tiene un estado final.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Endpoint\"), \"\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"PATCH https://{api-url}/transfer/v1/cancel/{token}\")), mdx(\"p\", null, \"Donde \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{token}\"), \" es el token obtenido en el paso 1.\"), mdx(Aside, {\n    type: \"info\",\n    title: \"Referencia t\\xE9cnica\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Para mayor detalle sobre el comportamiento de la cancelaci\\xF3n, consulta el documento de mapeo interno:\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.google.com/document/d/1sjtz4S_872jMiudGpTinsK5d50xLpNpLCpJorkTReV4\"\n  }, \"Cancelaci\\xF3n \\u2014 Referencia t\\xE9cnica\"))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Respuesta exitosa (HTTP 204 No Content)\"), \"\\nLa cancelaci\\xF3n exitosa retorna HTTP 204 sin cuerpo en la respuesta.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Error \\u2014 transacci\\xF3n con estado final (HTTP 400)\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"code\\\": \\\"T023\\\",\\n  \\\"message\\\": \\\"Transacci\\xF3n posee un estado final.\\\"\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"5-consulta-el-estado-de-la-transacción\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#5-consulta-el-estado-de-la-transacci%C3%B3n\",\n    \"aria-label\": \"5 consulta el estado de la transacción permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"5. Consulta el estado de la transacci\\xF3n\"), mdx(\"p\", null, \"El estado final del pago llega de forma as\\xEDncrona. Puedes recibirlo de dos maneras:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Webhook:\"), \" Kushki notifica autom\\xE1ticamente cuando el pago es aprobado o rechazado. Sin cambios respecto al flujo ACH.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Get Status:\"), \" Consulta manualmente el estado usando el token en el path.\")), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'GET',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/status/{{token}}', // token del paso 1\\n  'headers': { 'Private-Merchant-Id': '' }\\n};\\nrequest(options, function(error, response) {\\n  console.log(response.body);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"token = '{{token}}'  # token obtenido en el paso 1\\nurl = f'https://api-uat.kushkipagos.com/transfer/v1/status/{token}'\\nheaders = {'Private-Merchant-Id': ''}\\nresponse = requests.get(url, headers=headers)\\nprint(response.text)\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$token = '{{token}}';  // token del paso 1\\n$request->setRequestUrl(\\\"https://api-uat.kushkipagos.com/transfer/v1/status/{$token}\\\");\\n$request->setRequestMethod('GET');\\n$request->setHeaders(['Private-Merchant-Id' => '']);\\n$client->enqueue($request)->send();\\necho $client->getResponse()->getBody();\\n\"))), mdx(Aside, {\n    type: \"info\",\n    title: \"Sin cambios en webhook ni c\\xF3digos de error\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"La estructura del webhook y los c\\xF3digos de error son id\\xE9nticos al flujo ACH existente.\")), mdx(\"h2\", {\n    \"id\": \"6-prueba-tu-integración\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#6-prueba-tu-integraci%C3%B3n\",\n    \"aria-label\": \"6 prueba tu integración permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"6. Prueba tu integraci\\xF3n\"), mdx(\"p\", null, \"El ambiente UAT simula escenarios mediante el valor de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"transaction_amount\"), \", que corresponde a la suma de todos los campos del objeto amount en la petici\\xF3n (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva0\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"iva\"), \"). Por ejemplo, para activar el escenario \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"1000\"), \" env\\xEDa \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva0: 500, subtotalIva: 500, iva: 0\"), \". Si la suma no coincide con ning\\xFAn valor de la tabla, la respuesta es exitosa sin webhook.\"), mdx(Aside, {\n    type: \"danger\",\n    title: \"Solo son simulaciones\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Estos montos son identificadores de escenario en el sandbox. No tienen significado econ\\xF3mico. No los uses en producci\\xF3n.\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"transaction_amount\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"HTTP status\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Estado\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Webhook\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Nota\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Dispara \\u2192 PAID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Happy path con webhook\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"9999\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No dispara\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"La transacci\\xF3n queda inicializada\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Dispara \\u2192 PAID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Happy path con webhook\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"11000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"ERROR\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No dispara\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR-CODE-0001\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"12000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Dispara \\u2192 rejected\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Transacci\\xF3n rechazada\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"13000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u2014\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"TIMEOUT\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No dispara\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Se deja la transacci\\xF3n inicializada. Reutiliza el DELAY_MS existente.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"99999999\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"400\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"ERROR\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No dispara\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR-CODE-0059 \\u2014 monto fuera de rango\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Cualquier otro\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No dispara\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Respuesta exitosa gen\\xE9rica\")))), mdx(\"h2\", {\n    \"id\": \"7-prepara-tu-certificación\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#7-prepara-tu-certificaci%C3%B3n\",\n    \"aria-label\": \"7 prepara tu certificación permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"7. Prepara tu certificaci\\xF3n\"), mdx(\"p\", null, \"Toma en consideraci\\xF3n las siguientes pautas para aprobar la certificaci\\xF3n t\\xE9cnica:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Los c\\xE1lculos de los montos son correctos (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"subtotalIva\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"subtotalIva0\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"iva\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"El campo \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"flowType\"), \" se env\\xEDa como \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"\\\"BRE_B\\\"\"), \" en la petici\\xF3n del token.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"El c\\xF3digo QR se muestra correctamente al usuario desde el campo \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"qr\"), \" de la respuesta del init.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Se implementa el endpoint de cancelaci\\xF3n para los flujos donde el usuario no completa el pago.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Se muestran mensajes en pantalla de acuerdo con las respuestas de Kushki.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Si se reciben notificaciones por webhook, se responde con HTTP 200.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"El bot\\xF3n de pago se deshabilita despu\\xE9s del primer clic para evitar doble env\\xEDo.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Todas las respuestas de Kushki se guardan y registran (requeridas en caso de soporte).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"El logo de Kushki es visible. Desc\\xE1rgalo en \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://s3.amazonaws.com/kushki-cdn-production/docs/Logo+Kushki.zip\"\n  }, \"s3.amazonaws.com/kushki-cdn-production/docs/Logo+Kushki.zip\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Se env\\xEDan todos los campos requeridos seg\\xFAn la referencia API.\")), mdx(\"h2\", {\n    \"id\": \"artículos-relacionados\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#art%C3%ADculos-relacionados\",\n    \"aria-label\": \"artículos relacionados permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Art\\xEDculos relacionados\"), mdx(NextStep, {\n    type: \"recommended\",\n    side: \"left\",\n    link: \"https://docs.kushki.com/co/transfer-payments/accept-a-payment\",\n    title: \"Acepta pagos por transferencia (ACH)\",\n    mdxType: \"NextStep\"\n  }, mdx(\"p\", null, \"Recibe transferencias bancarias\")), mdx(NextStep, {\n    type: \"recommended\",\n    side: \"right\",\n    link: \"https://docs.kushki.com/co/notifications/one-time-payments/webhook-transfer-in\",\n    title: \"Configura webhooks\",\n    mdxType: \"NextStep\"\n  }, mdx(\"p\", null, \"Recibe notificaciones del estado de tus pagos.\")), mdx(NextStep, {\n    type: \"recommended\",\n    side: \"left\",\n    link: \"https://docs.google.com/document/d/1sjtz4S_872jMiudGpTinsK5d50xLpNpLCpJorkTReV4\",\n    title: \"Cancelaci\\xF3n \\u2014 Referencia t\\xE9cnica\",\n    mdxType: \"NextStep\"\n  }, mdx(\"p\", null, \"Referencia T\\xE9cnica\")));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Bre-B ofrece un flujo alternativo para aceptar pagos por transferencia bancaria en Colombia. En lugar de requerir los datos de la cuenta del…","timeToRead":3,"tableOfContents":{"items":[{"url":"#detalles-de-operación","title":"Detalles de operación"},{"url":"#1-crea-el-token","title":"1. Crea el token"},{"url":"#2-genera-el-código-qr","title":"2. Genera el código QR","items":[{"url":"#cómo-renderizar-el-campo-qr","title":"Cómo renderizar el campo qr"}]},{"url":"#3-muestra-el-qr-al-usuario-y-espera-el-pago","title":"3. Muestra el QR al usuario y espera el pago"},{"url":"#4-cancela-la-transacción-opcional","title":"4. Cancela la transacción (opcional)"},{"url":"#5-consulta-el-estado-de-la-transacción","title":"5. Consulta el estado de la transacción"},{"url":"#6-prueba-tu-integración","title":"6. Prueba tu integración"},{"url":"#7-prepara-tu-certificación","title":"7. Prepara tu certificación"},{"url":"#artículos-relacionados","title":"Artículos relacionados"}]}}},"updatedAt":"24 agosto 2026","tabTitle":"Acepta pagos con bre-b"}]}},"pageContext":{"country":"co","id":"c02ad12d-2f3c-509b-a34f-4f943936a657","locale":"es","localeDateFormat":"DD MMMM YYYY"}},"staticQueryHashes":["1632712422","2408418099","63159454"]}