Ideal House
सामग्री पर जाएं

Visualizer अट्रिब्यूशन को भुगतान वाले ऑर्डर से जोड़ें#

Visualizer SDK द्वारा प्रकाशित अट्रिब्यूशन स्नैपशॉट को पकड़ें, उसे ग्राहक की कार्ट या चेकआउट के साथ रखें, और अंतिम भुगतान किए गए ऑर्डर की जानकारी अपने सर्वर से भेजें।

SDK आपकी कार्ट को स्वचालित रूप से संशोधित नहीं करता है या ऑर्डर रिपोर्ट नहीं करता है। आपके एकीकरण में निम्नलिखित करना होगा:

  1. ऑनलाइन स्टोर में नवीनतम स्नैपशॉट प्राप्त करना;
  2. पूरे स्नैपशॉट को कार्ट और ऑर्डर के साथ संरक्षित रखना; और
  3. भुगतान किए गए ऑर्डर की जानकारी Ideal House को एक विश्वसनीय सर्वर से भेजना।

1. स्नैपशॉट प्राप्त करें#

जब आपकी ऑनलाइन स्टोर प्रारंभ हो, तब ih_visualizer कुकी को पढ़ें और ih:visualizer के लिए सुनें ताकि अपडेट प्राप्त कर सकें। कुकी में URL से एन्कोड किया गया JSON होता है। ब्राउज़र ईवेंट event.detail में वही ऑब्जेक्ट प्रदान करता है।

js
function readVisualizerAttribution() {
  const prefix = 'ih_visualizer='
  const value = document.cookie
    .split(';')
    .map(part => part.trim())
    .find(part => part.startsWith(prefix))
    ?.slice(prefix.length)

  if (!value) return null

  try {
    return JSON.parse(decodeURIComponent(value))
  } catch {
    return null
  }
}

window.addEventListener('ih:visualizer', event => {
  saveAttributionWithCart(event.detail)
})

const currentAttribution = readVisualizerAttribution()
if (currentAttribution) {
  saveAttributionWithCart(currentAttribution)
}

अपने कंपर्स प्लेटफ़ॉर्म की कार्ट विशेषताओं, चेकआउट मेटाडेटा या सर्वर-साइड सेशन API के साथ saveAttributionWithCart लागू करें।

स्नैपशॉट के फ़ील्ड निम्न हैं:

json
{
  "visitor_id": "anonymous-visitor-id",
  "session_id": "visualizer-session-id",
  "categories": ["wall", "furniture"],
  "last_used_at": "2026-09-10T12:34:56.000Z"
}

संपूर्ण स्नैपशॉट को एक साथ संग्रहीत और प्रतिस्थापित करें। इसके मानों का नाम न बदलें, आंशिक प्रतिलिपि न बनाएं और न ही संशोधित करें। कुकी से पढ़े गए डेटा को अविश्वसनीय मानें और यदि यह इस आकार का पूर्ण वस्तु नहीं है तो उसे त्याग दें।

यदि आपका चेकआउट किसी अन्य होस्टनाम या बाहरी प्लेटफ़ॉर्म का उपयोग करता है, तो ग्राहक के ऑनलाइन स्टोर पृष्ठ छोड़ने से पहले स्नैपशॉट को कार्ट या सर्वर-साइड सेशन में कॉपी करें।

2. ऑर्डर के साथ इसे बनाए रखें#

जब भुगतान पूर्ण हो जाए, तो अपनी कार्ट, चेकआउट या ऑर्डर मेटाडेटा से मूल स्नैपशॉट को पुनः बनाएं। यदि कोई पूर्ण स्नैपशॉट उपलब्ध नहीं है, तो आंशिक ऑब्जेक्ट बनाने के बजाय null का उपयोग करें।

संक्षिप्त रूप को एक JSON मान के रूप में सहेजें या इन अनुशंसित मेटाडेटा क्षेत्रों का उपयोग करें:

मेटाडेटा फ़ील्डमान
idealhouse_visitor_idvisitor_id
idealhouse_session_idsession_id
idealhouse_categoriescategories, अल्पविराम से जोड़े गए
idealhouse_last_used_atlast_used_at

ऑर्डर रिपोर्ट करने से पहले idealhouse_categories को वापस एक JSON स्ट्रिंग सरणी में बदलें।

3. भुगतान किए गए ऑर्डर की रिपोर्ट करें#

इस एंडपॉइंट को अपने बैकएंड या भुगतान-ऑर्डर वेबहुक हैंडलर से ही कॉल करें। कभी भी ब्राउज़र JavaScript से इसे कॉल न करें।

