Personalizaciones visuales del Card Payment
El formulario de tarjeta renderizado por el Card Payment Brick fue construido de forma modular para ser renderizado en entorno web. La base sigue las mejores prácticas de UX para entregar al comprador la mejor experiencia sin que necesites preocuparte por detalles de diseño.
Cuando quieras alinear el formulario a la identidad de tu sitio, es posible sustituir los textos mostrados y ocultar elementos de la interfaz a través del objeto customization.visual, definido al renderizar el Card Payment.
Los textos mostrados en el formulario pueden sustituirse en customization.visual.texts. Todos son del tipo string y, según el elemento, aceptan los atributos label (rótulo del campo) y placeholder (texto mostrado mientras el campo está vacío). El comportamiento será el siguiente: al enviar un texto vacío, el formulario mostrará el texto por defecto del layout y, al enviar un texto personalizado, este sustituirá al predeterminado.
const settings = {
customization: {
visual: {
texts: {
formTitle: "",
emailSectionTitle: "",
installmentsSectionTitle: "",
cardholderName: {
label: "",
placeholder: "",
},
email: {
label: "",
placeholder: "",
},
cardholderIdentification: {
label: "",
},
cardNumber: {
label: "",
},
expirationDate: {
label: "",
},
securityCode: {
label: "",
},
selectInstallments: "",
selectIssuerBank: "",
formSubmit: "",
},
},
},
};
const customization = {
visual: {
texts: {
formTitle: "",
emailSectionTitle: "",
installmentsSectionTitle: "",
cardholderName: {
label: "",
placeholder: "",
},
email: {
label: "",
placeholder: "",
},
cardholderIdentification: {
label: "",
},
cardNumber: {
label: "",
},
expirationDate: {
label: "",
},
securityCode: {
label: "",
},
selectInstallments: "",
selectIssuerBank: "",
formSubmit: "",
}
}
};
| Propiedad | Atributos aceptados | Descripción |
formTitle | — | Título del formulario. |
emailSectionTitle | — | Título de la sección de e-mail. |
installmentsSectionTitle | — | Título de la sección de cuotas. |
cardNumber | label | Campo de número de la tarjeta. |
expirationDate | label | Campo de fecha de vencimiento. |
securityCode | label | Campo de código de seguridad. |
cardholderName | label, placeholder | Campo de nombre del titular. |
cardholderIdentification | label | Campo de documento del titular. |
email | label, placeholder | Campo de e-mail. |
selectInstallments | — | Selector de cuotas. |
selectIssuerBank | — | Selector de banco emisor. |
formSubmit | — | Botón de envío del formulario. |
La línea de título del formulario y las marcas aceptadas pueden ocultarse en conjunto, lo que resulta útil cuando tu página ya presenta esa información fuera del formulario.
const settings = {
...,
customization: {
visual: {
hideFormTitle: true
}
}
};
const customization = {
visual: {
hideFormTitle: true
}
};
| Propiedad | Tipo | Descripción |
customization.visual.hideFormTitle | Boolean | Cuando es true, oculta la línea de título y las marcas aceptadas. |
Si prefieres usar un botón propio para enviar el formulario, oculta el botón nativo y pasa a obtener los datos de la tarjeta a través del método getFormData.
const settings = {
...,
callbacks: {
onReady: () => {
// callback llamado cuando el formulario está listo
},
onError: (error) => {
// callback llamado para todos los casos de error
},
},
customization: {
visual: {
hidePaymentButton: true
}
}
};
const customization = {
visual: {
hidePaymentButton: true
}
};
| Propiedad | Tipo | Descripción |
customization.visual.hidePaymentButton | Boolean | Cuando es true, el botón de envío del formulario deja de mostrarse y pasa a ser necesario utilizar el método getFormData para obtener los datos completados. |
Como el botón predeterminado fue ocultado, es necesario disponibilizar un sustituto. Para ello, agrega tu botón a la página:
html<button type="button" onclick="createPayment();">Custom Payment Button</button>
Luego, implementa la función que obtiene los datos del formulario y los envía a tu backend:
Javascriptfunction createPayment(){ window.cardPaymentBrickController.getFormData() .then((formData) => { const submitData = { type: "online", total_amount: String(formData.transaction_amount), // debe ser un string con formato 00.00 external_reference: "ext_ref_1234", // identificador del origen de la transacción. processing_mode: "automatic", transactions: { payments: [ { amount: String(formData.transaction_amount), // debe ser un string con formato 00.00 payment_method: { id: formData.payment_method_id, type: "credit_card", // debe ser "credit_card" o "debit_card" token: formData.token, installments: formData.installments, }, }, ], }, payer: { email: formData.payer.email, identification: formData.payer.identification, }, }; fetch("/process_order", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(submitData), }) .then((response) => response.json()) .then((response) => { // recibir el resultado del pago }) .catch((error) => { // gestionar la respuesta de error al intentar crear la order }); }) .catch((error) => { // gestión de errores al llamar getFormData() }); };