# Salgslinjen

> Meld salget med en enkelt linje HTML på kvitteringssiden – ingen JavaScript, og danske beløb læses rigtigt.

Salgslinjen er den enkleste måde at melde et salg på: et skjult element på kvitteringssiden, som [track.js](https://www.affilyflow.com/docs/reference/track-js) finder og melder. Der er ingen JavaScript at skrive, så en skabelonvariabel kan ikke ødelægge koden.

## Linjen

```html title="Kvitteringssiden"
<div hidden data-affilyflow-order="1008" data-affilyflow-total="499,00"></div>
```

Sæt jeres skabelonvariabler ind i stedet for `1008` og `499,00` – ordrenummeret og varernes beløb efter rabat, uden moms og fragt. Hvilke variabler det er på jeres system, står i [Specialbygget webshop](https://www.affilyflow.com/docs/butik/specialbygget).

Linjen virker kun, når track.js ligger på samme side. Indsæt scriptet på alle sider, også kvitteringen.

## Attributter

| Attribut | Påkrævet | Værdi |
|---|---|---|
| `data-affilyflow-order` | Ja | Ordrenummeret – eller `?parameter` for at læse det fra sidens adresse. |
| `data-affilyflow-total` | Ja | Beløbet – eller `#id` for at læse teksten i elementet med det id. |
| `data-affilyflow-vat` | Nej | Momsen i procent, som beløbet indeholder (fx `25`). Den trækkes fra. |
| `data-affilyflow-currency` | Nej | Valutakode, fx `EUR`. Standard er `DKK`. |

Brug `hidden`, så elementet ikke vises. Det betyder intet for sporingen.

## Værdier fra siden

Har sidebyggeren ingen skabelonvariabler (fx Webflow), kan linjen hente værdierne fra siden selv:

- `data-affilyflow-order="?orderId"` læser parameteren `orderId` i adressen (`/order-confirmation?orderId=WF-55` giver `WF-55`).
- `data-affilyflow-total="#af-total"` læser teksten i elementet med `id="af-total"`.
- `data-affilyflow-vat="25"` trækker 25 % moms fra, når beløbet på siden er med moms.

```html title="Kvitteringssiden · Webflow"
<div hidden data-affilyflow-order="?orderId" data-affilyflow-total="#af-total" data-affilyflow-vat="25"></div>
```

Med `1.249,00 kr.` i `#af-total` meldes 999,20 (1.249 uden 25 % moms).

## Sådan læses beløbet

- Danske beløb læses: `499,00`, `1.249,00`, `1.249,-`, `499,00 kr.` og `kr. 499`.
- `1.249` læses som 1249 – i linjen er punktum med tre cifre efter altid tusindtal, fordi værdien kommer fra sidens tekst.
- Maskintal som `1249.5` og `89.90` bruges, som de er.
- Med `data-affilyflow-vat` divideres beløbet med 1 + moms/100 og rundes til to decimaler. Værdien skal være over 0 og under 100.

Beløbet skal være det, provisionen regnes af: varerne efter rabat, uden moms og fragt.

## Timing

Mange sider tegner kvitteringen efter indlæsning (Livewire, React, Webflow). Linjen klarer det:

- track.js leder efter elementet, når siden er indlæst, og holder øje med nye elementer i op til 60 sekunder.
- Mangler ordrenummeret, eller har beløbet endnu ingen cifre, venter scriptet op til 20 sekunder på dem.
- Hvert element meldes en gang. Det markeres med `data-affilyflow-sent="1"`, når det er læst.
- Når et salg er fundet, holder scriptet op med at lede.

En genindlæst kvittering sendes ikke igen: browseren husker ordrenummeret i 30 dage, og serveren tæller aldrig samme ordrenummer to gange i samme program.

## Hvornår intet sendes

- **Intet affiliateklik i browseren.** Et almindeligt køb uden affiliate sendes ikke, og der skrives ingen fejl. Test derfor med testlinket – se [Test og fejlfinding](https://www.affilyflow.com/docs/butik/test-og-fejlfinding).
- **Intet samtykke endnu.** Med `data-consent="required"` venter salget, til samtykket er afklaret. Se [Samtykke og cookies](https://www.affilyflow.com/docs/butik/samtykke-og-cookies).
- **Ordrenummeret mangler eller er en pladsholder.** Linjen kræver et ordrenummer. `ORDRE_ID`, `{{ $order->id }}`, `[OrderID]`, `<…>` og `%OrderID%`, der ikke blev udfyldt, afvises.
- **Beløbet er tomt eller 0.**

De to sidste skriver en fejl i browserens konsol:

```text title="Browserens konsol"
Affilyflow: data-affilyflow-order must be the order number – the sale was not recorded.
Affilyflow: data-affilyflow-total must be the amount (goods excl. VAT and shipping) – the sale was not recorded.
```

> [!TIP]
> Live-testen under Opsætning i butikkens dashboard viser det beløb, der kom frem, og spørger, om det passer med testordren. Det fanger både moms og fragt, der er kommet med.

## Linjen eller JavaScript?

Linjen og [`affilyflow.conversion()`](https://www.affilyflow.com/docs/reference/track-js#affilyflow-conversion) melder det samme salg. Brug linjen, medmindre I allerede har et script, der virker – det gamle kald virker uændret. Brug kun en af dem på samme kvittering, eller send samme ordrenummer i begge, så dubletværnet stopper den anden.

Kilde: https://www.affilyflow.com/docs/reference/salgslinje
