En la guía de cargo con token vimos como realizar un cargo creando primero un token (usando Openpay.js) y luego enviarlo dentro de la petición de cargo.
Esto es muy útil 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últiples 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.
Los pasos para realizar esto son:
Primero crearemos el formulario para pedir la información de nuestro cliente (nombre y correo electrónico) y los datos de su tarjeta (número, fecha de expiración, etc).
<form action="/save_customer_card"method="POST"id="customer-form"><inputtype="hidden"name="token_id"id="token_id"/><fieldset><legend>Datos del cliente</legend><p><label>Nombre</label><input type="text"size="20"autocomplete="on"name="client_name"/></p><p><label>Correo Electrónico</label><inputtype="text"size="20" autocomplete="on"name="cliente_email"/></p></fieldset><fieldset><legend>Datos de la tarjeta</legend><p><label>Nombre</label><inputtype="text"size="20" autocomplete="off"data-openpay-card="holder_name"/></p><p><label>Número</label><input type="text"size="20"autocomplete="off"data-openpay-card="card_number"/></p><p><label>CVV2</label><input type="text"size="4"autocomplete="off"data-openpay-card="cvv2"/></p><p><label>Fecha de expiración (MM/YY)</label><input type="text"size="2"data-openpay-card="expiration_month"/> /
<input type="text"size="2"data-openpay-card="expiration_year"/></p></fieldset><input type="submit"id="save-button"value="Pagar"/></form>
Es muy importante que los campos en donde se va a introducir la información de la tarjeta tenga el atributo data_openpay_card ya que esto permitirá a la librería de Openpay encontrar la información.
Observa que para los datos de la tarjeta no se está ocupando el atributo name esto para que al momento de enviar el formulario a tu servidor los datos de la tarjeta no viajen en la petición ya que sólo los vamos a ocupar para crear el token.
Crear un token
Una vez que tenemos nuestro formulario creado, vamos a programar que en el botón de enviar se cree un token utilizando la librería Openpay.js.
Primero agregamos al head el archivo de Openpay.js y el archivo de JQuery:
Y por último atrapamos el evento de clic del botón Save para que en lugar de que haga el submit del formulario realice la función tokenize de la tarjeta:
Como puedes ver estamos pasando como parámetro el nombre del formulario creado, esto para que la librería obtengan los datos de la tarjeta y haga la petición a Openpay.
Si todo sale bien se llamará el método success_callback en el cual asignaremos el valor id del token creado al campo token_id y enviaremos los datos al servidor:
Nota:Observa que para este ejemplo, creamos el cliente usando la bandera de de requires_account = false lo cual significa que la cuenta no manejará saldo propio.Para mas información acerca de los tipos de clientes consulta la guía de clientes
Guardar la tarjeta al cliente usando el token
Ahora sólo resta usar el token_id que viene en la petición para guardar y asignar la tarjeta al cliente.
El objeto card contiene un id, el cual debes guardar en tu servidor ya con el podrás hacer cargos a esa tarjeta después. Puedes consultar la referencia de Crear Tarjeta con Token para mas información.
Notas: Puedes simular diferentes resultados usando las tarjetas de Pruebas