http
POST <IDEALHOUSE_API_URL>/integrations/commerce/order-events
Content-Type: application/json
X-Client-Id: <CLIENT_ID>
X-Client-Secret: <CLIENT_SECRET>

ऑनलाइन स्टोर SDK के समान Ideal House शॉप के लिए क्रेडेंशियल्स का उपयोग करें। अनुरोध बॉडी में shop_id या shopId शामिल न करें।

bash
curl -X POST "<IDEALHOUSE_API_URL>/integrations/commerce/order-events" \
  -H "Content-Type: application/json" \
  -H "X-Client-Id: <CLIENT_ID>" \
  -H "X-Client-Secret: <CLIENT_SECRET>" \
  -d '{
    "schema_version": 1,
    "event_id": "store-42-order-paid-1001",
    "event_type": "order.paid",
    "source": {
      "platform": "custom",
      "store_id": "store-42"
    },
    "order": {
      "id": "order-1001",
      "order_number": "#1001",
      "customer_po_number": null,
      "created_at": "2026-09-10T11:55:00.000Z",
      "paid_at": "2026-09-10T12:00:00.000Z",
      "financial_status": "paid",
      "currency": "USD",
      "subtotal": "125.50",
      "total": "143.25",
      "line_items": [
        {
          "id": "line-1",
          "product_id": "product-1",
          "variant_id": "variant-1",
          "sku": "WP-100",
          "product_type": "Wallpaper",
          "quantity": 2,
          "unit_price": "62.75",
          "total_price": "125.50"
        }
      ]
    },
    "visualizer": {
      "visitor_id": "anonymous-visitor-id",
      "session_id": "visualizer-session-id",
      "categories": ["wall", "furniture"],
      "last_used_at": "2026-09-09T12:00:00.000Z"
    }
  }'

मुद्रा मान को JSON स्ट्रिंग के रूप में भेजें। प्रत्येक टाइमस्टैंप में समय क्षेत्र शामिल करें। केवल दस्तावेज़ीकृत फ़ील्ड भेजें; ग्राहक नाम, ईमेल पता, फ़ोन नंबर और बिलिंग या शिपिंग पते स्वीकार नहीं किए जाते हैं।

एक ऐसे ऑर्डर के लिए जिसमें पूर्ण अट्रिब्यूशन स्नैपशॉट नहीं है, visualizer फ़ील्ड अभी भी आवश्यक है:

json
{
  "visualizer": null
}

4. पुनः प्रयासों को संभालें#

भुगतान-ऑर्डर ईवेंट के लिए एक स्थिर event_id बनाएं और प्रत्येक पुनः प्रयास के लिए उसे पुन: उपयोग करें।

प्रतिक्रियाक्या करें
HTTP 200सफल। duplicate: true भी एक सफल परिणाम है।
नेटवर्क त्रुटि या HTTP 5xxबैकऑफ़ के साथ पुन: प्रयास करें और समान event_id का उपयोग करें।
HTTP 400पुनः प्रयास करने से पहले अनुरोध को ठीक करें।
HTTP 401 या 403अपने सर्वर क्रेडेंशियल्स की जाँच करें।
HTTP 409रुकें और जाँचें कि event_id का उपयोग किसी अन्य ऑर्डर के लिए किया गया है या नहीं।

सफल प्रतिक्रिया का उदाहरण:

json
{
  "accepted": true,
  "duplicate": false,
  "visualizer_assisted": true
}

5. इंटीग्रेशन चेकलिस्ट#

  1. सुनिश्चित करें कि Visualizer के उपयोग के बाद ऑनलाइन स्टोर ih_visualizer को पढ़ सकता है।
  2. सुनिश्चित करें कि ih:visualizer लिसनर कार्ट या चेकआउट मेटाडेटा को अपडेट करता है।
  3. सुनिश्चित करें कि संपूर्ण स्नैपशॉट भुगतान किए गए ऑर्डर तक पहुँचता है।
  4. अपने सर्वर से एक भुगतान करने वाला परीक्षण ऑर्डर जमा करें और HTTP 200 की अपेक्षा करें।
  5. समान event_id के साथ उसी ईवेंट को फिर से जमा करें और duplicate: true को सफलता के रूप में स्वीकार करें।
  6. "visualizer": null का उपयोग करके बिना अट्रिब्यूशन वाले एक ऑर्डर को जमा करें।
  7. सुनिश्चित करें कि Client Secret और ग्राहक का व्यक्तिगत डेटा कभी भी ब्राउज़र अनुरोधों या जमा किए गए ऑर्डर डेटा में नहीं दिखता है।