# Smartweb og HostedShop

> Sporing på Smartweb, HostedShop og den nye Dandomain Webshop – et script i designet og en salgskode i affiliate-feltet.

Smartweb, HostedShop og den nye Dandomain Webshop er samme system med samme menuer og variabler, så en guide dækker dem alle. Opsætningen kræver to felter to forskellige steder: sporingskoden på alle sider og salgskoden i affiliate-feltet.

> [!NOTE]
> Den ældre DanDomain-motor (adresser med `/shop/frontpage.html` og `[[variabler]]`) er en helt anden platform. Den har sin egen guide: [DanDomain Classic](https://www.affilyflow.com/docs/butik/dandomain-classic).

## Før du starter

- Adgang til shoppens administration.
- Jeres butiks-id. Kodestumperne under **Program → Opsætning** har det sat ind; her står `DIN_BUTIK` i stedet.
- Opsætning genkender som regel platformen selv. Står den ikke valgt, så vælg **Smartweb / HostedShop**.

## 1. Sporingskoden på alle sider

Gå til **Webshop → Design → Handlinger → Indsæt Javascript**, og sæt koden i feltet **Hvis koden skal afvikles i starten, når sidens header indlæses**.

```html title="Sporingskode – skal på alle sider"
<script src="https://app.affilyflow.com/track.js" data-store="DIN_BUTIK" async></script>
```

Koden hører til designet. Skifter I design senere, skal den sættes ind igen.

> [!TIP]
> Kan I ikke se **Handlinger**? Så kører shoppen det ældre DanDomain-system. Vælg **DanDomain Classic** i Opsætning, så får I den rigtige guide.

## 2. Salgskoden i affiliate-feltet

Gå til **Indstillinger → Affiliate marketing**, og sæt koden i feltet. Shoppen kører den selv på ordrebekræftelsen og udfylder ordrenummer, beløb og valuta, hvor der står %-variabler. I skal ikke rette i koden.

```html title="Salgskode – kun i affiliate-feltet"
<script>
  (function () {
    // Laeser beloebet, uanset om det kommer med valuta eller tusindtalsseparator.
    function tal(v) {
      // '499,-' og '1.249,-' er almindelige i Danmark: et afsluttende ',-' fjernes,
      // og et minus taeller kun forrest.
      var t = String(v).replace(/[^0-9.,-]/g, '').replace(/[.,]?-+$/, '').replace(/(?!^)-/g, '').replace(/^[.,]+|[.,]+$/g, '');
      var k = t.lastIndexOf(','), p = t.lastIndexOf('.');
      if (k > -1 && p > -1) t = k > p ? t.split('.').join('').replace(',', '.') : t.split(',').join('');
      else {
        var sep = k > -1 ? ',' : p > -1 ? '.' : '';
        if (sep && (t.split(sep).length > 2 || t.length - t.lastIndexOf(sep) === 4)) t = t.split(sep).join('');
        else if (sep === ',') t = t.replace(',', '.');
      }
      return Number(t) || 0;
    }
    // Platformens egen dokumentation bruger baade %OrderID% og %OrderId% - den, der
    // virker, bliver erstattet; den anden staar tilbage med %-tegn (audit 19. okt, I4).
    var id = '%OrderID%';
    if (id.indexOf('%') === 0) id = '%OrderId%';
    var val = '%OrderCurrencyCode%';
    var raw = '%OrderTotalInclVatExclFee%';
    // Staar variablen her endnu, ligger koden i et felt uden ordre (fx alle sider):
    // send intet - ellers bliver hver sidevisning et salg paa 0 kr. (audit 19. okt, I1).
    if (raw.indexOf('%') === 0) {
      console.error('Affilyflow: salgskoden skal i Indstillinger -> Affiliate marketing (koden koeres paa ordrebekraeftelsen).');
      return;
    }
    // Ingen variabel uden moms: totalen uden gebyr / 1,25 (25 % dansk moms). Fragten er med.
    var total = Math.round((tal(raw) / 1.25) * 100) / 100;
    if (!(total > 0)) return;
    // Renderer variablerne ikke, staar teksten der stadig. Ordrenummeret maa
    // aldrig sendes raat - saa ville alle ordrer se ens ud for dubletsikringen
    // - og en valuta der hedder %OrderCurrencyCode% ville lande i salgsraekken.
    if (id.indexOf('%') === 0) id = '';
    if (val.indexOf('%') === 0) val = '';
    var tries = 0;
    (function send() {
      if (!window.affilyflow) { if (tries++ < 50) setTimeout(send, 200); else console.error('Affilyflow: sporingskoden (track.js) mangler paa siden - salget er ikke registreret.'); return; }
      affilyflow.conversion({ order: id, total: total, currency: val });
    })();
  })();
</script>
```

> [!WARNING]
> Platformen har ingen beløbsvariabel uden moms og fragt. Koden bruger ordrens total uden gebyr divideret med 1,25 (dansk moms), så **fragten tæller med** i grundlaget for provisionen. Sælger shoppen med en anden momssats, passer divisionen ikke – skriv til info@affilyflow.com.

Kan I ikke finde **Affiliate marketing**, så søg efter "affiliate" i indstillingerne. Feltet hedder det samme på Smartweb, HostedShop og Dandomain Webshop.

## 3. Test

Tryk **Åbn testlink** under testtrinnet i Opsætning, læg en testordre i samme browser, og bliv på siden. Live-testen viser testklikket og købet med ordrenummer og beløb, og spørger om beløbet passer. Et køb uden klik fra et link tælles ikke.

Kommer salget ikke frem, så tjek, at koden står i begge felter – og ikke den samme kode to steder. Se også [Test og fejlfinding](https://www.affilyflow.com/docs/butik/test-og-fejlfinding).

## Typiske fejl

| Det ser I | Årsag |
|---|---|
| Opsætning finder ikke sporingskoden | Koden står ikke i det design, der er **aktivt**, eller i det forkerte af de tre felter. |
| Konsollen skriver "salgskoden skal i Indstillinger -> Affiliate marketing" | Salgskoden ligger et sted uden ordre, fx i designets JavaScript-felt. Flyt den til affiliate-feltet. |
| Konsollen skriver "sporingskoden (track.js) mangler paa siden" | Sporingskoden er ikke kommet med på ordrebekræftelsen. Tjek trin 1. |

## Refusioner

Platformen melder ikke refusioner til os. Et refunderet køb skal I selv afvise inden for godkendelsesperioden – se [Godkendelse og refusioner](https://www.affilyflow.com/docs/butik/godkendelse-og-refusioner).

Kilde: https://www.affilyflow.com/docs/butik/smartweb
