// 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
IMG_1718.JPG
witchy subscription box, subscription box for witches
witchy subscription box, subscription box for witches
Copy of Wildflowers-Bouquet-25_edited.pn
Mystical Crow Witchy shop

About Our Subscription Boxes

"They come with so much stuff!"

Every box includes a thoughtful combination of items like:  (7-8 Items) adding up to over $80!

• Handmade Candles infused with magical elements for rituals and intention-setting.

• Artisanal Incense & Powders for meditation, protection, or manifestation.

• Herbal Bath Products for spiritual cleansing and relaxation.

• Spiritual Tools like journals for gratitude and intention, loose-leaf teas for divination, or oils infused with crystals.

Each piece is made with care, ensuring high quality and a touch of mysticism in every detail.

​

 

Limited Availability

Our subscription boxes are crafted in small batches to ensure the highest quality and attention to detail. Due to this, availability is limited each month. Once we reach capacity, we will open a waiting list so you can reserve your spot for the next available box.

 

Secure your subscription today to ensure you don’t miss out on the magic!

Favorites from past boxes

Find favorites from past subscription boxes!

Whether you missed out or want more of something you loved,

this is your chance to bring the magic back into your rituals.

bottom of page