> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Eigenes Bonuspunktesystem betreiben

> Käufer sammeln beim Einkauf Bonuspunkte und lösen sie im selben Shop wieder ein, als Gutschrift auf den Warenkorb oder für Prämienprodukte.

Ein eigenes Bonuspunktesystem unterscheidet sich von einem externen in einem Punkt, der alles andere bestimmt: Die Punkte entstehen in Ihrem Shop und werden in Ihrem Shop wieder eingelöst. Der Käufer kommt also zurück, um seine Punkte zu nutzen, und er nutzt sie für Produkte aus Ihrem Sortiment.

Bei einem externen Anbieter wandern die Punkte aus Ihrem Shop ab, werden anderswo eingelöst, und Sie zahlen zusätzlich Gebühren dafür.

## Wie Punkte entstehen

### Punkte je Produkt vergeben

Sie legen **je Produkt** fest, wie viele Punkte der Käufer beim Kauf gutgeschrieben bekommt. Die Punktzahl ist unabhängig vom Preis.

Diese Unabhängigkeit ist der eigentliche Hebel. Sie können Produkte mit guter Marge großzügig bepunkten und Produkte mit dünner Marge gar nicht. Ein preisproportionales System könnte das nicht.

Punkte werden einem **angemeldeten** Käufer automatisch gutgeschrieben.

### Punkte gezielt zuweisen oder abziehen

Über eine Importdatei für den WSPManager lassen sich einzelnen Käufern Punkte zuweisen oder abziehen, beispielsweise als Entschädigung oder nach einer Rückabwicklung.

## Wie Punkte eingelöst werden

Es gibt zwei Wege, und beide lassen sich gleichzeitig anbieten.

| Weg | Was der Käufer bekommt |
| - | - |
| Gutschrift auf den Warenkorb | einen Preisnachlass in Höhe der eingelösten Punkte |
| Prämienprodukt | ein Produkt, das ganz oder teilweise mit Punkten bezahlt wird |

### Gutschrift auf den Warenkorb

Sie legen global fest, was ein Punkt wert ist. Der Käufer entscheidet dann selbst, wie viele seiner Punkte er einlöst.

| Regel | |
| - | - |
| Obergrenze | Die Gutschrift kann den Warenwert erreichen, aber nicht übersteigen |
| Abzüge | Rabatte und Gutscheine werden vorher abgezogen |
| Mindestpunkte | Sie können eine Mindestzahl einzulösender Punkte vorgeben |
| Mindestbestellwert | Sie können das Einlösen erst ab einem Bestellwert erlauben |
| Ausgeschlossene Produkte | Sie können Produkte kennzeichnen, auf die keine Punkte eingelöst werden dürfen. Sie senken den einlösbaren Betrag im Warenkorb |

### Prämienprodukte

Je Produkt legen Sie fest, wie viele Punkte für den Erwerb nötig sind.

| Konstellation | Ergebnis |
| - | - |
| Prämienprodukt ohne Preis | Der Käufer bezahlt allein mit Punkten |
| Prämienprodukt mit Preis | Prämie mit Zuzahlung |

Beim Kauf werden die Punkte vom Konto des Käufers abgezogen.

> [!WARNING]
>
> Zwei Wechselwirkungen mit anderen Funktionen sind zu beachten. Erstens lässt sich einstellen, ob Prämienprodukte mit negativem Preis in die Berechnung des Auftragswertrabatts eingehen. Zweitens wird die **Gutschrift auf den Warenkorb bei produktabhängigem Mindermengenzuschlag nicht berücksichtigt**. Beides kann zu Beträgen führen, die auf den ersten Blick nicht aufgehen.

