{"id":3382,"date":"2021-03-08T20:56:27","date_gmt":"2021-03-08T20:56:27","guid":{"rendered":"https:\/\/documents.openpay.mx\/?p=3382"},"modified":"2022-05-23T16:32:06","modified_gmt":"2022-05-23T16:32:06","slug":"save-card","status":"publish","type":"post","link":"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html","title":{"rendered":"OneClick"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3382\" class=\"elementor elementor-3382\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8e69208 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8e69208\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-abc68fc\" data-id=\"abc68fc\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bd34b15 elementor-widget elementor-widget-text-editor\" data-id=\"bd34b15\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\tThroughout the <a href=\"https:\/\/documents.openpay.mx\/docs\/card-charge.html\">tutorial for card charge<\/a> we showed how to do a charge by first creating a token (using <a href=\"https:\/\/documents.openpay.mx\/docs\/openpayjs.html\">Openpay.js<\/a>) y luego enviarlo dentro de la petici\u00f3n de cargo.\n\nEsto es muy \u00fatil para cuando un cliente llega a nuestro sitio y solo deseamos realizarle el cargo en ese momento, pero cuando deseamos mantener los datos de la tarjeta, para que el cliente la pueda ocupar en m\u00faltiples ocasiones sin necesidad de volverla a introducir los datos, lo tenemos que hacer es guardar la tarjeta para posteriormente poder utilizarla sin necesidad de volverla a pedir al cliente.\n\nLos pasos para realizar esto son:\n<ol>\n \t<li>Create a form to request the information<\/li>\n \t<li>Create a token<\/li>\n \t<li>Create a customer<\/li>\n \t<li>Create a customer card using the token<\/li>\n \t<li><a href=\"https:\/\/documents.openpay.mx\/docs\/card-charge.html\">Create a charge<\/a> using the token<\/li>\n<\/ol>\n<h2 id=\"tocAnchor-1-1-1\">Create a form to request the information<\/h2>\nFirst create the form to request information from your customer (name and email) and card details (number, expiration date, etc).\n<figure class=\"highlight\">\n<pre><code class=\"language-html\" data-lang=\"html\"><span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">form <\/span><span class=\"na\" style=\"color: #008080;\">action<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"\/save_customer_card\"<\/span> <span class=\"na\" style=\"color: #008080;\">method<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"POST\"<\/span> <span class=\"na\" style=\"color: #008080;\">id<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"customer-form\"<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"hidden\"<\/span> <span class=\"na\" style=\"color: #008080;\">name<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"token_id\"<\/span> <span class=\"na\" style=\"color: #008080;\">id<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"token_id\"<\/span><span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">fieldset<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">legend<\/span><span class=\"p\">&gt;<\/span>Datos del cliente<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">legend<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>Name<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"20\"<\/span> <span class=\"na\" style=\"color: #008080;\">autocomplete<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"on\"<\/span> <span class=\"na\" style=\"color: #008080;\">name<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"client_name\"<\/span><span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>Correo Electr<span class=\"ni\" style=\"color: #e41182;\">or<\/span>nico<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"20\" <\/span><span class=\"na\" style=\"color: #008080;\">autocomplete<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"on\"<\/span> <span class=\"na\" style=\"color: #008080;\">name<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"cliente_email\"<\/span><span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">fieldset<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">fieldset<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">legend<\/span><span class=\"p\">&gt;<\/span>Datos de la tarjeta<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">legend<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>Name<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"20\" <\/span><span class=\"na\" style=\"color: #008080;\">autocomplete<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"off\"<\/span>\n            <span class=\"na\" style=\"color: #008080;\">data-openpay-card<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"holder_name\"<\/span> <span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>N<span class=\"ni\" style=\"color: #e41182;\">\u00fa<\/span>mero<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"20\"<\/span> <span class=\"na\" style=\"color: #008080;\">autocomplete<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"off\"<\/span>\n            <span class=\"na\" style=\"color: #008080;\">data-openpay-card<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"card_number\"<\/span> <span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>CVV2<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"4\"<\/span> <span class=\"na\" style=\"color: #008080;\">autocomplete<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"off\"<\/span>\n            <span class=\"na\" style=\"color: #008080;\">data-openpay-card<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"cvv2\"<\/span> <span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>Fecha de expiraci<span class=\"ni\" style=\"color: #e41182;\">or<\/span>n (MM\/YY)<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">label<\/span><span class=\"p\">&gt;<\/span>\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"2\"<\/span> <span class=\"na\" style=\"color: #008080;\">data-openpay-card<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"expiration_month\"<\/span> <span class=\"p\">\/&gt;<\/span> \/\n          <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\"<\/span> <span class=\"na\" style=\"color: #008080;\">size<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"2\"<\/span> <span class=\"na\" style=\"color: #008080;\">data-openpay-card<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"expiration_year\"<\/span> <span class=\"p\">\/&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">p<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">fieldset<\/span><span class=\"p\">&gt;<\/span>\n        <span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">input <\/span><span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"submit\"<\/span> <span class=\"na\" style=\"color: #008080;\">id<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"save-button\"<\/span> <span class=\"na\" style=\"color: #008080;\">value<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"Pagar\"<\/span><span class=\"p\">\/&gt;<\/span>\n<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">form<\/span><span class=\"p\">&gt;<\/span><\/code><\/pre>\n<\/figure>\nIt\u2019s very important that the fields used to enter the card information have the <code>data_openpay_card<\/code> \u200bya que esto permitir\u00e1 a la librer\u00eda de Openpay encontrar la informaci\u00f3n.\n\nObserva que para los datos de la tarjeta no se est\u00e1 ocupando el atributo <code>name<\/code> isn\u2019t being used to store the card information , this is because when you submit the form to your server the card info doesn\u2019t travel in the request because it\u2019s only used to create the token.\n<h2 id=\"tocAnchor-1-1-2\">Create a token<\/h2>\nOnce we created our form, we will set up the send button to create a token using the <a href=\"https:\/\/documents.openpay.mx\/docs\/openpayjs.html\">Openpay.js<\/a>.\n\nPrimero agregamos al <code>head<\/code> and <a href=\"https:\/\/documents.openpay.mx\/docs\/openpayjs.html\">Openpay.js<\/a> files to the head:\n<figure class=\"highlight\">\n<pre><code class=\"language-html\" data-lang=\"html\"><span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\/javascript\"<\/span> <span class=\"na\" style=\"color: #008080;\">src<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.11.0\/jquery.min.js\"<\/span><span class=\"p\">&gt;&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\/javascript\"<\/span> <span class=\"na\" style=\"color: #008080;\">src<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"https:\/\/js.openpay.mx\/openpay.v1.min.js\"<\/span><span class=\"p\">&gt;&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span><span class=\"p\">&gt;<\/span><\/code><\/pre>\n<\/figure>\nNow let\u2019s set the <code>merchant-id<\/code> and the<code>public-key<\/code>):\n<figure class=\"highlight\">\n<pre><code class=\"language-html\" data-lang=\"html\"><span class=\"p\">&lt;<\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span> <span class=\"na\" style=\"color: #008080;\">type<\/span><span class=\"o\">=<\/span><span class=\"s\" style=\"color: #e41182;\">\"text\/javascript\"<\/span><span class=\"p\">&gt;<\/span>\n     <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"nb\" style=\"color: #008080;\">document<\/span><span class=\"p\">).<\/span><span class=\"nx\">ready<\/span><span class=\"p\">(<\/span><span class=\"kd\">function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nx\">OpenPay<\/span><span class=\"p\">.<\/span><span class=\"nx\">setId<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'mzdtln0bmtms6o3kck8f'<\/span><span class=\"p\">);<\/span>\n            <span class=\"nx\">OpenPay<\/span><span class=\"p\">.<\/span><span class=\"nx\">setApiKey<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'pk_f0660ad5a39f4912872e24a7a660370c'<\/span><span class=\"p\">);<\/span>\n            <span class=\"nx\">OpenPay<\/span><span class=\"p\">.<\/span><span class=\"nx\">setSandboxMode<\/span><span class=\"p\">(<\/span><span class=\"kc\">true<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">});<\/span>\n<span class=\"p\">&lt;<span style=\"color: #000080;\">\/<\/span><\/span><span class=\"nt\" style=\"color: #000080;\">script<\/span><span class=\"p\">&gt;<\/span><\/code><\/pre>\n<\/figure>\nAnd finally let\u2019s catch the click event of the <strong>Save<\/strong> button, so instead of submitting the form it creates the token function of the card.\n<figure class=\"highlight\">\n<pre><code class=\"language-javascript\" data-lang=\"javascript\"><span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'#save-button'<\/span><span class=\"p\">).<\/span><span class=\"nx\">on<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'click'<\/span><span class=\"p\">,<\/span> <strong><span class=\"kd\">function<\/span><\/strong><span class=\"p\">(<\/span><span class=\"nx\">event<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n       <span class=\"nx\">event<\/span><span class=\"p\">.<\/span><span class=\"nx\">preventDefault<\/span><span class=\"p\">();<\/span>\n       <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s2\" style=\"color: #e41182;\">\"#save-button\"<\/span><span class=\"p\">).<\/span><span class=\"nx\">prop<\/span><span class=\"p\">(<\/span> <span class=\"s2\" style=\"color: #e41182;\">\"disabled\"<\/span><span class=\"p\">,<\/span> <strong><span class=\"kc\">true<\/span><\/strong><span class=\"p\">);<\/span>\n       <span class=\"nx\">OpenPay<\/span><span class=\"p\">.<\/span><span class=\"nx\">token<\/span><span class=\"p\">.<\/span><span class=\"nx\">extractFormAndCreate<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'customer-form'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">success_callbak<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error_callbak<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span><\/code><\/pre>\n<\/figure>\nComo puedes ver estamos pasando como par\u00e1metro el nombre del formulario creado, esto para que la librer\u00eda obtengan los datos de la tarjeta y haga la petici\u00f3n a Openpay.\n\nSi todo sale bien se llamar\u00e1 el m\u00e9todo <code>success_callback<\/code> will be called to set the token id value <code>token_id<\/code> and the data will be sent to the server:\n<figure class=\"highlight\">\n<pre><code class=\"language-javascript\" data-lang=\"javascript\"><strong><span class=\"kd\">var<\/span> <\/strong><span class=\"nx\">success_callbak<\/span> <span class=\"o\">=<\/span> <strong><span class=\"kd\">function<\/span><\/strong><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n              <span class=\"kd\">var<\/span> <span class=\"nx\">token_id<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">id<\/span><span class=\"p\">;<\/span>\n              <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'#token_id'<\/span><span class=\"p\">).<\/span><span class=\"nx\">val<\/span><span class=\"p\">(<\/span><span class=\"nx\">token_id<\/span><span class=\"p\">);<\/span>\n              <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'#customer-form'<\/span><span class=\"p\">).<\/span><span class=\"nx\">submit<\/span><span class=\"p\">();<\/span>\n<span class=\"p\">};<\/span><\/code><\/pre>\n<\/figure>\nIf there is a problem in the request, an alert will show the error:\n<figure class=\"highlight\">\n<pre><code class=\"language-javascript\" data-lang=\"javascript\"><strong><span class=\"kd\">var<\/span> <\/strong><span class=\"nx\">error_callbak<\/span> <span class=\"o\">=<\/span> <strong><span class=\"kd\">function<\/span><\/strong><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n     <strong><span class=\"kd\">var<\/span> <\/strong><span class=\"nx\">desc<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <strong><span class=\"o\">!=<\/span> <span class=\"kc\">undefined<\/span> <span class=\"o\">?<\/span><\/strong> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">.<\/span><span class=\"nx\">description<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">message<\/span><span class=\"p\">;<\/span>\n     <span class=\"nx\">alert<\/span><span class=\"p\">(<\/span><span class=\"s2\" style=\"color: #e41182;\">\"ERROR [\"<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">status<\/span> <span class=\"o\">+<\/span> <span class=\"s2\" style=\"color: #e41182;\">\"] \"<\/span> <span class=\"o\">+<\/span> <span class=\"nx\">desc<\/span><span class=\"p\">);<\/span>\n     <span class=\"nx\">$<\/span><span class=\"p\">(<\/span><span class=\"s2\" style=\"color: #e41182;\">\"#save-button\"<\/span><span class=\"p\">).<\/span><span class=\"nx\">prop<\/span><span class=\"p\">(<\/span><span class=\"s2\" style=\"color: #e41182;\">\"disabled\"<\/span><span class=\"p\">,<\/span> <strong><span class=\"kc\">false<\/span><\/strong><span class=\"p\">);<\/span>\n<span class=\"p\">};<\/span><\/code><\/pre>\n<\/figure>\n<p style=\"text-align: center;\"><span style=\"font-size: 10pt;\"><em>For further reference on the use of the library, see the <\/em><\/span><a href=\"https:\/\/documents.openpay.mx\/docs\/openpayjs.html\"><span style=\"font-size: 10pt;\"><em>Openpay.js<\/em><\/span><\/a><\/p>\n\n<h2 id=\"tocAnchor-1-1-3\">Create a customer<\/h2>\nWhen doing the implementation of the <strong>\/save_customer_card<\/strong> implementation you have to do the following in order to create the customer:\n<div class=\"php-code\">\n<figure class=\"highlight\">\n<pre><code class=\"language-php\" data-lang=\"php\">\n<span class=\"nv\" style=\"color: #008080;\">$openpay<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">Openpay<\/span><span class=\"o\">::<\/span><span class=\"na\" style=\"color: #008080;\">getInstance<\/span><span class=\"p\">(<\/span><span class=\"s1\" style=\"color: #e41182;\">'mzdtln0bmtms6o3kck8f'<\/span><span class=\"p\">,<\/span> <span class=\"s1\" style=\"color: #e41182;\">'sk_e568c42a6c384b7ab02cd47d2e407cab'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"nv\" style=\"color: #008080;\">$customerData<\/span> <span class=\"o\">=<\/span> <strong><span class=\"k\">array<\/span><\/strong><span class=\"p\">(<\/span>\n    <span class=\"s1\" style=\"color: #e41182;\">'name'<\/span> <span class=\"o\">=><\/span> <span class=\"nv\" style=\"color: #008080;\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"s2\" style=\"color: #e41182;\">\"client_name\"<\/span><span class=\"p\">],<\/span>\n    <span class=\"s1\" style=\"color: #e41182;\">'email'<\/span> <span class=\"o\">=><\/span> <span class=\"nv\" style=\"color: #008080;\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"s2\" style=\"color: #e41182;\">\"cliente_email\"<\/span><span class=\"p\">],<\/span>\n    <span class=\"s1\" style=\"color: #e41182;\">'requires_account'<\/span> <span class=\"o\">=><\/span> <strong><span class=\"k\">false<\/span><\/strong><span class=\"p\">);<\/span>\n\n<span class=\"nv\" style=\"color: #008080;\">$customer<\/span> <span class=\"o\">=<\/span> <span class=\"nv\" style=\"color: #008080;\">$openpay<\/span><span class=\"o\">-><\/span><span class=\"na\" style=\"color: #008080;\">customers<\/span><span class=\"o\">-><\/span><span class=\"na\" style=\"color: #008080;\">add<\/span><span class=\"p\">(<\/span><span class=\"nv\" style=\"color: #008080;\">$customerData<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<\/figure>\n<\/div>\n<span style=\"font-size: 10pt;\"><em><span class=\"notas\"><strong>Note:<\/strong> <\/span>For this example, we create the customer using the <strong>requires_account = false\u200b<\/strong> flag which means that the account balance will not handle itself.<\/em><\/span>\n\n<span style=\"font-size: 10pt;\"><em>For more information about the types of clients see the <\/em><\/span><a href=\"https:\/\/documents.openpay.mx\/docs\/customers.html\"><span style=\"font-size: 10pt;\"><em>customers tutorial<\/em><\/span><\/a>\n<h2 id=\"tocAnchor-1-1-4\">Create a customer card using the token<\/h2>\nNow this only requires to use the <code>token_id<\/code> that comes with the request to save and assign the card to the customer.\n<div class=\"php-code\">\n<figure class=\"highlight\">\n<pre><code class=\"language-php\" data-lang=\"php\">\n<span class=\"nv\" style=\"color: #008080;\">$cardData<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span>\n  <span class=\"s1\" style=\"color: #e41182;\">'token_id'<\/span> <span class=\"o\">=><\/span> <span class=\"nv\" style=\"color: #008080;\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"s2\" style=\"color: #e41182;\">\"token_id\"<\/span><span class=\"p\">]<\/span>\n  <span class=\"s1\" style=\"color: #e41182;\">'device_session_id'<\/span> <span class=\"o\">=><\/span> <span class=\"nv\" style=\"color: #008080;\">$_POST<\/span><span class=\"p\">[<\/span><span class=\"s2\" style=\"color: #e41182;\">\"device_session_id\"<\/span><span class=\"p\">]<\/span>\n  <span class=\"p\">);<\/span>\n\n<span class=\"nv\" style=\"color: #008080;\">$card<\/span> <span class=\"o\">=<\/span> <span class=\"nv\" style=\"color: #008080;\">$customer<\/span><span class=\"o\">-><\/span><span class=\"na\" style=\"color: #008080;\">cards<\/span><span class=\"o\">-><\/span><span class=\"na\" style=\"color: #008080;\">add<\/span><span class=\"p\">(<\/span><span class=\"nv\" style=\"color: #008080;\">$cardData<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<\/figure>\n<\/div>\nEl objeto card contiene un id, el cual debes guardar en tu servidor ya con el podr\u00e1s hacer cargos a esa tarjeta despu\u00e9s. Puedes consultar la referencia de <em>Create Card with a Token<\/em> para mas informaci\u00f3n. \u200b\n\n<span style=\"font-size: 10pt;\"><em><span class=\"notas\"><strong>Notes: <\/strong><\/span>You can simulate different results using the cards <\/em><\/span><a href=\"https:\/\/documents.openpay.mx\/docs\/testing.html\"><span style=\"font-size: 10pt;\"><em>Testing<\/em><\/span><\/a>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>En la gu\u00eda de cargo con token vimos como realizar un cargo creando primero un token (usando Openpay.js) y luego enviarlo dentro de la petici\u00f3n de cargo. Esto es muy \u00fatil para cuando un cliente llega a nuestro sitio y solo deseamos realizarle el cargo en ese momento, pero cuando deseamos mantener los datos de&hellip;&nbsp;<a href=\"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">OneClick<\/span><\/a><\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[133],"tags":[],"class_list":["post-3382","post","type-post","status-publish","format-standard","hentry","category-docs"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OneClick | Openpay<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OneClick | Openpay\" \/>\n<meta property=\"og:description\" content=\"En la gu\u00eda de cargo con token vimos como realizar un cargo creando primero un token (usando Openpay.js) y luego enviarlo dentro de la petici\u00f3n de cargo. Esto es muy \u00fatil para cuando un cliente llega a nuestro sitio y solo deseamos realizarle el cargo en ese momento, pero cuando deseamos mantener los datos de&hellip;&nbsp;Read More &raquo;OneClick\" \/>\n<meta property=\"og:url\" content=\"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html\/\" \/>\n<meta property=\"og:site_name\" content=\"Openpay\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-08T20:56:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-23T16:32:06+00:00\" \/>\n<meta name=\"author\" content=\"user\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"user\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#article\",\"isPartOf\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html\"},\"author\":{\"name\":\"user\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/person\/4c704d548de0c4eed7ac90530bf655a7\"},\"headline\":\"OneClick\",\"datePublished\":\"2021-03-08T20:56:27+00:00\",\"dateModified\":\"2022-05-23T16:32:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html\"},\"wordCount\":572,\"publisher\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#organization\"},\"articleSection\":[\"Documentaci\u00f3n\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html\",\"url\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html\",\"name\":\"OneClick | Openpay\",\"isPartOf\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#website\"},\"datePublished\":\"2021-03-08T20:56:27+00:00\",\"dateModified\":\"2022-05-23T16:32:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\/\/documents-mx-dev.opdevhm.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OneClick\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#website\",\"url\":\"https:\/\/documents-mx-dev.opdevhm.com\/\",\"name\":\"Openpay\",\"description\":\"Openpay a BBVA Company\",\"publisher\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/documents-mx-dev.opdevhm.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#organization\",\"name\":\"Openpay Soporte\",\"url\":\"https:\/\/documents-mx-dev.opdevhm.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/documents-mx-dev.opdevhm.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"contentUrl\":\"https:\/\/documents-mx-dev.opdevhm.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"width\":290,\"height\":90,\"caption\":\"Openpay Soporte\"},\"image\":{\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/person\/4c704d548de0c4eed7ac90530bf655a7\",\"name\":\"user\",\"url\":\"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/author\/berni\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OneClick | Openpay","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html\/","og_locale":"en_US","og_type":"article","og_title":"OneClick | Openpay","og_description":"En la gu\u00eda de cargo con token vimos como realizar un cargo creando primero un token (usando Openpay.js) y luego enviarlo dentro de la petici\u00f3n de cargo. Esto es muy \u00fatil para cuando un cliente llega a nuestro sitio y solo deseamos realizarle el cargo en ese momento, pero cuando deseamos mantener los datos de&hellip;&nbsp;Read More &raquo;OneClick","og_url":"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/save-card.html\/","og_site_name":"Openpay","article_published_time":"2021-03-08T20:56:27+00:00","article_modified_time":"2022-05-23T16:32:06+00:00","author":"user","twitter_card":"summary_large_image","twitter_misc":{"Written by":"user","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#article","isPartOf":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html"},"author":{"name":"user","@id":"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/person\/4c704d548de0c4eed7ac90530bf655a7"},"headline":"OneClick","datePublished":"2021-03-08T20:56:27+00:00","dateModified":"2022-05-23T16:32:06+00:00","mainEntityOfPage":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html"},"wordCount":572,"publisher":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/#organization"},"articleSection":["Documentaci\u00f3n"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html","url":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html","name":"OneClick | Openpay","isPartOf":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/#website"},"datePublished":"2021-03-08T20:56:27+00:00","dateModified":"2022-05-23T16:32:06+00:00","breadcrumb":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/documents-mx-dev.opdevhm.com\/docs\/save-card.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inicio","item":"https:\/\/documents-mx-dev.opdevhm.com\/"},{"@type":"ListItem","position":2,"name":"OneClick"}]},{"@type":"WebSite","@id":"https:\/\/documents-mx-dev.opdevhm.com\/#website","url":"https:\/\/documents-mx-dev.opdevhm.com\/","name":"Openpay","description":"Openpay a BBVA Company","publisher":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/documents-mx-dev.opdevhm.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/documents-mx-dev.opdevhm.com\/#organization","name":"Openpay Soporte","url":"https:\/\/documents-mx-dev.opdevhm.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/logo\/image\/","url":"https:\/\/documents-mx-dev.opdevhm.com\/wp-content\/uploads\/2020\/05\/logo.png","contentUrl":"https:\/\/documents-mx-dev.opdevhm.com\/wp-content\/uploads\/2020\/05\/logo.png","width":290,"height":90,"caption":"Openpay Soporte"},"image":{"@id":"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/documents-mx-dev.opdevhm.com\/#\/schema\/person\/4c704d548de0c4eed7ac90530bf655a7","name":"user","url":"https:\/\/documents-mx-dev.opdevhm.com\/en\/docs\/author\/berni"}]}},"_links":{"self":[{"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/posts\/3382","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/comments?post=3382"}],"version-history":[{"count":0,"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/posts\/3382\/revisions"}],"wp:attachment":[{"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/media?parent=3382"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/categories?post=3382"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/documents-mx-dev.opdevhm.com\/en\/wp-json\/wp\/v2\/tags?post=3382"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}