# Trackingeinrichtung einer Kampagne in easy.AFFILIATE mit Basket-Tracking

Um das Tracking in **easy.AFFILIATE** zu gewährleisten, sind lediglich zwei Einbauschritte notwendig. 

Das System generiert beim Redirect von der Publisher-Seite auf Ihren Shop eine ID, mit der der Sale später erfasst werden kann. Diese ID (nachfolgende EMID genannt) wird shopseitig von einem Code-Snippet aufgenommen und im **Local Storage** sowie in einem **Cookie** gespeichert. Bei der Conversion-Erfassung wird diese EMID über ein anderes Code-Snippet zurück an das Trackingsystem gespielt.

---

## 1. Code-Snippet (einzubauen auf jede Seite)

Dieser Code nimmt die EMID auf, die im Redirect erzeugt wird, und schreibt sie in den LocalStorage sowie in einen Cookie (jeweils mit dem Key `emid`).

**Einbauort:** Auf sämtlichen Seiten des Shops (am einfachsten im Footer-Template).

```javascript
(function() {
    // The expiration time of the cookie (normally 60 days)
    // Die Laufzeit des Cookies (im Regelfall 60 Tage)
    var emidCookieExpirationDays = 60;

    // Please do not change below here!
    // Ab hier bitte nicht verändern!
    var getKey = 'emid';
    var getValue = getParameterByName(getKey);
    var storageKey = 'emid';
    var emidCookieKey = 'emid';
    var emidCookieDomain = window.location.hostname;

    if(getValue) {
        window.localStorage.setItem(storageKey, getValue);
        setEmidCookie(emidCookieKey, getValue, emidCookieExpirationDays,  emidCookieDomain);
    }

    function setEmidCookie(cname, cvalue, exdays, cdomain) {
      var d = new Date();
      d.setTime(d.getTime() + (exdays * 24*60*60*1000));
      var expires = "Expires="+ d.toUTCString();
      document.cookie = cname + "=" + cvalue + ";" + expires + ";Path=/;SameSite=none;Domain=" + cdomain + ";Secure";
    }
    
    function getParameterByName(e,n){n||(n=window.location.href),e=e.replace(/[[]]/g,"\$&");var r=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)").exec(n);return r?r[2]?decodeURIComponent(r[2].replace(/\+/g," ")):"":null}
})();
```

---

## 2. Basket-Conversion-Code (einzubauen auf die Checkout-Successful-Seite)

Dieser Code erfasst die Bestellung und übergibt sie an das Trackingsystem. 

**Einbauort:** Ausschließlich auf der Bestellbestätigungsseite.

```javascript
(function () {
  // please insert the campaign_id here - you received it by your account manager
  var campaign_id = 'CAMPAIGN_ID';

  // please insert the unique ordernumber of the purchase here
  var token = 'ORDERTOKEN';

  // insert EVERY purchased item into the basket variable "basket" 
  var basket = [
    {
      article_number: "ARTICLE_NUMBER_1",
      amount: "ARTICLE_AMOUNT_1",
      price: "SINGLE_ARTICLE_TURNOVER_1",
      productname: "ARTICLE_NAME_1",
      category: "ARTICLE_CATEGORY_1"
    }, {
      article_number: "ARTICLE_NUMBER_2",
      amount: "ARTICLE_AMOUNT_2",
      price: "SINGLE_ARTICLE_TURNOVER_2",
      productname: "ARTICLE_NAME_2",
      category: "ARTICLE_CATEGORY_2"
    }, {
      article_number: "ARTICLE_NUMBER_N",
      amount: "ARTICLE_AMOUNT_N",
      price: "SINGLE_ARTICLE_TURNOVER_N",
      productname: "ARTICLE_NAME_N",
      category: "ARTICLE_CATEGORY_N"
    }
  ];

  // Please insert the URL / Domain des Systems
  var trackingDomain = 'DOMAIN-DES-SYSTEMS';

  // Please do not change below here!
  var storageKey = 'emid';
  var trigger_id = '1';

  var basketUrl = 'https://' + trackingDomain + '/trck/ebasket/ebasket.js';
  
  emid = window.localStorage[storageKey];

 if (typeof emid !== 'undefined') {
    var req = new XMLHttpRequest;
    req.withCredentials = true;
    req.open("GET", basketUrl),
      req.send(),
      req.onreadystatechange = function () {
        (req.readyState === 4) ? function () {
          eval(req.response);
          basket.forEach(function(elem) {
            eamTrckAddBasketItem(
              campaign_id,token,trigger_id,encodeURIComponent(elem.article_number),elem.amount,elem.price,emid,encodeURIComponent(elem.productname),encodeURIComponent(elem.category),{}
            );
          });
          eamTrckSubmitBasket();
        }() : null
      };
  }
})();
```

### Wichtige Hinweise zum Conversion-Code:

* **Platzhalter ersetzen:** Ersetzen Sie `CAMPAIGN_ID`, `ORDERTOKEN` und `DOMAIN-DES-SYSTEMS` durch Ihre spezifischen Daten.
* **Dynamische Inhalte:** Die Variable `basket` muss dynamisch mit allen Artikeln der Bestellung befüllt werden.
* **Mengensteuerung:** Jedes Produkt sollte nur einmal im Array erscheinen; die Anzahl wird über `ARTICLE_AMOUNT` gesteuert.
* **Netto-Werte:** Der Umsatz (`price`) muss als **Netto-Einzelpreis** (ohne Steuern und Versandkosten) übergeben werden.

### Erläuterung der Platzhalter:

| Platzhalter | Beschreibung |
| :--- | :--- |
| **CAMPAIGN_ID** | Fester Wert von Ihrem Account-Manager. |
| **ORDERTOKEN** | Die dynamische Bestellnummer aus Ihrem Shop. |
| **DOMAIN-DES-SYSTEMS** | Die Domain Ihres easy.AFFILIATE-Systems. |
| **ARTICLE_NUMBER_N** | Artikelnummer des jeweiligen Produkts. |
| **ARTICLE_AMOUNT_N** | Anzahl des jeweiligen Produkts im Warenkorb. |
| **SINGLE_ARTICLE_TURNOVER_N** | Netto-Umsatz des Einzelprodukts. |
| **ARTICLE_NAME_N** | Name des Produkts. |
| **ARTICLE_CATEGORY_N** | Kategorie des Produkts. |