Wegweiser: Prämienprodukte mit negativem Preis beim Auftragswertrabatt · [Mindermengenzuschlag produktabhängig erheben](https://dokumentation.websale.de/v8s/weitere-funktionen-im-bestellprozess-kontext/mindestbestellwert-und-mindermengenzuschlag.md)

## Schritt 1: Freischaltung

Das Bonuspunktesystem muss von der WEBSALE AG freigeschaltet werden.

## Schritt 2: Die Punkte in den Produktdaten festlegen

Je Produkt legen Sie fest:

* wie viele Punkte der Käufer beim Kauf erhält
* ob das Produkt ein Prämienprodukt ist und wie viele Punkte dafür nötig sind
* ob auf dieses Produkt Punkte eingelöst werden dürfen

## Schritt 3: Den Abschnitt in der Shopkonfiguration anlegen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<BonusPoints>
   Allow                                    = yes
   AmountPerPoint                           = 20
   MinInputPoints                           = 1
   MinOrderValue                            = 20
   CashedPoints-Txt                         = abzüglich ~WS-CashedBonusPoints~ Bonuspunkte
   PointsAccountBalance-Txt                 = Kontostand Bonuspunkte
   OrderPoints-Txt                          = Bonuspunkte der Bestellung
   NotEnoughPoints-Txt                      = Sie haben noch nicht genügend Bonuspunkte für dieses Produkt.
   BonusProductPointsPosition-Txt           = Prämienpunkte der Position
   BonusProductPointsTotal-Txt              = Gesamtsumme der eingelösten Prämienpunkte
   VATType                                  = static
   PriceTypeNet-UseBonusPointsOnTotalNetSum = no
</BonusPoints>
```

| Parameter | |
| - | - |
| `Allow` | schaltet das System ein |
| `AmountPerPoint` | der Gegenwert eines Punktes |
| `MinInputPoints` | Mindestzahl einzulösender Punkte |
| `MinOrderValue` | Mindestbestellwert für das Einlösen |
| `CashedPoints-Txt` | Text für die eingelösten Punkte in der Bestellung |
| `PointsAccountBalance-Txt` | Text für den Kontostand |
| `OrderPoints-Txt` | Text für die Punkte der Bestellung |
| `NotEnoughPoints-Txt` | Meldung bei zu wenig Punkten für ein Prämienprodukt |
| `BonusProductPointsPosition-Txt` | Text je Position in der Bestellung |
| `BonusProductPointsTotal-Txt` | Text für die Summe in der Bestellung |
| `VATType` | `static` oder `dynamic` für die Berechnung der Mehrwertsteuer |
| `PriceTypeNet-UseBonusPointsOnTotalNetSum` | zieht die Punkte in Nettoshops von der Nettosumme ab |

> [!WARNING]
>
> Steht `AmountPerPoint` auf null oder fehlt, rechnet der Shop mit **1** je Punkt. Ein vergessener Parameter führt also nicht zu einer Fehlermeldung, sondern zu einem Punktwert, den Sie nicht gewollt haben.

`AmountPerPoint` ist die Stellschraube, an der die Wirtschaftlichkeit des ganzen Systems hängt. Rechnen Sie den Wert gegen die vergebenen Punkte je Produkt durch, bevor Sie live gehen.

Bei `VATType` bewirkt nur der Wert `dynamic` etwas. Jede andere Angabe, auch eine falsch geschriebene, ergibt die statische Berechnung.

> [!WARNING]
>
> `PriceTypeNet-UseBonusPointsOnTotalNetSum` wirkt **ausschließlich in Nettoshops**. In einem Bruttoshop wird der Schalter beim Einlesen stillschweigend wieder abgeschaltet. Wenn er scheinbar keine Wirkung hat, prüfen Sie zuerst die Preisart Ihres Shops.

Referenz: [Abschnitt BonusPoints](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/preise-steuern-und-waehrung.md#bonuspoints)

## Schritt 4: Die Punkteübersicht im Kundenkonto (optional)

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Templates>
   ...
   BonusPoints = ws_bonus_points.htm
   ...
</Templates>
```

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<h1>Ihre Bonuspunkte</h1>

<p>
   Kontostand:
   {WS-UserBonusPoints}~WS-UserBonusPoints~{/WS-UserBonusPoints}
   {!WS-UserBonusPoints}0{/!WS-UserBonusPoints}
</p>

<p>Noch verfügbar: ~WS-FreeBonusPoints~</p>

{WS-BonusPointsUsedInBasket}
   <p>Im aktuellen Warenkorb verwendet: ~WS-BonusPointsUsedInBasket~</p>
{/WS-BonusPointsUsedInBasket}

<a href="~WS-UserAccountLink~">zurück zum Kundenkonto</a>
```

Der Gegenzweig `{!WS-UserBonusPoints}` ist wichtig. Ohne ihn sieht ein Käufer ohne Punkte an dieser Stelle gar nichts und nicht die Null. Gerade dieser Käufer soll aber erfahren, dass es etwas zu sammeln gibt.

Verlinken Sie diese Seite aus der Kundenkontoübersicht. Ein Punktestand, den niemand findet, bindet niemanden.

Referenz: [WS-UserBonusPoints](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md#die-tags-im-uberblick) · [WS-FreeBonusPoints](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md#die-tags-im-uberblick) · WS-BonusPointsUsedInBasket

## Schritt 5: Die Warenkorbseite erweitern

![Hmfile Hash B05bc45a](https://mintcdn.com/websaleag-44ee7ea6/kWrWhXMhC1RLz3Kh/images/hmfile_hash_b05bc45a.png?fit=max\&auto=format\&n=kWrWhXMhC1RLz3Kh\&q=85\&s=483e5499c8ac6b41306cf61508de1b64)

### Punktestand anzeigen und Punkte einlösen

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{BASKET-PR-Data}

   {WS-BasketBonusPoints}
      <p>Für diesen Einkauf erhalten Sie ~WS-BasketBonusPoints~ Bonuspunkte.</p>
   {/WS-BasketBonusPoints}

   {WS-UserBonusPoints}
      <p>Ihr Punktestand: ~WS-UserBonusPoints~</p>
      <p>Für diesen Warenkorb einlösbar: ~WS-MaxRedeemableBonusPoints~</p>

      {WS-CashedBonusPoints}
         <p>Bereits eingelöst: ~WS-CashedBonusPoints~</p>
      {/WS-CashedBonusPoints}

      {WS-BonusProductPointsInBasket}
         <p>Für Prämienprodukte im Warenkorb benötigt: ~WS-BonusProductPointsInBasket~</p>
      {/WS-BonusProductPointsInBasket}

      {WS-BonusPointsUsedInBasket}
         <p>Insgesamt gebunden: ~WS-BonusPointsUsedInBasket~</p>
      {/WS-BonusPointsUsedInBasket}

      {WS-FreeBonusPoints}
         <p>Danach noch verfügbar: ~WS-FreeBonusPoints~</p>
      {/WS-FreeBonusPoints}
   {/WS-UserBonusPoints}

{/BASKET-PR-Data}

<form action="~FORM-BonusPoints~" method="post">
   <label for="punkte">Punkte einlösen</label>
   <input type="text" id="punkte" name="~WS-BonusPoints_Input~" value="">
   <button type="submit">einlösen</button>
</form>
```

Die vier Zahlen zum Punktestand bedeuten Verschiedenes und sollten deshalb unterschiedlich beschriftet werden.

| Tag | Zahl |
| - | - |
| `WS-UserBonusPoints` | der Kontostand insgesamt |
| `WS-MaxRedeemableBonusPoints` | was bei diesem Warenkorb höchstens einlösbar ist |
| `WS-CashedBonusPoints` | was der Käufer für die Gutschrift bereits eingelöst hat |
| `WS-BonusProductPointsInBasket` | was die Prämienprodukte im Warenkorb kosten |
| `WS-BonusPointsUsedInBasket` | die Summe der beiden vorigen |
| `WS-FreeBonusPoints` | was danach übrig bleibt |

> [!WARNING]
>
> Das Formular zum Einlösen steht **außerhalb** des Warenkorbformulars. Zwei ineinander verschachtelte Formulare sind in HTML nicht zulässig, und der Browser verwirft dann eines von beiden.

Die Obergrenze aus `WS-MaxRedeemableBonusPoints` gehört neben das Eingabefeld. Sonst gibt der Käufer seinen vollen Punktestand ein und wundert sich, dass nur ein Teil angerechnet wird.

### Eingelöste Punkte anzeigen und zurücknehmen

![Hmfile Hash B05bc45a 1](https://mintcdn.com/websaleag-44ee7ea6/kWrWhXMhC1RLz3Kh/images/hmfile_hash_b05bc45a-1.png?fit=max\&auto=format\&n=kWrWhXMhC1RLz3Kh\&q=85\&s=661588081e8ddb98ca6630b781ee39cf)

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{BASKET-PR-Data}
   ...
   {BASKET-BonusPointsAmount}
      <p>
         Nachlass durch Bonuspunkte: ~BASKET-BonusPointsAmount~ ~WS-CurrencySymbol~
         <a href="~WS-DeleteCashedBonusPointsLink~">zurücknehmen</a>
      </p>
   {/BASKET-BonusPointsAmount}
   ...
{/BASKET-PR-Data}
```

Der Rücknahme-Link schreibt die Punkte dem Konto wieder gut. Bieten Sie ihn an. Ein Käufer, der seine Punkte versehentlich auf eine kleine Bestellung gebucht hat und sie nicht zurückholen kann, bricht die Bestellung ab.

Referenz: [FORM-BonusPoints](https://dokumentation.websale.de/v8s/referenz/tags/form-formulare.md#bestellablauf) · [WS-BonusPoints\_Input](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md#die-tags-im-uberblick) · [WS-MaxRedeemableBonusPoints](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md#die-tags-im-uberblick) · [BASKET-BonusPointsAmount](https://dokumentation.websale.de/v8s/referenz/tags/basket/warenkorbsummen.md#abzuge) · [WS-DeleteCashedBonusPointsLink](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md#die-tags-im-uberblick)

## Schritt 6: Die Punkte beim Produkt anzeigen

Diese Tags gehören dorthin, wo der Käufer das Produkt sieht, also auf die Produktdetailansicht und auf die Warenkorbseite.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{PR-BonusPoints}
   <p>Sie erhalten ~PR-BonusPoints~ Bonuspunkte für dieses Produkt.</p>
{/PR-BonusPoints}

{PR-BonusProduct}
   <p>Dieses Produkt können Sie mit Bonuspunkten erwerben.</p>

   {PR-BonusProductPrice}
      <p>Dafür benötigen Sie ~PR-BonusProductPrice~ Punkte.</p>
   {/PR-BonusProductPrice}

   {WS-UserBonusPoints}
      {PR-NotEnoughBonusPointsLeft}
         <p>Ihnen fehlen noch ~PR-NotEnoughBonusPointsLeft~ Punkte.</p>
      {/PR-NotEnoughBonusPointsLeft}
   {/WS-UserBonusPoints}
{/PR-BonusProduct}
```

`PR-NotEnoughBonusPointsLeft` nennt die **fehlende Zahl**, nicht die benötigte. Das ist die freundlichere Auskunft: "Ihnen fehlen noch 40 Punkte" motiviert mehr als "Sie haben zu wenig Punkte".

Die Klammerung mit `{WS-UserBonusPoints}` verhindert, dass ein nicht angemeldeter Besucher eine Fehlmeldung über fehlende Punkte sieht.

Die Punktzahl beim Kauf gehört auch in die Produktliste, nicht nur auf die Detailseite. Sie ist ein Kaufargument und wirkt nur, wenn der Käufer sie beim Vergleichen sieht.

Referenz: [PR-BonusPoints](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md) · [PR-BonusProduct](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md) · [PR-BonusProductPrice](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md) · [PR-NotEnoughBonusPointsLeft](https://dokumentation.websale.de/v8s/referenz/tags/pr/grundlagen-und-produktdaten.md)

## Verwandte Themen

* Wegweiser: [Rabatte festlegen](https://dokumentation.websale.de/v8s/weitere-funktionen-im-bestellprozess-kontext/rabatte-festlegen.md)
* Wegweiser: Mindermengenzuschlag produktabhängig erheben


## Related topics

- [Warenkorb, Preise, Währung und Bonus](https://dokumentation.websale.de/v8s/referenz/tags/ws/warenkorb-preise-waehrung-und-bonus.md)
- [Eigenes Partnerprogramm betreiben](https://dokumentation.websale.de/v8s/marketing-funktionen/eigenes-partnerprogramm-betreiben.md)
- [Rabatte festlegen](https://dokumentation.websale.de/v8s/weitere-funktionen-im-bestellprozess-kontext/rabatte-festlegen.md)
- [Anbindung an externe Partnerprogramme](https://dokumentation.websale.de/v8s/marketing-funktionen/anbindung-an-externe-partnerprogramme.md)
- [Bestellungen und Provisionen](https://dokumentation.websale.de/v8s/referenz/tags/affiluser/bestellungen-und-provisionen.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.