> ## 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.

# PayPal PLUS

> Wie die Zahlungsart PayPal PLUS in WEBSALE V8s eingerichtet wurde und was beim Betrieb bestehender Anbindungen zu beachten ist.

> [!WARNING]
>
> **Dieses Bezahlverfahren nimmt keine Neukunden mehr auf.** PayPal entwickelt PayPal PLUS nicht mehr weiter und schaltet keine neuen Händler mehr frei. Für neue Anbindungen ist PayPal Checkout der Nachfolger, der neben PayPal, Lastschrift, Kreditkarte und Rechnungskauf zahlreiche weitere Zahlungsarten und die Option „Später bezahlen" mitbringt. Diese Seite beschreibt den Stand für bestehende Anbindungen.

Wegweiser: [PayPal Checkout](https://dokumentation.websale.de/v8s/zahlungsarten-anlegen/paypal-checkout.md)

PayPal PLUS bündelt drei Zahlungsmethoden hinter einem einzigen Eintrag in der Zahlungsartenliste: PayPal, Lastschrift und Kreditkarte. Der Käufer wählt im Shop nur „PayPal PLUS" und entscheidet sich erst bei PayPal für eine der drei Methoden. Ein PayPal-Konto braucht er dafür nicht.

Aus dieser Bündelung folgt die Besonderheit der Einrichtung: PayPal liefert die Auswahl der Methoden als eigenen Bereich in Ihre Seite hinein. Sie richten also nicht drei Zahlungsarten ein, sondern eine, und bauen an zwei Stellen im Bestellablauf den Platz für diesen Bereich.

## Wie der Bezahlvorgang abläuft

![20190918 Paypalplus](https://mintcdn.com/websaleag-44ee7ea6/LS0r3yDDNtTzNzIH/images/20190918_paypalplus.png?fit=max\&auto=format\&n=LS0r3yDDNtTzNzIH\&q=85\&s=fa3becb004b8b8b3ce72ddacc7a99072)

1. Der Käufer wählt auf der Zahlungs- und Versandartenseite `ws_pay_deliv.htm` den Eintrag PayPal PLUS. Darunter erscheint der von PayPal gelieferte Bereich mit den drei Methoden.
2. Er wählt dort eine Methode aus.
3. Nach dem Absenden der Bestellung wird er zu PayPal geleitet und gibt dort die zur Methode passenden Daten ein, bei der Lastschrift beispielsweise seine IBAN.
4. Er kehrt in den Shop zurück, und die Bestellung wird sofort ausgeführt.

PayPal PLUS unterliegt bewusst keiner Zahlungsartenfilterung durch den Shop. PayPal hat den Bereich als Auswahlwand konzipiert, die immer verfügbar sein soll. Rechnen Sie deshalb nicht damit, die Zahlungsart über die üblichen Filterparameter in jedem Fall ausblenden zu können.

## Voraussetzungen

Nötig ist ein Geschäftskonto bei PayPal. Dafür wenden Sie sich direkt an PayPal.

Die Zahlungsart selbst muss anschließend von WEBSALE freigeschaltet werden.

## Schritt 1: Konfiguration im Online-Servicebereich

Nach der Beauftragung steht Ihnen im Online-Servicebereich der Dienst „PayPal PLUS Manager" zur Verfügung. Dort verknüpfen Sie Ihr PayPal-Geschäftskonto mit WEBSALE und hinterlegen, wie Ihr Shop im PayPal-Bezahlvorgang erscheinen soll, also Logo und Firmenname.

Am Ende dieses Schritts haben Sie eine **ExperienceProfileID**. Sie brauchen sie gleich im nächsten Schritt.

## Schritt 2: Zahlungsart in der `shop.config` anlegen

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentPayPalPlus-Txt>
   Allow            = yes
   TestMode         = yes
   Name             = PayPal PLUS
   NameSuffix       = Schnell und sicher online bezahlen.
   Img              = logo-paypalplus.png
   RadioOnClick     = selectPayment('~ID~');
   ImgOnClick       = selectPaymentImage('~ID~');
   DelivererID-List = standard,express

   ExperienceProfileID               = XXXXXXXXXXXXX
   PassBasketToPayPal-DummyAddition  = Zusatzkosten
   PassBasketToPayPal-DummyReduction = abzüglich gewährter Rabatte
   PaypalDenyPendingPayments-Allow   = no
</PaymentPayPalPlus-Txt>
```

| Parameter | Bedeutung |
| - | - |
| `ExperienceProfileID` | die Kennung aus dem PayPal PLUS Manager. **Pflichtangabe** |
| `PassBasketToPayPal-DummyAddition` | Bezeichnung der Sammelposition für Zuschläge im an PayPal übergebenen Warenkorb |
| `PassBasketToPayPal-DummyReduction` | Bezeichnung der Sammelposition für Abschläge und Rabatte |
| `PaypalDenyPendingPayments-Allow` | `yes` lehnt Zahlungen ab, die PayPal nur schwebend bestätigt, und storniert sie. Voreinstellung ist `no` |

> [!WARNING]
>
> Fehlt die `ExperienceProfileID` oder ist sie leer, schaltet der Shop die Zahlungsart beim Einlesen der Konfiguration ab **und** verschickt eine Fehlermeldung an die Betriebsüberwachung. Das ist kein stiller Fehler, aber es fällt Ihnen im Shop nur dadurch auf, dass PayPal PLUS in der Zahlungsartenliste fehlt.

PayPal bekommt den Warenkorb positionsweise übergeben. Zu- und Abschläge, die keiner einzelnen Position zuzuordnen sind, lassen sich dort nicht als Korrektur abbilden und gehen deshalb als eigene Sammelposition mit. Die beiden `Dummy`-Parameter geben diesen Positionen ihren Namen.

Ist die Zahlungsart nicht durch WEBSALE freigeschaltet, schaltet der Shop sie von sich aus wieder ab, unabhängig davon, was in `Allow` steht.

Referenz: [Abschnitt PaymentPayPalPlus-Txt](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/zahlungsarten.md#paymentpaypalplus-txt) · [Abschnitt PaymentXXX-Txt](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/zahlungsarten.md)

## Schritt 3: Hinweismeldungen definieren

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<NotifyMessages-Txt>
   PayPalPlus-ClearingCancel = Sie haben den Bezahlvorgang mit PayPal PLUS abgebrochen.
   PayPalPlus-ClearingError  = Der Bezahlvorgang mit PayPal PLUS wurde abgelehnt oder abgebrochen.
</NotifyMessages-Txt>
```

Referenz: [Abschnitt NotifyMessages-Txt](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/texte-und-meldungen.md#notifymessages-txt)

## Schritt 4: Das Weiterleitungs-Template anlegen

Zwischen dem Absenden der Bestellung und dem Bezahlvorgang bei PayPal liegt eine eigene Seite, die den Käufer automatisch weiterleitet. Legen Sie sie in Ihrem Template-Verzeichnis an, beispielsweise als `ws_paypalplus_docheckout.htm`.

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

Die Seite enthält nur die beiden Skripte, die PayPal für die Weiterleitung braucht.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<script src="https://www.paypalobjects.com/webstatic/ppplus/ppplus.min.js" type="text/javascript"></script>
<script type="text/javascript">
   PAYPAL.apps.PPP.doCheckout();
</script>
```

Referenz: [Abschnitt Templates](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md#templates)

## Schritt 5: Zahlungs- und Versandartenseite ergänzen

Auf `ws_pay_deliv.htm` bindet PayPal den Bereich mit den drei Methoden unterhalb der Zahlungsartenliste ein. Fügen Sie den folgenden Block am Ende der Seite ein.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{PPP-ShowPayPalMethodsAtPayDeliv}
   <script src="https://www.paypalobjects.com/webstatic/ppplus/ppplus.min.js" type="text/javascript"></script>
   <script type="application/javascript">
      let ppPlusId = 31;
      let ppPlusElement = document.querySelector("#ws_paymentdiv_inputelement_" + ppPlusId);
      let ppFirstTime = true;

      var ppp = PAYPAL.apps.PPP({
         "approvalUrl": "~PPP-ApprovalURL~",
         "placeholder": "~PPP-PayPalMethodsDivContainerID~",
         "country": "~PPP-CountryCode~",
         "language": "de_DE",
         "useraction": "commit",
         "showPuiOnSandbox": "true",
         {!ST-Payment(31)}"preselection": "none",{/!ST-Payment(31)}
         "buttonLocation": "outside",
         "enableContinue": function() {
            if (ppPlusElement.attributes.checked == undefined) {
               if (ppFirstTime) {
                  ppp.deselectPaymentMethod();
                  ppFirstTime = false;
               } else {
                  ppPlusElement.click();
               }
            }
         },
         "disableContinue": function() {
         }
      });
   </script>
{/PPP-ShowPayPalMethodsAtPayDeliv}
```

| Tag | Liefert |
| - | - |
| `{PPP-ShowPayPalMethodsAtPayDeliv}` | Klammerung, greift nur wenn PayPal PLUS für diese Bestellung verfügbar ist |
| `~PPP-ApprovalURL~` | die Freigabe-URL von PayPal |
| `~PPP-PayPalMethodsDivContainerID~` | die Kennung des Bereichs, in den PayPal die Methodenauswahl lädt |
| `~PPP-CountryCode~` | der zweistellige Ländercode für die PayPal-Oberfläche |

> [!WARNING]
>
> `{PPP-ShowPayPalMethodsAtPayDeliv}` ist ausschließlich auf `ws_pay_deliv.htm` zulässig. Auf jeder anderen Seite liefert das Tag einen Fehler. Es löst außerdem die Zahlungsartenfilterung aus, falls sie noch nicht gelaufen ist.
>
> `~PPP-ApprovalURL~` ist kein reines Anzeigetag. Es löst die Summenberechnung aus und legt den Vorgang bei PayPal an. Setzen Sie es deshalb nur an der Stelle ein, an der der Bezahlvorgang tatsächlich vorbereitet werden soll, und nicht in einem Seitenbereich, der vorsorglich mitgerendert wird. Mehrfache Aufrufe innerhalb desselben Seitenaufrufs sind abgefangen.

Die `31` im Beispiel ist der Zahlungsart-Code von PayPal PLUS. Über ihn findet das Skript das zugehörige Auswahlfeld in der Zahlungsartenliste, und über `{!ST-Payment(31)}` erkennt es, ob PayPal PLUS gerade gewählt ist. Wenn nicht, wird die Vorauswahl der Methode unterdrückt.

Den Bereich selbst legt die Zahlungsartenliste an. Innerhalb der Schleife über die Zahlungsarten gibt `~PAY-Data_Special_PayPalMethodsDivContainerID~` dieselbe Kennung aus und vermerkt zugleich, dass der Bereich angezeigt wurde. Dieser Vermerk muss mindestens einmal gesetzt sein, bevor der Käufer zu PayPal geleitet wird.

Referenz: [PPP-ShowPayPalMethodsAtPayDeliv](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-tags-im-uberblick) · [PPP-ApprovalURL](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-angaben-fur-das-paypal-skript) · [PPP-PayPalMethodsDivContainerID](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-tags-im-uberblick) · [PPP-CountryCode](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-angaben-fur-das-paypal-skript)

## Schritt 6: Bestellübersichtsseite ergänzen

Bei der Schnellbestellung überspringt der Käufer die Zahlungs- und Versandartenseite. Damit er die Methodenauswahl trotzdem zu sehen bekommt, wird sie in diesem Fall auf der Bestellübersicht `ws_place_order.htm` aufgebaut. Setzen Sie den folgenden Block dorthin, wo die Auswahl erscheinen soll.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{PPP-ShowPayPalMethodsAtPlaceOrder}
   <script src="https://www.paypalobjects.com/webstatic/ppplus/ppplus.min.js" type="text/javascript"></script>
   <div id="~PPP-PayPalMethodsDivContainerID~"></div>
   <script type="application/javascript">
      var ppp = PAYPAL.apps.PPP({
         "approvalUrl": "~PPP-ApprovalURL~",
         "placeholder": "~PPP-PayPalMethodsDivContainerID~",
         "country": "~PPP-CountryCode~",
         "buttonLocation": "outside"
      });
   </script>
{/PPP-ShowPayPalMethodsAtPlaceOrder}
```

Die Klammerung greift nur, wenn PayPal PLUS die gewählte Zahlungsart ist und der Bereich in dieser Sitzung noch nicht angezeigt wurde. Sie können denselben Block deshalb mehrfach auf der Seite verwenden, er wird trotzdem nur einmal aufgebaut. Anders als auf der Zahlungs- und Versandartenseite erzeugen Sie den Bereich hier selbst, deshalb steht das `div` mit im Beispiel.

`{PPP-ShowPayPalMethodsAtPlaceOrder}` ist nur als einfache Klammerung verwendbar, nicht als negierte.

Referenz: [PPP-ShowPayPalMethodsAtPlaceOrder](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-tags-im-uberblick)

## Antwortdaten von PayPal weiterverarbeiten

Nach Abschluss der Zahlung stellt der Shop die vollständige Antwort von PayPal als JSON bereit. Sie können sie auf der Bestelleingangsbestätigung `ws_confirm.htm` in die JSON-Schnittstelle laden und auswerten.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
~EJD-SetRawDataHexCodedInput($PPP-ResponseJSONHexCoded$)~
~EJD-LoadData(intern,rawdatahexcodedinput,paypalplus)~
```

Wegweiser: [JSON-Schnittstelle](https://dokumentation.websale.de/v8s/externe-dienste/json-schnittstelle.md) · Referenz: [EJD-SetRawDataHexCodedInput](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md#die-tags-im-uberblick) · Referenz: [EJD-LoadData](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md#die-tags-im-uberblick)() · Referenz: [PPP-ResponseJSONHexCoded](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md#die-tags-im-uberblick)

### Bankverbindung beim Rechnungskauf anzeigen

> [!WARNING]
>
> Der Rechnungskauf steht seit Oktober 2022 nicht mehr über PayPal PLUS zur Verfügung, sondern über PayPal Checkout. Der folgende Abschnitt ist deshalb nur noch für die Auswertung alter Bestellungen von Belang.

Beim Rechnungskauf liefert PayPal die Bankverbindung mit, auf die der Käufer überweisen soll. Sie steht in der Antwort unter `payment_instruction`.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ST-Payment(31)}
   {PPP-ResponseJSONHexCoded}
      ~EJD-SetRawDataHexCodedInput($PPP-ResponseJSONHexCoded$)~
      ~EJD-LoadData(intern,rawdatahexcodedinput,paypalplus)~
      {EJD-DataOK(paypalplus)}
         ~EJD-SetUseID(paypalplus)~
         {EJD-DA-NameExists(payment_instruction.recipient_banking_instruction)}
            ~EJD-DA-TouchValue(payment_instruction.instruction_type)~
            ~DC-FPpp_set($EJD-LastValueAccessed$)~
            {DC-FPpp(PAY_UPON_INVOICE)}
               Zahlungsinformationen:
               Bitte überweisen Sie bis zum ~EJD-DA-Value(payment_instruction.payment_due_date)~ den Betrag von
               ~EJD-DA-Value(payment_instruction.amount.value)~ ~EJD-DA-Value(payment_instruction.amount.currency)~
               mit Verwendungszweck ~EJD-DA-Value(payment_instruction.reference_number)~ auf folgendes Konto:
               ~EJD-DA-Value(payment_instruction.recipient_banking_instruction.bank_name)~
               ~EJD-DA-Value(payment_instruction.recipient_banking_instruction.account_holder_name)~
               ~EJD-DA-Value(payment_instruction.recipient_banking_instruction.international_bank_account_number)~
               ~EJD-DA-Value(payment_instruction.recipient_banking_instruction.bank_identifier_code)~
            {/DC-FPpp(PAY_UPON_INVOICE)}
         {/EJD-DA-NameExists(payment_instruction.recipient_banking_instruction)}
      {/EJD-DataOK(paypalplus)}
   {/PPP-ResponseJSONHexCoded}
{/ST-Payment(31)}
```

Die Klammerung `{PPP-ResponseJSONHexCoded}` prüft, ob überhaupt eine Antwort vorliegt. Ohne sie laufen die `EJD`-Tags auf leeren Daten und geben nichts aus, was die Fehlersuche unnötig erschwert.

Referenz: [EJD-Tags](https://dokumentation.websale.de/v8s/referenz/tags/ejd.md)

## Testen

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.ihre-shop-url.de/?test=on&payment-test=on&paypalplusaccount-test=on
```

Mit `TestMode = yes` im Abschnitt `<PaymentPayPalPlus-Txt>` ist die Zahlungsart nur sichtbar, solange der Shop im Zahlungsarten-Testmodus läuft. Der Produktivbetrieb Ihres Shops bleibt davon unberührt.

Im Template lässt sich der Testbetrieb anzeigen:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{ST-PaymentTest}
   <p class="hinweis">Zahlungsarten-Testmodus aktiv</p>
{/ST-PaymentTest}
```

Zum Abschalten hängen Sie dieselben Parameter mit `off` an:

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.ihre-shop-url.de/?test=off&payment-test=off&paypalplusaccount-test=off
```

> [!WARNING]
>
> Das Umschalten eines Zahlungsart-Testmodus verwirft die laufende Sitzung und damit den Warenkorb. Schalten Sie den Testmodus deshalb vor dem Befüllen des Warenkorbs ein, nicht auf der Bestellübersicht.

Wegweiser: [Testmodi des Shops ein- und ausschalten](https://dokumentation.websale.de/v8s/domains/testmodi-des-shops-ein-ausschalten.md) · Referenz: [ST-PaymentTest](https://dokumentation.websale.de/v8s/referenz/tags/st/seitenzustand-und-navigation.md)

## Produktivbetrieb

Melden Sie WEBSALE, dass Sie auf den Produktivbetrieb umstellen wollen, und nehmen Sie die Umstellung erst nach der Freigabe vor. Teilen Sie dabei für jeden Subshop die im Online-Servicebereich angelegte Kennung mit.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<PaymentPayPalPlus-Txt>
   Allow    = yes
   TestMode = no
</PaymentPayPalPlus-Txt>
```

Die Migration der PayPal-Zugangsdaten begleitet die WEBSALE-Technik. Sprechen Sie den Termin vorher ab.

## Verwandte Themen

* Wegweiser: [PayPal Checkout, der Nachfolger für neue Anbindungen](https://dokumentation.websale.de/v8s/zahlungsarten-anlegen/paypal-checkout.md)
* Wegweiser: [Zahlungsarten anlegen, für die allgemeinen Parameter und die Ausgabe im Template](https://dokumentation.websale.de/v8s/zahlungsarten-anlegen/zahlungsarten-anlegen.md)
* Wegweiser: [Versandarten anlegen, für die Kopplung über `DelivererID-List`](https://dokumentation.websale.de/v8s/versandarten-anlegen/versandarten-anlegen)


## Related topics

- [PPP- (PayPal PLUS)](https://dokumentation.websale.de/v8s/referenz/tags/ppp-paypal-plus.md)
- [payment - Zahlungsmethoden](https://dokumentation.websale.de/konfiguration/payment-zahlungsmethoden.md)
- [Zahlungsarten](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/zahlungsarten.md)
- [Testmodi des Shops ein- und ausschalten](https://dokumentation.websale.de/v8s/domains/testmodi-des-shops-ein-ausschalten.md)
- [Zahlungsarten-Codes](https://dokumentation.websale.de/v8s/materialien/zahlungsarten-codes.md)


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