// Page Code for /checkout-link import { cart } from 'wix-stores'; import wixLocation from 'wix-location'; /** * Accepts `products` query parameter in Meta format: * - Encoded: products=112233%3A1%2C445566%3A2 * - Unencoded: products=112233:1,445566:2 (still works) * * Each entry is ID:QTY. Colons/commas may be RFC 3986-escaped. * Example final URL for Meta: * https://mysticalcrow.com/checkout-link?products=112233%3A1%2C445566%3A2 */ function parseProductsParam(rawParam) { if (!rawParam || typeof rawParam !== 'string') return []; // Try to decode once; if it throws or changes nothing, we still continue safely let decoded = rawParam; try { // decodeURIComponent will convert %3A -> ":", %2C -> "," decoded = decodeURIComponent(rawParam); } catch (_e) { // If decoding fails, we’ll proceed with the original string } // Split by commas (now that we normalized to ":" and ",") // Trim spaces just in case. return decoded .split(',') .map(s => s.trim()) .filter(Boolean) .map(pair => { const [id, qty] = pair.split(':').map(x => (x || '').trim()); const quantity = Number(qty); return (id && !Number.isNaN(quantity) && quantity > 0) ? { productId: id, quantity } : null; }) .filter(Boolean); } async function addAllToCart(items) { // Wix Stores cart.addProducts accepts an array of product objects. // We’ll add one by one to ensure each promise resolves, but you can batch if desired. for (const item of items) { // If a product has variants/options, you’ll need to pass the relevant // selection data here (e.g., options: [{ optionName, selection }]). // For simple products, productId + quantity is sufficient. await cart.addProducts([{ productId: item.productId, quantity: item.quantity }]); } } $w.onReady(async function () { const { products } = wixLocation.query; if (!products) { // No parameter present; go to cart so the user isn't stuck. wixLocation.to('/cart'); return; } const items = parseProductsParam(products); if (!items.length) { // Parameter present but invalid/empty after parsing wixLocation.to('/cart'); return; } try { await addAllToCart(items); // Success: go straight to checkout wixLocation.to('/checkout'); } catch (_err) { // If anything fails (bad ID, etc.), fall back to cart wixLocation.to('/cart'); } });
top of page

Product Description

Unleash your inner monster and trick-or-treat your way into a connection with the most magical and scary night of the year: Halloween! Festivals of the Dead like Halloween have been celebrated for thousands of years across many different world cultures. They serve to honor those who have passed and to celebrate death as a natural part of life and an opportunity to welcome in a new beginning. During Samhain, the ancient Celtic festival from which Halloween originates, the veil between this world and the next was believed to be at its thinnest and so since the very beginning, Halloween has been an occasion for effective and potent divination―a chance to connect with “the other side” or get a glimpse into your future.

 

Now you can harness the eerie power of Halloween every night of year, encountering black cats, vampires, zombies, witches, werewolves, jack-o-lanterns, skeletons, mummies and characters from the Mexican Day of the Dead tradition (including Lady de los Muertos), exquisite candy skulls, and more! Each of the 36 richly illustrated cards has an accompanying meaning in the guidebook featuring rhyming couplets like those used in ancient storytelling as well as a message of divination for you based on an aspect of Halloween tradition.

Halloween Oracle

$24.00Price
Quantity
    bottom of page