oh! Gift Card - VTEX Docs
Verifica tu tienda VTEX
Verifica tu tienda VTEX
Verifica tu tienda VTEX ⚙️
💡 Ten en cuenta que se ha creado la política de envío, muelle y almacén en el Paso 1 - Crear cuenta - VTEX de la configuración inicial.
Visualización de la configuración de políticas de envío
Desde VTEX, en la sección Inventario y envío > Estrategia de envío podrás observar la política de envío OGC - Envío gratuito.

Visualización de la asociación a muelles de carga
Seguidamente, visualizarás la pestaña Muelles de carga.
💡 Ten en cuenta que el muelle y la relación con la política de envío se creó desde el momento cuando realizaste el onboarding en el middleman.


Asociación de muelles de carga a los almacenes
Desde la pestaña Almacenes, podrás visualizar la relación del almacén creado con el muelle de carga.


Personalización del checkout en tu tienda VTEX
💡 Antes de comenzar el proceso de personalización, debes verificar si tienes instalada la app Checkout Custom desde la sección Apps > Gestión de aplicaciones en tu tienda VTEX y de acuerdo a eso seguir con el apartado que corresponda.
Personalización del checkout en tu tienda VTEX cuando se tiene la app Checkout Custom instalada
Desde VTEX, debes dirigirte a la sección CONFIGURACIÓN DE LA TIENDA > STOREFRONT > Interfaz personalizada del checkout e ingresar a la pestaña JavaScript.

Copia y pega el script que te mostramos a continuación.
//////////////////////////////////////////////////////////////////////////////////// CONST ///////////////////////////////////// ////////////////////////////////////////////////////////////////
const GIFT_CARD = 'giftcard';const ID_SHIPPING = 'Shipping';const SHIPPING_INPUTS = { postalCode: { id: 'ship-postalCode', value: '3333' }, street: { id: 'ship-street', value: 'PorEmail'}, number: { id: 'ship-number', value: '1'}, receiverName: { id: 'ship-receiverName', value: 'Por email'},};const [CART_URL, PROFILE_URL, SHIPPING_URL] = ['cart', 'profile', 'shipping'];
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////// UTILS ///////////////////////////////////// ////////////////////////////////////////////////////////////////
function addDisplayNone(element) { const displayNone = "display: none !important;" return element.style.cssText = displayNone;};
function isACartWithFullGC(cartItems) { let isPureGC = true;
for (const item of cartItems) { const hasGC = Object.values(item.productCategories).some(x => x.includes(GIFT_CARD));
if (!hasGC) { isPureGC = false; break; } }
return isPureGC;};
function setElementValue(id, value) { const element = document.getElementById(id); if (!element) return;
const valueSetter = Object.getOwnPropertyDescriptor(element, 'value').set; const prototype = Object.getPrototypeOf(element); const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
if (valueSetter && valueSetter !== prototypeValueSetter) prototypeValueSetter.call(element, value); else valueSetter.call(element, value);
return element.dispatchEvent(new Event('input', { bubbles: true }));};
function scheduleDelayedExcecutions (functionToExecute) { functionToExecute(); setTimeout(functionToExecute, 500); setTimeout(functionToExecute, 1000); setTimeout(functionToExecute, 1500);};
function getUrl() { return window.location.hash.slice(2);};
/** * Function to move to payment url. User should not get into #shipping section because we hide that section. * @returns {Location.href} */function handleUrl() { const actualUrl = window.location.href; const newUrl = actualUrl.replace(/#\/.*/, "#/payment");
return window.location.href = newUrl;};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////// PROCESS /////////////////////////////////// ////////////////////////////////////////////////////////////////
/** * Hide the specific elements from section (cart | checkout) * @param {string} url * @returns void */function hideShippingData(url) { const htmlElementsToModify = { selectShippingForm: document.querySelector('.cart-more-options'), totalShippingCost: document.querySelector('.summary-template-holder') .querySelector('table') .querySelector('tbody') .querySelector('tr:nth-child(2)'), shippingDataForm: document.getElementById('shipping-data'), summaryShippingCost: document.querySelector('.custom-cart-template-wrap') .querySelector('table') .querySelector('tbody') .querySelector('tr:nth-child(2)'), };
if (url === CART_URL) { addDisplayNone(htmlElementsToModify.selectShippingForm); addDisplayNone(htmlElementsToModify.totalShippingCost); } else { addDisplayNone(htmlElementsToModify.shippingDataForm); addDisplayNone(htmlElementsToModify.summaryShippingCost); }};
/** * Function to fill shipping data in checkout * @returns void - Redirect to `payment section` */function completeShippingData() { const DEFAULT_CITY = 'Ciudad Autónoma de Buenos Aires'; const { postalCode, street, number, receiverName } = SHIPPING_INPUTS;
setElementValue(postalCode.id, postalCode.value); setElementValue(street.id, street.value); setElementValue(number.id, number.value); setElementValue(receiverName.id, receiverName.value);
const firstSelectedAddress = vtexjs.checkout.orderForm.shippingData.selectedAddresses[0]; if (firstSelectedAddress) { if (firstSelectedAddress.city === '') firstSelectedAddress.city = DEFAULT_CITY; if (firstSelectedAddress.number === '') firstSelectedAddress.number = street.value; if (firstSelectedAddress.postalCode === '') firstSelectedAddress.postalCode = postalCode.value; if (firstSelectedAddress.street === '') firstSelectedAddress.street = street.value; if (firstSelectedAddress.receiverName === '') firstSelectedAddress.receiverName = receiverName.value; }
const goToPayment = () => document.getElementById('btn-go-to-payment').onclick(); return scheduleDelayedExcecutions(goToPayment);}
function run() { if (!vtexjs) return;
const { items } = vtexjs.checkout.orderForm;
if (!items) return;
const isFullGC = isACartWithFullGC(items);
if (!isFullGC) return;
const url = getUrl();
if (url === SHIPPING_URL) { completeShippingData(); return handleUrl(); }
if (url === CART_URL) return hideShippingData(url); hideShippingData(url); completeShippingData();};
const observer = new MutationObserver(() => run());const options = { childList: true, subtree: true };
/* Start Process */observer.observe(document, options);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Marque como Activo el script y presione el botón Publicar para almacenar los cambios correctamente.


¡Listo! Culminaste la configuración del checkout de tu tienda VTEX 🔥 y ya tus clientes podrán realizar sus compras correctamente.
Personalización del checkout en tu tienda VTEX cuando no se tiene la app Checkout Custom instalada
Desde VTEX, debes dirigirte a la sección Configuración de la tienda > Checkout e ingresar a la configuración Default haciendo clic en el ícono ⚙️.

El siguiente paso es dirigirte a la sección CHECKOUT y elegir una de las dos opciones de Cálculo de opciones de entrega y recogida (Beta y Stable)

Según la elección del cálculo de opciones, deberás configurar diferentes scripts. Elige una opción y presiona el botón 'Guardar'.

Por siguiente, dirígete a la sección Código y presionar sobre el archivo checkout6-custom.js donde deberás ingresar los scripts correspondientes.

En la siguiente sección te detallaremos los distintos scripts que debes ingresar de acuerdo a la configuración elegida.