{"componentChunkName":"component---src-templates-article-template-tsx","path":"/cl/en/card-present-payments/kushki-one/authentication","result":{"data":{"article":{"title":"Autenticación y Cifrado de Requests","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 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(Aside, {\n    type: \"warning\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Este mecanismo aplica \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"exclusivamente al modo semi-integrado\"), \". Si tu integraci\\xF3n usa el SDK nativo o la topolog\\xEDa de red local sin cifrado habilitado, consulta la secci\\xF3n de \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/kushki-one/kushki-one-primeros-pasos#seguridad-en-la-comunicaci%C3%B3n\"\n  }, \"Seguridad en la Comunicaci\\xF3n\"), \".\")), mdx(Aside, {\n    title: \"\\uD83D\\uDEA7 Early Release \\u2014 Beta\",\n    type: \"danger\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Este producto est\\xE1 en acceso temprano\"), \". Los par\\xE1metros, estructuras de respuesta y comportamientos pueden cambiar sin previo aviso. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"No\"), \" uses esta versi\\xF3n en producci\\xF3n sin coordinarlo previamente con el equipo de integraciones de Kushki.\")), mdx(\"p\", null, \"Cuando \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"encrypted_http_communication\"), \" est\\xE1 habilitado en tu terminal, todos los requests hacia Kushki ONE Connect deben ir \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"firmados y cifrados\"), \". El payload original nunca viaja en texto plano.\"), mdx(\"p\", null, \"El equipo de Kushki activa esta configuraci\\xF3n durante el onboarding. Confirma con tu contacto t\\xE9cnico si aplica para tu integraci\\xF3n antes de implementar este flujo.\"), mdx(\"h2\", {\n    \"id\": \"variables-requeridas\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#variables-requeridas\",\n    \"aria-label\": \"variables requeridas 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  }))), \"Variables requeridas\"), mdx(\"p\", null, \"Aseg\\xFArate de tener estas cuatro variables disponibles en tu cliente:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Variable\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Descripci\\xF3n\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"businessCode\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Llave privada que autentica a tu comercio\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"terminalSerial\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"N\\xFAmero de serie de la terminal SmartPOS\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"timestamp\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Unix timestamp en segundos (UTC)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"requestData\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Payload original del request\")))), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"flujo-general\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#flujo-general\",\n    \"aria-label\": \"flujo general 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  }))), \"Flujo general\"), mdx(\"p\", null, \"Cada request pasa por dos procesos \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"independientes\"), \" que parten del mismo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"requestData\"), \". Uno produce la firma y el otro produce el payload cifrado. Ambos se env\\xEDan juntos en el request final.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"maxWidth\": \"1200px\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\"\n    }\n  }, \"\\n        \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"45.294117647058826%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAASCAMAAAAewWyUAAACxFBMVEX////c3eHP0dbR09jQ0tfh4uX4+fleaYMAAEQAAE8ANWc5TnQyS3I/VHdEVngALmQAAEB5gJT5+fpsdYwAAFUAG10nQ21IWXo/U3ZBVHZJWXomQWwAAFKCiZvr7O7j5Ofk5ejd3uLg4uXk5eft7vD8/f7+/v78/P36+/z9/v/9/v7+///7+/3s7/bw8/j4+fv5+vz8/f39/f79/f34+fr6/fvu+fXs+PPz+vjx9//w9v7w9//s8/zv9f7y+P/0+f/s//rn//no//nm/fjn/vnk/Pfk/Pbr//n7/f/s9f/u9//k7PbY4u3a5O/m7/nd5vHX4Oze5/LZ4+7o8fvu9v/u9f/8//7i//je//jf//jQ8OvL6+jR8ezL6ubL6+fM6+je/vff//nh//j7//7t9f/f6fbY4/Pb5/Xj7fnb5vTY5PPc6Pbn8Pvt9v/g//nY+/PK9evN9uzL9evK9erW+vLx+P/v9v7t9P3u9f7u9f3z+P/s/vrl/vfk/ffr/vn//f/u7/Dq6+3r6+3r7O3i5Ofm6Orq6u309Pbx/fjq+/Ts+/Xs/PXm+PHl9/Hw/Pf09fZga4UAJGANNWYbOmdLWnlSYH1MXHtPXnw8TnIPNWULNWYACVqcoa6G7cgA5rAN57MS57MU57ME3a0A3a4O57N67MT7//3z8/REVHYAAFAAAFgAIGU9VoBKX4Q/WIBKX4NKYIUtTHkACFwAAEeOlKP9//5268MA5asA5q8A460A4KwA464A1aYA1KYA4awA5axl6r/6/v319fZlb4gBM2UnQGotS3ktUYQqTX8rTX8oS3wrUIIvUYItRnEmP2qdoq6J7ckA5rEm57Qq4rIt3bAt47Mt37Et3rAu3rAn57QA5rJ87MXv8PHn6Ovl5+nk5unl5unm5+rs7O7y/fjr+/Tn+PLk9vDm9/Hl9vHr+/X//v///P9CKmFcAAABWElEQVQYGY3Bv2sTYQCA4fe9fmmILZKaFi0VnSLVOAlOYusfIYKZOzh3EETkHBzExclJHF2Erv7ARSm6OIdWOwkOmoJ1EUrq3efl0sjFQXwe/pdMUBGIxKkDqqRq2rFB3T2qAlWzjg3q7lEVqPp+SkHNarHGBCm1/cQZyXcoLLtFoZ3wEc5hj0Jg6LxCw5+zbZIZoheIQOLy9kWVIYGzTTRnSg8gCW+BK4qFX0kemf7SgwCcdiQLDgHXVDy03zjZg0Bp0TG+MrJgabAbGQrA5yYdCxE282QVeHb7vd/iJYnvJF7eYEKHv6Upf0jhrk9YU3Mec8NbwH1FNCcSa+uAwENL9+5YWoPOuoqaR8KgbhcCcMLSIwv7DYEHHspCltUVCMCSFZsrwM2nltAs6AcgAVYWu9ePF14vXJ2f//EG6LVaL4+9mnsx9/xoq3lko8s/pWm/399NGfkNqblX7AWfBBUAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }, \"\\n          \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=340&fm=webp 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=680&fm=webp 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=1360&fm=webp 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=340 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=680 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png?w=1360 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"boxShadow\": \"inset 0px 0px 0px 400px transparent\"\n    },\n    \"alt\": \"Flujo general\",\n    \"title\": \"\",\n    \"src\": \"https://images.ctfassets.net/mmjbm94f6iyd/4HjxvS7zL3bwQHWkfdsWKN/43285cdbb1db4c34a53b21feebb437bd/kushki-one-flujo-firma-cifrado.png\",\n    \"loading\": \"lazy\"\n  }), \"\\n        \"), \"\\n        \"), \"\\n      \")), mdx(Aside, {\n    type: \"warning\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"dataWithKey\"), \" \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"nunca se cifra ni se env\\xEDa\"), \". Solo se usa internamente para generar la firma. Incluir el campo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"key\"), \" en el payload cifrado causar\\xE1 un error de autenticaci\\xF3n.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"cadena-de-derivación-de-claves\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#cadena-de-derivaci%C3%B3n-de-claves\",\n    \"aria-label\": \"cadena de derivación de claves 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  }))), \"Cadena de derivaci\\xF3n de claves\"), mdx(\"p\", null, \"Antes de implementar los pasos, revisa c\\xF3mo se relacionan tus inputs con las claves finales. Las tres variables de entrada (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"businessCode\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"terminalSerial\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"timestamp\"), \") producen exactamente dos outputs: \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"aesKey\"), \" para el cifrado y \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"encodedKeyTimestamp\"), \" para la firma.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"maxWidth\": \"1200px\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\"\n    }\n  }, \"\\n        \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"71.32352941176471%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAdCAIAAABXK7kkAAAFKElEQVQYGcXBS4ydZR3H8e/v/zzvOWcubWemF4gKLW03Wl2UakKgmrAiYSF7Fy7cGzfs3Jq4kAQSF11oTNi4kcQFS6LS4ILYtGhSi4gSQQu90HY6M+25vO/z/Dwz006m2FvQxM9HtvkvtF0ttQh6TZbEQ8vAqTNnP/zo4yZnBEYCZNe2K1/9yuGDBx77zZtvj0bjSGG7VodkqLUC33zm2L49SzYSW4bD0ZtvnRqOxikCcYupNvhbz3x999JCBn752huv/PinLB4/fHSxq14pdc8g//WN8/C7Ez8/sbiw6/nnXoaPOXb0kR29uaRejis328tvvQfnz/zxV/v2LElst3x95fnnXoEP4MAXn318LkeBv7/9Kavvwdrpd17bvbQg26ff+fNH//ykaXKESjUmQrXWtitHvnzo4IEv/fbkH0ajUUoJKNUpBJRaMceffnL30gJ3Go3GJ39/ajgcR4qQ2lJzCkEpFTj+9JO7lxZkm22KSWK7CsH/TFeck4DMhpVhxc5hQ69JYoPoiseTMj+TbW4RIbEhxGdUs0lik2A47npNjqBWJLEhA5OOziFh1rUTtkwmXVdqERHCbDHrcrCjz5a2sDomhKFtO7CN7VLroB8pwhBi5wBBBqox64rZzvbN0aTtutTkRok72ZTKdtVUg7AZjSddqbWWWi0pIvX7gSnGRkK2q7kxNiAMSkncZmNbEpg72eSkfmZLNaPWrJPEVK2OkITNlE0K+pmpDITAFVuqkmaahm1qtWSMuUWANBx3rlGrAINYN8hI2GZTIkLcjWwD1Qgk7qqatTHbSYwnXYSanGy2SMz3EQ+W2RDiPrrKpBDBllp89fpazmnXzh0SW2phpiEHDyTbQDVTAtuAJEBiUzVrYz6jKyWkiGAbwXwfiQeSbWB1WGzjUqsl9XKKpH6TuLeuKymFJD4X2Qa6iiAF9zLpmBS2SEzaEqGcwmZLP9MkHkZmQw7ub9TRViRuMStrw5Tz/OzA3FLNVJN4GJkNNpsk7qpJVCNuC+ZnB5JCYDaFaBIPSbaB1Zul2C7toN/M9DMPo4ME4vORbaArIHLwn94fX7lWhknBFiFpNGlTRJPCZrvi+kie399b4L4yG3Lirgo+sXru5fEFlECIdZPC6ogIMIj5Hk1iyoBx95OZJ15c+gb3lXmQABQoMdUWqmmNMiE2TaCr9IIUrDMPIXNfgoVoUM4KgZPASjUN0iiUTYaBnZukFEUa4iFpLjIPIttANRhwhAy1WiCpVl8rw1HtejmF2OSKxGjc5hQ5p66rFRtCU1jsyP159bivzIZRy1S/ESAoxUDbdaV6QDOr3mzKiFvE1Di1OUWKNHLXFQM5RUpKESGmDOKeZHtt7cbKjVGKyEm2BYi2LZO2G/QbbrOx3TR5cWEXAhskYfvqteu1VMSU1zE1nrT9fpMj2CQBtudmpwYZ+Nmrv37xFye/tnuGDaXUx/bteHTvzqbJly4v/+PCSkhINhfXJi88dfClH31/dmaAxIbl5ZXv/eCld/+1PN9Lexdm9y7O5RxNk4ajFjCE6Dp/cP7qjXE5d+Hmqz984bvf+XYGLl5armfe/RMLrJuDXWePDA890Qvx/oUxp1pYhesguHlmcVBLYZuulNdf/5CVS9CDeZ56dHF+Frxa1d1smW1mKMPlZc5chBY+vXLtWUC2z/3lb59cuJxSYkohZQO2sdAULnYBaq075ueOHT0SEdzWtu2p02fH44lCGGsqG8QmgV1bCUwpZf/jXzh8aL9s8//wbzgqsIpFq/DpAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }, \"\\n          \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=340&fm=webp 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=680&fm=webp 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=1360&fm=webp 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=340 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=680 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png?w=1360 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"boxShadow\": \"inset 0px 0px 0px 400px transparent\"\n    },\n    \"alt\": \"cadena de derivación\",\n    \"title\": \"\",\n    \"src\": \"https://images.ctfassets.net/mmjbm94f6iyd/1iKF4V2FwoErVYF1dZ1nbW/2df8d7f7473a67f9af95dca406a8f0e5/kushki-one-cadena-derivacion-claves.png\",\n    \"loading\": \"lazy\"\n  }), \"\\n        \"), \"\\n        \"), \"\\n      \")), mdx(\"p\", null, \"El \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"password\"), \" es el valor central de esta cadena. Cambia cada minuto porque depende de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"formattedDate\"), \", lo que hace que cualquier request firmado caduque autom\\xE1ticamente.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-1--genera-el-timestamp\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-1--genera-el-timestamp\",\n    \"aria-label\": \"paso 1  genera el timestamp 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  }))), \"Paso 1 \\u2014 Genera el timestamp\"), mdx(\"p\", null, \"Guarda este valor en una variable al inicio del flujo. Lo reutilizar\\xE1s en los pasos 3, 4 y 6.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const timestamp = Math.floor(Date.now() / 1000);\\n// Ejemplo: 1710000000\\n\")), mdx(Aside, {\n    type: \"tip\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Nunca llames \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Date.now()\"), \" m\\xE1s de una vez por request. Un \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"timestamp\"), \" diferente entre la firma, el cifrado y el header es la causa m\\xE1s silenciosa de errores \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"UNAUTHORIZED\"), \".\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-2--genera-formatteddate-utc\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-2--genera-formatteddate-utc\",\n    \"aria-label\": \"paso 2  genera formatteddate utc 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  }))), \"Paso 2 \\u2014 Genera \", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"formattedDate\"), \" (UTC)\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"function unixTimestampToFormattedDate(unixTimestamp) {\\n  const date = new Date(unixTimestamp * 1000);\\n  const pad = (n) => String(n).padStart(2, '0');\\n  return [\\n    date.getUTCFullYear(),\\n    pad(date.getUTCMonth() + 1),\\n    pad(date.getUTCDate()),\\n    pad(date.getUTCHours()),\\n    pad(date.getUTCMinutes())\\n  ].join(':');\\n}\\n// Ejemplo de salida: \\\"2026:03:24:21:55\\\"\\n\")), mdx(Aside, {\n    type: \"warning\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Calcula \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"formattedDate\"), \" siempre en \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"UTC\"), \", no en hora local. Un desfase de zona horaria es una de las causas m\\xE1s frecuentes de errores de firma.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-3--genera-el-password-temporal\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-3--genera-el-password-temporal\",\n    \"aria-label\": \"paso 3  genera el password temporal 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  }))), \"Paso 3 \\u2014 Genera el \", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"password\"), \" temporal\"), mdx(\"p\", null, \"Este valor cambia cada minuto porque depende de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"formattedDate\"), \".\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const token    = businessCode + terminalSerial;\\nconst base     = token + formattedDate;\\nconst key      = base.padEnd(32, '0');\\nconst password = MD5(key); // string hexadecimal de 32 caracteres\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-4--construye-datawithkey-solo-para-la-firma\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-4--construye-datawithkey-solo-para-la-firma\",\n    \"aria-label\": \"paso 4  construye datawithkey solo para la firma 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  }))), \"Paso 4 \\u2014 Construye \", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"dataWithKey\"), \" (solo para la firma)\"), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"dataWithKey\"), \" es una copia de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"requestData\"), \" con el campo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"key\"), \" a\\xF1adido. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"No se cifra ni se env\\xEDa.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const encodedKeyTimestamp = Base64(password + timestamp);\\n\\nconst dataWithKey = {\\n  ...requestData,\\n  key: encodedKeyTimestamp\\n};\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-5--genera-la-firma-authorization\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-5--genera-la-firma-authorization\",\n    \"aria-label\": \"paso 5  genera la firma authorization 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  }))), \"Paso 5 \\u2014 Genera la firma (\", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"Authorization\"), \")\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const json     = JSON.stringify(dataWithKey);\\nconst dataJson = Base64(json);\\nconst hash     = SHA512(dataJson); // hex string\\n\")), mdx(\"p\", null, \"Headers resultantes:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Authorization: Basic <hash>\\ntimestamp: <timestamp>\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-6--cifra-el-payload-aes-256-cbc\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-6--cifra-el-payload-aes-256-cbc\",\n    \"aria-label\": \"paso 6  cifra el payload aes 256 cbc 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  }))), \"Paso 6 \\u2014 Cifra el payload (\", mdx(\"inlineCode\", {\n    parentName: \"h2\"\n  }, \"AES-256-CBC\"), \")\"), mdx(\"p\", null, \"Solo se cifra \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"requestData\"), \" (sin \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"key\"), \").\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const aesKey = (timestamp + \\\"___\\\" + password).substring(0, 32);\\n\\nconst iv        = randomBytes(16);                                  // padding PKCS7\\nconst encrypted = AES_CBC(JSON.stringify(requestData), aesKey, iv);\\n\\nconst data = iv.hex + ':' + encrypted.hex;\\n// Ejemplo: \\\"a3f1...b2c4:9e0d...7f21\\\"\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"paso-7--arma-el-request-final\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#paso-7--arma-el-request-final\",\n    \"aria-label\": \"paso 7  arma el request final 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  }))), \"Paso 7 \\u2014 Arma el request final\"), mdx(\"p\", null, \"La estructura del request var\\xEDa seg\\xFAn el m\\xE9todo HTTP. En ambos casos los headers son iguales; lo que cambia es c\\xF3mo se entrega el campo \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"data\"), \".\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"maxWidth\": \"1200px\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\"\n    }\n  }, \"\\n        \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"40.88235294117647%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAQCAIAAADrtar6AAADq0lEQVQYGa3BTYuVZRzH8e//uq77PM2oMzI6CiFO0gORi8CgIDBaVtKqRdt6C72FCHoFQZtoGRVGELWzTZSWq0BMZTRRmXEezpkz5/G+r/+vc8YZrSh10edjkkaj8XA0DsGYEEL8CzNjSrh83+xMCAEoq6rfH4QQ+DsJA4x/cPdWq1mklIBPPv3qw89+ODbfFDow23hi8cB4XLW7g8MH95XZu91Bq1WX+82VTpWVXTfaw88/eu/0K6eAb7499+4HXzx7qBnM2CGRoh07Ou/ut1Y7ZSUz7nHXpbX+x++/9c7bryfg7nrn9o9rt5dmkGqHGq8F6/bHV+72To5yltY7g5lmLVf5wuVNSlGJO91ut8eOdqfbOb/y8/EDRBC4cGiEV4u01RtdvNpmLIxdlbi1tb6xBZikW3dW21s9m6JeK8wMBAYYU2LKmBK4+/zc/oNz+4HVtY27Gx3DgHqtiDGAELuMXWJC4O6zM63FQwdNUlnlbq+PmaQQwkyzUaQ4GufBqKzXUpndoNUoQjAmhJhQNAMqV7fXd3czQ2q1mvUilZX3BuN6LVXZJVqNIkZjhwQomiXAJSYkgxSDpKrKLokwHMtFDPgU90iEYDEa4NmRDJBijAZVlV0SYVjKHTPcs2TsMYgpJva4BBg2ITAjxVC5glkIJsnMmJCYMvaEENwFimFKkmFFilkys2Bgxh6xKzEhtCOG2B8MMeq1wsWwVIwmKVcCa9aYMuMvLFhMKYoYQ3Yfjst6rYjBmhEDDITYJQEKGGCSxpVn9xBCikFggIEQGFMC4wFJSCkGYG1988uzX5fjMhVJLqEUo5lxn8Qel8cQz7z5xuLhBZO00e5cubZcpFgrCh5F8pjSiaWleq0Art+4uXT8OdhmVwDnoS7/fvXpp04kYHn5+kunXuCxPf/i6XPfn63X5gALtnjy5RVb2Ncoe3Mb3oiUmTIz1wQju2307NI6Zo5Y2SLVQghAAsyYeuZMmJ310TJHC4rEOJOd+RaCMrM95OIqY2d4rV4Uxi4DG7X5444v1lubmRTIwkV9GxcT40yRMLI0oKARMSYS911f9rkao222EykyzrhodJBwGGYcooFh3CfYGgwZLvfWjmABgTHlYEwFCMaEBD22GxITCXAXE6PfWGGqzcMNBiOJeyT1b65Cj941Ho/kQAKeXFr66fwvtoM9Eptb/WY9Yoao1VMnjxpVkJRSMTPTYsfCwsKFX79zdzPjUSSZ2ZEjRwCTxH8QGA8IjP/Nn/1NGAF3lKjGAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }, \"\\n          \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=340&fm=webp 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=680&fm=webp 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=1360&fm=webp 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=340 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=680 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png?w=1360 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"boxShadow\": \"inset 0px 0px 0px 400px transparent\"\n    },\n    \"alt\": \"anatomía del request\",\n    \"title\": \"\",\n    \"src\": \"https://images.ctfassets.net/mmjbm94f6iyd/4iHedADDxF3QdMIcQMgzwq/7d121430c16c29513d8cc23e2380cbd8/kushki-one-anatomia-http-request.png\",\n    \"loading\": \"lazy\"\n  }), \"\\n        \"), \"\\n        \"), \"\\n      \")), mdx(\"h3\", {\n    \"id\": \"post--patch--put\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#post--patch--put\",\n    \"aria-label\": \"post  patch  put 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  }))), \"POST \\xB7 PATCH \\xB7 PUT\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Headers\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Authorization: Basic <hash>\\ntimestamp:     <timestamp>\\nContent-Type:  application/json\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Body\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"data\\\": \\\"<iv_hex>:<ciphertext_hex>\\\"\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"get\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#get\",\n    \"aria-label\": \"get 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  }))), \"GET\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Headers\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Authorization: Basic <hash>\\ntimestamp:     <timestamp>\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Query param\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"GET /endpoint?data=<iv_hex>:<ciphertext_hex>\\n\")), mdx(\"p\", null, \"Elimina los dem\\xE1s query params del request original antes de enviarlo.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"errores-de-autenticación\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#errores-de-autenticaci%C3%B3n\",\n    \"aria-label\": \"errores de autenticació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  }))), \"Errores de autenticaci\\xF3n\"), mdx(\"p\", null, \"Si la firma es inv\\xE1lida, recibir\\xE1s:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"type\\\": \\\"AUTH\\\",\\n  \\\"code\\\": \\\"UNAUTHORIZED\\\",\\n  \\\"message\\\": \\\"Authorization signature is invalid\\\"\\n}\\n\")), mdx(\"p\", null, \"Las tres causas m\\xE1s frecuentes tienen soluci\\xF3n directa. Usa este \\xE1rbol de diagn\\xF3stico para identificar cu\\xE1l aplica a tu caso:\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"maxWidth\": \"1200px\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\"\n    }\n  }, \"\\n        \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"61.76470588235294%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAZCAIAAADMuvsyAAADbklEQVRIx71Wu44cVRA9p+6je3Zmd/2QQMbCiRECIQICx0iEfAEBOQERP0HGhxDwGQiBRWAQAREBARI2aNe78+juW3UIxo+1jMzs2KKDq+6rqjp9T1WdupSEvZ77D/6utR4fLfZzz7sYfX/3px9+/KWUTJIACJKnZ6uc7GDWSQIISMI0tY8+vPPeu2+9GuDv7v78xedfAjc/+Pj92zeOT883Kdl8VrPh3m9/HS264z7f+/30z29/Bf74+puvXhnw27ff/PSzT+azWmvJyW5cn5MUYMBrV+dmBuCdW9fHO7eW6/HmG6/vEpM75tjdtzQ/ciM2Q0vJSraLASSllHYGHqfHX08CXDQhyjPEBDA5NhMIdAU1PfW7RHFpGHlyDmK52niEGQGa0T1qyV0tIltfrBTVbnIMTScPl+4hRYQ8YtZ3V48XNaEmJNu9qiUQEHya3N0lS+YCgCDQVUW4JaU8TRqDm6EN4wSIQC7Zwpr7ZvQoCcBsZ2CqNZ2vIbk3CJBASjIzkJYMZlwc4HGCt4eeHCGQNKIm1Ixsl6OaewvIZowm72vKtD3cbT9UAS6QybhnhMudOIT14MvN1IIkQVJh1EGX57NMQK0hxOVaknsAoBGCIIIAklEkjxZ5d9TzAZspTh4uW2uQSNAM0jh513XXrhx1WUUe49SPk6TTk7OQck4RESEzM+OVowXN5H4J4IOKYsSinxzNHYCZkZR7X9Nhj2IkO6XEcVLzgz4TpFlEkAx3ABGRUqJxz+LaCogjusxZ5vM6hxdEJZBS3q80SoKiNUVO9i+Cv4NqZkjYDM8K5rP1S6IWkNtWFjA2jY6pJTKFqKSaLy2aGeOEs9UwTOthBJGTbf+gtSbhcD5LJY81sxTVfmg6W25W64FGIz1CQkQcLQ4OD7q+sKTdgYFozccBbZIUKUEiaYA3n9Ywm1tXrdah6eHZapictFryOE4ka8nDOJ2drwjVwxnS7n3sruVaEc/NJG43UymYzy628tgwOloAQDHUjGKw/1Eyvcn7krKlV69cAh740Cg+JeLRW3Mnmcy2RD1ZBHTitdS91NUnFCtGWCKwXq/Xm2E7rc0sPDwipwRIUvOYz2ezvhfgEVckI/cHJpkCCifRlVySbS+ZICQpttMTECRZMsolJIHGl81xSIIukvyi1AjAtin+w/ofkQz6K/8HjqgAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }, \"\\n          \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=340&fm=webp 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=680&fm=webp 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=1360&fm=webp 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=340 340w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=680 680w\", \"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png?w=1360 1360w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"boxShadow\": \"inset 0px 0px 0px 400px transparent\"\n    },\n    \"alt\": \"diagnostico de errores\",\n    \"title\": \"\",\n    \"src\": \"https://images.ctfassets.net/mmjbm94f6iyd/4eSSO7Zj8SpMljHzftN9Xe/b00efcae9aec75e5873d89915f30a72f/kushki-one-diagnostico-errores.png\",\n    \"loading\": \"lazy\"\n  }), \"\\n        \"), \"\\n        \"), \"\\n      \")), mdx(Aside, {\n    type: \"tip\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Guarda el \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"timestamp\"), \" en una variable al inicio del flujo y reutil\\xEDzala en los tres pasos. Nunca llames \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Date.now()\"), \" m\\xE1s de una vez por request.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"script-de-referencia-para-postman\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#script-de-referencia-para-postman\",\n    \"aria-label\": \"script de referencia para postman 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  }))), \"Script de referencia para Postman\"), mdx(\"p\", null, \"Configura este Pre-request Script a nivel de colecci\\xF3n para que el flujo de firma y cifrado se ejecute autom\\xE1ticamente en cada request.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Variables requeridas:\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Variable\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Valor\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"businessCode\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Llave privada de tu comercio\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"terminalSerial\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Serial de tu terminal\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"encrypted_http_communication\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"true\"), \" para activar el flujo\")))), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"function getCurrentTimestamp() {\\n  return Math.floor(new Date().getTime() / 1000);\\n}\\n\\nfunction unixTimestampToFormattedDate(ts) {\\n  const d = new Date(ts * 1000);\\n  const p = (n) => String(n).padStart(2, '0');\\n  return `${d.getUTCFullYear()}:${p(d.getUTCMonth()+1)}:${p(d.getUTCDate())}:${p(d.getUTCHours())}:${p(d.getUTCMinutes())}`;\\n}\\n\\nfunction generateTokenPassword(token, ts) {\\n  const CryptoJS = require('crypto-js');\\n  const key = (token + unixTimestampToFormattedDate(ts)).padEnd(32, '0');\\n  return CryptoJS.MD5(key).toString();\\n}\\n\\nfunction encryptData(text, ts, terminalSerial) {\\n  const CryptoJS = require('crypto-js');\\n  const password = generateTokenPassword(pm.variables.get(\\\"businessCode\\\") + terminalSerial, ts);\\n  const key      = (ts + \\\"___\\\" + password).substring(0, 32);\\n  const iv       = CryptoJS.lib.WordArray.random(16);\\n  const enc      = CryptoJS.AES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {\\n    iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7\\n  });\\n  return iv.toString(CryptoJS.enc.Hex) + ':' + enc.ciphertext.toString(CryptoJS.enc.Hex);\\n}\\n\\nfunction buildAuthenticationHash(data, ts, terminalSerial) {\\n  const CryptoJS = require('crypto-js');\\n  const password = generateTokenPassword(pm.variables.get(\\\"businessCode\\\") + terminalSerial, ts);\\n  const encodedKeyTimestamp = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(password + ts));\\n  data.key = encodedKeyTimestamp;\\n  const dataJson = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(JSON.stringify(data)));\\n  return CryptoJS.SHA512(dataJson).toString(CryptoJS.enc.Hex);\\n}\\n\\nfunction executeScript() {\\n  const terminalSerial = pm.variables.get('terminalSerial');\\n  const businessCode   = pm.variables.get('businessCode');\\n  if (!terminalSerial) throw new Error(\\\"terminalSerial is not set\\\");\\n  if (!businessCode)   throw new Error(\\\"businessCode is not set\\\");\\n\\n  const ts = getCurrentTimestamp();\\n  let requestData = {};\\n\\n  try {\\n    if (pm.request.body?.mode === 'raw' && pm.request.body.raw)\\n      requestData = JSON.parse(pm.request.body.raw);\\n  } catch (e) {}\\n\\n  if (pm.request.method === 'GET')\\n    pm.request.url.query.all().forEach((p) => { if (p.key !== 'data') requestData[p.key] = p.value; });\\n\\n  delete requestData.key;\\n\\n  const hash          = buildAuthenticationHash(structuredClone(requestData), ts, terminalSerial);\\n  const encryptedData = encryptData(JSON.stringify(requestData), ts, terminalSerial);\\n\\n  pm.request.headers.add({ key: 'Authorization',  value: `Basic ${hash}` });\\n  pm.request.headers.add({ key: 'timestamp',      value: ts.toString() });\\n  pm.request.headers.upsert({ key: 'Content-Type', value: 'application/json' });\\n\\n  if (pm.request.method === 'GET') {\\n    pm.request.url.query.add({ key: 'data', value: encryptedData });\\n    pm.request.url.query.members.forEach((p) => { if (p.key !== 'data') p.disabled = true; });\\n  } else {\\n    pm.request.body.mode = 'raw';\\n    pm.request.body.raw  = JSON.stringify({ data: encryptedData });\\n  }\\n}\\n\\nconst raw = pm.variables.get('encrypted_http_communication');\\nconst httpEncrypted = raw === true || String(raw).toLowerCase() === 'true' || raw === 1 || raw === '1';\\nif (httpEncrypted) executeScript();\\n\")), mdx(\"hr\", null), mdx(NextStep, {\n    type: \"required\",\n    side: \"right\",\n    link: \"/kushki-one/realiza-cobros\",\n    title: \"Realiza cobros con Kushki One\",\n    mdxType: \"NextStep\"\n  }, mdx(\"p\", null, \"  Con la autenticaci\\xF3n lista, revisa el flujo completo de cobro semi-integrado.\")), mdx(NextStep, {\n    type: \"recommended\",\n    side: \"left\",\n    link: \"/kushki-one/codigos-de-error\",\n    title: \"C\\xF3digos de error\",\n    mdxType: \"NextStep\"\n  }, mdx(\"p\", null, \"  Consulta el cat\\xE1logo completo de errores, incluyendo los de autenticaci\\xF3n fallida.\")));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Este mecanismo aplica  exclusivamente al modo semi-integrado . Si tu integración usa el SDK nativo o la topología de red local sin cifrado…","timeToRead":2,"tableOfContents":{"items":[{"url":"#variables-requeridas","title":"Variables requeridas"},{"url":"#flujo-general","title":"Flujo general"},{"url":"#cadena-de-derivación-de-claves","title":"Cadena de derivación de claves"},{"url":"#paso-1--genera-el-timestamp","title":"Paso 1 — Genera el timestamp"},{"url":"#paso-2--genera-formatteddate-utc","title":"Paso 2 — Genera formattedDate (UTC)"},{"url":"#paso-3--genera-el-password-temporal","title":"Paso 3 — Genera el password temporal"},{"url":"#paso-4--construye-datawithkey-solo-para-la-firma","title":"Paso 4 — Construye dataWithKey (solo para la firma)"},{"url":"#paso-5--genera-la-firma-authorization","title":"Paso 5 — Genera la firma (Authorization)"},{"url":"#paso-6--cifra-el-payload-aes-256-cbc","title":"Paso 6 — Cifra el payload (AES-256-CBC)"},{"url":"#paso-7--arma-el-request-final","title":"Paso 7 — Arma el request final","items":[{"url":"#post--patch--put","title":"POST · PATCH · PUT"},{"url":"#get","title":"GET"}]},{"url":"#errores-de-autenticación","title":"Errores de autenticación"},{"url":"#script-de-referencia-para-postman","title":"Script de referencia para Postman"}]}}},"updatedAt":"April 24, 2026","tabTitle":null}]}},"pageContext":{"country":"cl","id":"597e2710-281c-5eeb-aeb2-82a54d3f7826","locale":"en","localeDateFormat":"MMMM DD, YYYY"}},"staticQueryHashes":["1632712422","2408418099","63159454"]}