// 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
sunfolower1_edited.png
Freya artist of mystical crow
Freya artist of mystical crow
Freya artist of mystical crow
Freya artist of mystical crow
Freya artist of mystical crow

Welcome to the Mystical Crow,

Where shadows stir and magic awaits.

 

Step into a world of magic, mystery, and handmade treasures. From hand made  candles and incenses to spell tools, altar decor, and curated vintage finds, every item is crafted or selected with care.

 

Don’t forget to join my Coven of Crows loyalty rewards program to earn magical perks as a thank-you for your support.

 

I am so grateful you’re here—it’s your energy that keeps the magic alive!

 

Blessings,

Freya 🖤

0beccc6a-19b1-4d82-bffd-e37c91755eb1.png
23_edited.png
Freya artist of mystical crow
Freya artist of mystical crow
0beccc6a-19b1-4d82-bffd-e37c91755eb1.png
Freya artist of mystical crow

WAITING LIST AVAILABLE

new dark academia design coming soon! Until we sell out, get this version for just $16

Witchy, witchcraft subscription box

SUBSCRIPTION BOXES ARE CURRENTLY SOLD OUT, HOWEVER YOU CAN ADD YOURSELF TO MY WAITING LIST!

Freya artist of mystical crow

Coven of Crows

Join

Freya artist of mystical crow
Freya artist of mystical crow

step 1

COLLECT CRYSTAL POINTS, GET BIRTHDAY GIFTS, RECEIVE SPECIAL OFFERS AND EARLY RELEASES

step 2

Cast your name into my cauldron!

Birthday
Month
Day
Year
Freya artist of mystical crow
bottom of page