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.

Tienda

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.

Tienda

Tienda

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.

Tienda

Tienda

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.

Tienda

Copia y pega el script que te mostramos a continuación.

checkout
////////////////////////////////////////////////////////////////
//////////////////// 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.

Tienda

Tienda

¡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 ⚙️.

Tienda

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)

Tienda

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'.

Tienda

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.

Tienda

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