diff --git a/server.js b/server.js index 373812b..c7a0012 100644 --- a/server.js +++ b/server.js @@ -52,9 +52,25 @@ app.post('/webhooks/orders/create', verifyShopifyWebhook, async (req, res) => { const processMessage = `[${new Date().toISOString()}] Processing Order ${orderData.order_number}\n`; fs.appendFileSync('webhook.log', processMessage); - // Fetch product images from Shopify Admin API (requires read_products scope) + // Fetch product images (reads from line item properties if passed, otherwise fetches from Shopify Admin API) if (orderData.line_items && orderData.line_items.length > 0) { await Promise.all(orderData.line_items.map(async (item) => { + // Check if the image was passed as a line item property from checkout + if (item.properties) { + if (Array.isArray(item.properties)) { + const imgProp = item.properties.find(p => p.name === '_product_image'); + if (imgProp && imgProp.value) { + item.image_url = imgProp.value; + return; + } + } else if (typeof item.properties === 'object') { + if (item.properties['_product_image']) { + item.image_url = item.properties['_product_image']; + return; + } + } + } + if (!item.product_id) return; try { const shopifyUrl = `https://${process.env.SHOPIFY_STORE_DOMAIN}/admin/api/2024-01/products/${item.product_id}.json`; @@ -125,11 +141,22 @@ app.post('/create-order', async (req, res) => { try { const { customerData, cartItems } = req.body; - const line_items = cartItems.map(item => ({ - variant_id: item.variant_id || item.id, - quantity: item.quantity, - price: (item.price / 100).toFixed(2) - })); + const line_items = cartItems.map(item => { + const properties = []; + const imgUrl = item.image || (item.featured_image && (item.featured_image.url || item.featured_image)); + if (imgUrl && typeof imgUrl === 'string') { + properties.push({ + name: '_product_image', + value: imgUrl + }); + } + return { + variant_id: item.variant_id || item.id, + quantity: item.quantity, + price: (item.price / 100).toFixed(2), + properties: properties + }; + }); const orderPayload = { order: {