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

Winner 2016 COVR People's Choice Award2016 COVR Finalist for Iconic BooksIntroduction to Tarot offers a comprehensive guide with detailed explanations of both the Rider-Waite(c) and Crowley Thoth decks -the two best-selling tarot decks of all time. This beautiful four-color book is richly illustrated with every card from both decks as well as artwork from other popular decks. This book includes instructions for understanding tarot structure and symbolism, basic and advanced card spreads, numerology, court cards, and other tarot topics. This is a book that will inspire both the novice and the seasoned reader to delve deeper into the meaning of tarot.Susan Levitt is a professional tarot reader, astrologer, and feng shui consultant in the San Francisco Bay Area. She is the author of The Complete Tarot Kit, Teen Feng Shui, Taoist Feng Shui, and Taoist Astrology."This is a clear and compact guide, with many gems stored inside it. Levitt presents the Tarot as a way to join with the rhythms of nature, as natural as the yin and yang of breath." -Rachel Pollack, author of Seventy-Eight Degrees of WisdomandThe Complete Illustrated Guide to TarotSee Also: The Complete Tarot KitE-book with full color images now available on Amazon and iTunes!

Introduction to Tarot Book

$22.00Price
Quantity
    bottom of page