Compare commits

...

3 Commits

Author SHA1 Message Date
andrewrowanwallee 922f66e784 Release 7.2.0 2026-01-14 15:43:19 +01:00
andrewrowanwallee 089555e77f Release 7.1.6 2025-11-24 11:56:40 +01:00
andrewrowanwallee 55bdb5c640 Release 7.1.5 2025-11-11 13:52:29 +01:00
38 changed files with 1155 additions and 270 deletions
+17
View File
@@ -1,3 +1,20 @@
# 7.2.0
- Datenbanktabelle umbenannt, um Namenskonflikte mit älteren Plugins zu vermeiden.
- Problem mit fehlgeschlagenen Rückerstattungen bei Zahlungen mit Rechnungen behoben.
# 7.1.6
- Improved rounding handling to force 2 decimal places
- Removed references to unused classes
- Fixed some type errors
- Further improved 0 amount transaction; state transitions
# 7.1.5
- Improved analytics
- Improved error handling for refunding amount 0 and too many items
# 7.1.4
- Updated SDK to 4.8.1
# 7.1.3
- Fixed issue with radio button/switch settings not saving
- Fixed issue with error screen sporadically happening after failed payments
+17
View File
@@ -1,3 +1,20 @@
# 7.2.0
- Datenbanktabelle umbenannt, um Namenskonflikte mit älteren Plugins zu vermeiden.
- Problem mit fehlgeschlagenen Rückerstattungen bei Zahlungen mit Rechnungen behoben.
# 7.1.6
- Verbesserte Rundungsbehandlung für zwei Dezimalstellen
- Entfernte Verweise auf ungenutzte Klassen
- Behebung einiger Typfehler
- Weitere Verbesserung von Transaktionen mit dem Betrag 0 und Zustandsübergängen
# 7.1.5
- Verbesserte Analysefunktionen
- Verbesserte Fehlerbehandlung bei Rückerstattungen von 0 Beträgen und zu vielen Artikeln
# 7.1.4
- Aktualisiertes SDK - 4.8.1
# 7.1.3
Problem behoben, bei dem die Einstellungen von Optionsfeldern/Schaltern nicht gespeichert wurden.
Problem behoben, bei dem nach fehlgeschlagenen Zahlungen sporadisch ein Fehlerbildschirm angezeigt wurde.
+1 -1
View File
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2025 VR Payment GmbH
Copyright 2026 VR Payment GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
+21 -5
View File
@@ -13,10 +13,10 @@ Please note that this plugin is for versions 6.5, 6.6 or 6.7. For the 6.4 plugin
## Documentation
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.1.4/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.1.4/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.1.4/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.1.4/docs/it/documentation.html)
- For English documentation click [here](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.2.0/docs/en/documentation.html)
- Für die deutsche Dokumentation klicken Sie [hier](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.2.0/docs/de/documentation.html)
- Pour la documentation Française, cliquez [ici](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.2.0/docs/fr/documentation.html)
- Per la documentazione in tedesco, clicca [qui](https://docs.plugin-documentation.vr-payment.de/vr-payment/shopware-6/7.2.0/docs/it/documentation.html)
## Installation
@@ -42,6 +42,22 @@ bin/console plugin:refresh
bin/console plugin:install --activate --clearCache VRPayment
```
## Update
### Via Administration
1. Go to Shopware Admin > Extensions > My extensions.
2. Find VRPaymentPayment.
3. Click Update.
### Via CLI
1. Deploy the new plugin files (replace the folder in custom/plugins/VRPaymentPayment or upload/install a new ZIP).
2. Run:
```bash
bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear
```
## Configuration
### API Credentials
@@ -78,7 +94,7 @@ ________________________________________________________________________________
| Shopware 6 version | Plugin major version | Supported until |
|-------------------------------|------------------------|------------------------|
| Shopware 6.7.x | 7.x | Further notice |
| Shopware 6.6.x | 6.x | December 2025 |
| Shopware 6.6.x | 6.x | March 2026 |
| Shopware 6.5.x | 5.x | October 2024 |
-----------------------------------------------------------------------------------
+1 -1
View File
@@ -59,5 +59,5 @@
"vrpayment/sdk": "^4.0.0"
},
"type": "shopware-platform-plugin",
"version": "7.1.4"
"version": "7.2.0"
}
+115 -49
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.1.4/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.2.0/">
Source
</a>
</li>
@@ -197,10 +197,59 @@ php bin/console plugin:install --activate --clearCache VRPayment</code></pre>
</div>
</div> </div>
</div> </div>
</div> <div class="chapter" id="_update">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Update </h1>
</div>
<div class="chapter-body">
<div class="section" id="_via_administration">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Via Administration </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Gehe zu Shopware Admin &gt; Erweiterungen &gt; Meine Erweiterungen.</p>
</li>
<li>
<p>Suche nach VRPaymentPayment.</p>
</li>
<li>
<p>Klicke auf Aktualisieren.</p>
</li>
</ol>
</div> </div>
</div> <div class="section" id="_via_cli">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Via CLI </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Stelle die neuen Plugin-Dateien bereit (ersetze den Ordner <code>custom/plugins/VRPaymentPayment</code> oder lade ein neues ZIP hoch/installiere es).</p>
</li>
<li>
<p>Führe aus:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear</code></pre>
</div>
</div>
</li>
</ol>
</div> </div>
</div> </div>
</div> <div class="chapter" id="portal-startup-guide">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Portal-Startanleitung </h1>
<span class="title-number">6</span>Portal-Startanleitung </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -219,7 +268,7 @@ Wählen Sie das passende Abo aus es sollte E-Commerce-Transaktionen unterst
</div> <div class="section" id="_erstellen_sie_den_api_schlüssel">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Erstellen Sie den API-Schlüssel: </h2>
<span class="title-number">6.1</span>Erstellen Sie den API-Schlüssel: </h2>
</div>
<div class="section-body">
<div class="olist arabic">
@@ -305,7 +354,7 @@ Bitte beachten Sie, dass das Laden der Rollen einige Sekunden dauern kann.
</div> <div class="section" id="_zahlungsmethoden_einrichten">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Zahlungsmethoden einrichten </h2>
<span class="title-number">6.2</span>Zahlungsmethoden einrichten </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -367,7 +416,7 @@ Bitte beachten Sie, dass die Konnektoren doppelt erscheinen, da einer für Zahlu
</div> <div class="chapter" id="_shop_startanleitung">
<div class="chapter-title">
<h1>
<span class="title-number">6</span>Shop-Startanleitung </h1>
<span class="title-number">7</span>Shop-Startanleitung </h1>
</div>
<div class="chapter-body">
<div class="olist arabic">
@@ -506,7 +555,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="chapter" id="_transaktionszustandsdiagramm">
<div class="chapter-title">
<h1>
<span class="title-number">7</span>Transaktionszustandsdiagramm </h1>
<span class="title-number">8</span>Transaktionszustandsdiagramm </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -516,7 +565,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_zustandsabbildung_von_shopware_bestellungen">
<div class="section-title">
<h2>
<span class="title-number">7.1</span>Zustandsabbildung von Shopware-Bestellungen </h2>
<span class="title-number">8.1</span>Zustandsabbildung von Shopware-Bestellungen </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -524,7 +573,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_allgemeine_anmerkungen_zu_bestellstatus">
<div class="section-title">
<h3>
<span class="title-number">7.1.1</span>Allgemeine Anmerkungen zu Bestellstatus </h3>
<span class="title-number">8.1.1</span>Allgemeine Anmerkungen zu Bestellstatus </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -534,7 +583,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_zustandsabbildung_des_shopware_zahlungsstatus">
<div class="section-title">
<h2>
<span class="title-number">7.2</span>Zustandsabbildung des Shopware-Zahlungsstatus </h2>
<span class="title-number">8.2</span>Zustandsabbildung des Shopware-Zahlungsstatus </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -561,7 +610,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_allgemeine_anmerkungen_zu_zahlungsstatus">
<div class="section-title">
<h3>
<span class="title-number">7.2.1</span>Allgemeine Anmerkungen zu Zahlungsstatus </h3>
<span class="title-number">8.2.1</span>Allgemeine Anmerkungen zu Zahlungsstatus </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -571,7 +620,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_zustandsabbildung_des_shopware_lieferstatus">
<div class="section-title">
<h2>
<span class="title-number">7.3</span>Zustandsabbildung des Shopware-Lieferstatus </h2>
<span class="title-number">8.3</span>Zustandsabbildung des Shopware-Lieferstatus </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -597,7 +646,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="chapter" id="_transaktionsverwaltung">
<div class="chapter-title">
<h1>
<span class="title-number">8</span>Transaktionsverwaltung </h1>
<span class="title-number">9</span>Transaktionsverwaltung </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -605,7 +654,7 @@ Bitte beachten Sie, dass diese Option leer bleiben sollte, wenn Sie die Space Vi
</div> <div class="section" id="_bestellung_abschließen_erfassen">
<div class="section-title">
<h2>
<span class="title-number">8.1</span>Bestellung abschließen (erfassen) </h2>
<span class="title-number">9.1</span>Bestellung abschließen (erfassen) </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -633,7 +682,7 @@ Wenn der Abschluss in VR Payment ausstehend ist, bleibt die Bestellung im Status
</div> <div class="section" id="_transaktion_stornieren">
<div class="section-title">
<h2>
<span class="title-number">8.2</span>Transaktion stornieren </h2>
<span class="title-number">9.2</span>Transaktion stornieren </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -657,7 +706,7 @@ Sie können nur Transaktionen stornieren, die noch nicht abgeschlossen sind.
</div> <div class="section" id="_rückerstattung_einer_transaktion">
<div class="section-title">
<h2>
<span class="title-number">8.3</span>Rückerstattung einer Transaktion </h2>
<span class="title-number">9.3</span>Rückerstattung einer Transaktion </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -683,7 +732,7 @@ Es kann einige Zeit dauern, bis Sie die Rückerstattung in Shopware sehen. Rück
</div> <div class="section" id="_bestellungen_auf_on_hold">
<div class="section-title">
<h2>
<span class="title-number">8.4</span>Bestellungen auf On Hold </h2>
<span class="title-number">9.4</span>Bestellungen auf On Hold </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -705,7 +754,7 @@ Es kann einige Zeit dauern, bis Sie die Rückerstattung in Shopware sehen. Rück
</div> <div class="section" id="_einschränkungen_der_synchronisierung_zwischen_whitelabelname_und_shopware">
<div class="section-title">
<h2>
<span class="title-number">8.5</span>Einschränkungen der Synchronisierung zwischen VR Payment und Shopware </h2>
<span class="title-number">9.5</span>Einschränkungen der Synchronisierung zwischen VR Payment und Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -716,7 +765,7 @@ Es kann einige Zeit dauern, bis Sie die Rückerstattung in Shopware sehen. Rück
</div> <div class="section" id="_tokenisierung">
<div class="section-title">
<h2>
<span class="title-number">8.6</span>Tokenisierung </h2>
<span class="title-number">9.6</span>Tokenisierung </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -736,7 +785,7 @@ Die Tokenisierung ist für Gast-Checkouts nicht verfügbar
</div> <div class="section" id="_wiederkehrende_zahlungen">
<div class="section-title">
<h2>
<span class="title-number">8.7</span>Wiederkehrende Zahlungen </h2>
<span class="title-number">9.7</span>Wiederkehrende Zahlungen </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -746,7 +795,7 @@ Tokenisierung unterstützt, kann er für Abonnements verwendet werden. Die wiede
</div> <div class="section" id="_hauptfunktionen">
<div class="section-title">
<h2>
<span class="title-number">8.8</span>Hauptfunktionen </h2>
<span class="title-number">9.8</span>Hauptfunktionen </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -771,7 +820,7 @@ Tokenisierung unterstützt, kann er für Abonnements verwendet werden. Die wiede
</div> <div class="section" id="_fehlerbehebung">
<div class="section-title">
<h2>
<span class="title-number">8.9</span>Fehlerbehebung </h2>
<span class="title-number">9.9</span>Fehlerbehebung </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -803,7 +852,7 @@ tail -f var/log/whitelabelname*.log</code></pre>
</div> <div class="section" id="_faqs">
<div class="section-title">
<h2>
<span class="title-number">8.10</span>FAQs </h2>
<span class="title-number">9.10</span>FAQs </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -832,7 +881,7 @@ A: Ja, das Plugin unterstützt Wallets wie Apple Pay.</p>
</div> <div class="chapter" id="_änderungsprotokoll">
<div class="chapter-title">
<h1>
<span class="title-number">9</span>Änderungsprotokoll </h1>
<span class="title-number">10</span>Änderungsprotokoll </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -841,7 +890,7 @@ A: Ja, das Plugin unterstützt Wallets wie Apple Pay.</p>
</div> <div class="chapter" id="_mitwirken">
<div class="chapter-title">
<h1>
<span class="title-number">10</span>Mitwirken </h1>
<span class="title-number">11</span>Mitwirken </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -852,7 +901,7 @@ A: Ja, das Plugin unterstützt Wallets wie Apple Pay.</p>
</div> <div class="chapter" id="_support">
<div class="chapter-title">
<h1>
<span class="title-number">11</span>Support </h1>
<span class="title-number">12</span>Support </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -908,133 +957,150 @@ A: Ja, das Plugin unterstützt Wallets wie Apple Pay.</p>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<a href="#_update">
<span class="item-number">5</span>
<span class="item-title">Update</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_via_administration">
<span class="item-number">5.1</span>
<span class="item-title">Via Administration</span>
</a>
</li> <li class="nav-level-2">
<a href="#_via_cli">
<span class="item-number">5.2</span>
<span class="item-title">Via CLI</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<span class="item-number">6</span>
<span class="item-title">Portal-Startanleitung</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_erstellen_sie_den_api_schlüssel">
<span class="item-number">5.1</span>
<span class="item-number">6.1</span>
<span class="item-title">Erstellen Sie den API-Schlüssel:</span>
</a>
</li> <li class="nav-level-2">
<a href="#_zahlungsmethoden_einrichten">
<span class="item-number">5.2</span>
<span class="item-number">6.2</span>
<span class="item-title">Zahlungsmethoden einrichten</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_shop_startanleitung">
<span class="item-number">6</span>
<span class="item-number">7</span>
<span class="item-title">Shop-Startanleitung</span>
</a>
</li> <li class="nav-level-1">
<a href="#_transaktionszustandsdiagramm">
<span class="item-number">7</span>
<span class="item-number">8</span>
<span class="item-title">Transaktionszustandsdiagramm</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_zustandsabbildung_von_shopware_bestellungen">
<span class="item-number">7.1</span>
<span class="item-number">8.1</span>
<span class="item-title">Zustandsabbildung von Shopware-Bestellungen</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_allgemeine_anmerkungen_zu_bestellstatus">
<span class="item-number">7.1.1</span>
<span class="item-number">8.1.1</span>
<span class="item-title">Allgemeine Anmerkungen zu Bestellstatus</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_zustandsabbildung_des_shopware_zahlungsstatus">
<span class="item-number">7.2</span>
<span class="item-number">8.2</span>
<span class="item-title">Zustandsabbildung des Shopware-Zahlungsstatus</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_allgemeine_anmerkungen_zu_zahlungsstatus">
<span class="item-number">7.2.1</span>
<span class="item-number">8.2.1</span>
<span class="item-title">Allgemeine Anmerkungen zu Zahlungsstatus</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_zustandsabbildung_des_shopware_lieferstatus">
<span class="item-number">7.3</span>
<span class="item-number">8.3</span>
<span class="item-title">Zustandsabbildung des Shopware-Lieferstatus</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_transaktionsverwaltung">
<span class="item-number">8</span>
<span class="item-number">9</span>
<span class="item-title">Transaktionsverwaltung</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_bestellung_abschließen_erfassen">
<span class="item-number">8.1</span>
<span class="item-number">9.1</span>
<span class="item-title">Bestellung abschließen (erfassen)</span>
</a>
</li> <li class="nav-level-2">
<a href="#_transaktion_stornieren">
<span class="item-number">8.2</span>
<span class="item-number">9.2</span>
<span class="item-title">Transaktion stornieren</span>
</a>
</li> <li class="nav-level-2">
<a href="#_rückerstattung_einer_transaktion">
<span class="item-number">8.3</span>
<span class="item-number">9.3</span>
<span class="item-title">Rückerstattung einer Transaktion</span>
</a>
</li> <li class="nav-level-2">
<a href="#_bestellungen_auf_on_hold">
<span class="item-number">8.4</span>
<span class="item-number">9.4</span>
<span class="item-title">Bestellungen auf On Hold</span>
</a>
</li> <li class="nav-level-2">
<a href="#_einschränkungen_der_synchronisierung_zwischen_whitelabelname_und_shopware">
<span class="item-number">8.5</span>
<span class="item-number">9.5</span>
<span class="item-title">Einschränkungen der Synchronisierung zwischen VR Payment und Shopware</span>
</a>
</li> <li class="nav-level-2">
<a href="#_tokenisierung">
<span class="item-number">8.6</span>
<span class="item-number">9.6</span>
<span class="item-title">Tokenisierung</span>
</a>
</li> <li class="nav-level-2">
<a href="#_wiederkehrende_zahlungen">
<span class="item-number">8.7</span>
<span class="item-number">9.7</span>
<span class="item-title">Wiederkehrende Zahlungen</span>
</a>
</li> <li class="nav-level-2">
<a href="#_hauptfunktionen">
<span class="item-number">8.8</span>
<span class="item-number">9.8</span>
<span class="item-title">Hauptfunktionen</span>
</a>
</li> <li class="nav-level-2">
<a href="#_fehlerbehebung">
<span class="item-number">8.9</span>
<span class="item-number">9.9</span>
<span class="item-title">Fehlerbehebung</span>
</a>
</li> <li class="nav-level-2">
<a href="#_faqs">
<span class="item-number">8.10</span>
<span class="item-number">9.10</span>
<span class="item-title">FAQs</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_änderungsprotokoll">
<span class="item-number">9</span>
<span class="item-number">10</span>
<span class="item-title">Änderungsprotokoll</span>
</a>
</li> <li class="nav-level-1">
<a href="#_mitwirken">
<span class="item-number">10</span>
<span class="item-number">11</span>
<span class="item-title">Mitwirken</span>
</a>
</li> <li class="nav-level-1">
<a href="#_support">
<span class="item-number">11</span>
<span class="item-number">12</span>
<span class="item-title">Support</span>
</a>
</li> </ul>
+115 -49
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.1.4/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.2.0/">
Source
</a>
</li>
@@ -193,10 +193,59 @@ php bin/console plugin:install --activate --clearCache VRPayment</code></pre>
</div>
</div> </div>
</div> </div>
</div> <div class="chapter" id="_update">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Update </h1>
</div>
<div class="chapter-body">
<div class="section" id="_via_administration">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Via Administration </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Go to Shopware Admin &gt; Extensions &gt; My extensions.</p>
</li>
<li>
<p>Find VRPaymentPayment.</p>
</li>
<li>
<p>Click Update.</p>
</li>
</ol>
</div> </div>
</div> <div class="section" id="_via_cli">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Via CLI </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Deploy the new plugin files (replace the folder in <code>custom/plugins/VRPaymentPayment</code> or upload/install a new ZIP).</p>
</li>
<li>
<p>Run:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear</code></pre>
</div>
</div>
</li>
</ol>
</div> </div>
</div> </div>
</div> <div class="chapter" id="portal-startup-guide">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Portal Startup Guide </h1>
<span class="title-number">6</span>Portal Startup Guide </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -215,7 +264,7 @@ Please select the proper subscription plan - it should support ecommerce transac
</div> <div class="section" id="_create_the_api_key">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Create the API key: </h2>
<span class="title-number">6.1</span>Create the API key: </h2>
</div>
<div class="section-body">
<div class="olist arabic">
@@ -301,7 +350,7 @@ Please note that Roles might be loading for few seconds
</div> <div class="section" id="_setup_payment_methods">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Setup Payment Methods </h2>
<span class="title-number">6.2</span>Setup Payment Methods </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -363,7 +412,7 @@ Please note that the connectors seems duplicated but it because one is for Physi
</div> <div class="chapter" id="_shop_startup_guide">
<div class="chapter-title">
<h1>
<span class="title-number">6</span>Shop Startup Guide </h1>
<span class="title-number">7</span>Shop Startup Guide </h1>
</div>
<div class="chapter-body">
<div class="olist arabic">
@@ -502,7 +551,7 @@ Please note that if you do not use the Space View Id; this option should stay em
</div> <div class="chapter" id="_transaction_state_graph">
<div class="chapter-title">
<h1>
<span class="title-number">7</span>Transaction State graph </h1>
<span class="title-number">8</span>Transaction State graph </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -514,7 +563,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="section" id="_state_mapping_of_shopware_orders">
<div class="section-title">
<h2>
<span class="title-number">7.1</span>State mapping of Shopware orders </h2>
<span class="title-number">8.1</span>State mapping of Shopware orders </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -522,7 +571,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="section" id="_general_remarks_regarding_order_statuses">
<div class="section-title">
<h3>
<span class="title-number">7.1.1</span>General remarks regarding order statuses </h3>
<span class="title-number">8.1.1</span>General remarks regarding order statuses </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -532,7 +581,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="section" id="_state_mapping_of_shopware_payment_status">
<div class="section-title">
<h2>
<span class="title-number">7.2</span>State mapping of Shopware payment status </h2>
<span class="title-number">8.2</span>State mapping of Shopware payment status </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -559,7 +608,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="section" id="_general_remarks_regarding_payment_statuses">
<div class="section-title">
<h3>
<span class="title-number">7.2.1</span>General remarks regarding payment statuses </h3>
<span class="title-number">8.2.1</span>General remarks regarding payment statuses </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -569,7 +618,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="section" id="_state_mapping_of_shopware_delivery_status">
<div class="section-title">
<h2>
<span class="title-number">7.3</span>State mapping of Shopware delivery status </h2>
<span class="title-number">8.3</span>State mapping of Shopware delivery status </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -595,7 +644,7 @@ can be found in the <a href="https://gateway.vr-payment.de/en-us/doc/payment/tra
</div> <div class="chapter" id="_transaction_management">
<div class="chapter-title">
<h1>
<span class="title-number">8</span>Transaction management </h1>
<span class="title-number">9</span>Transaction management </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -605,7 +654,7 @@ Shopware. However, there are some limitations (see below).</p>
</div> <div class="section" id="_complete_capture_an_order">
<div class="section-title">
<h2>
<span class="title-number">8.1</span>Complete (capture) an order </h2>
<span class="title-number">9.1</span>Complete (capture) an order </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -639,7 +688,7 @@ the fulfill state is reached. Initially the transaction will be in the <code>Aut
</div> <div class="section" id="_void_a_transaction">
<div class="section-title">
<h2>
<span class="title-number">8.2</span>Void a transaction </h2>
<span class="title-number">9.2</span>Void a transaction </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -663,7 +712,7 @@ You can only void transactions that are not yet completed.
</div> <div class="section" id="_refund_of_a_transaction">
<div class="section-title">
<h2>
<span class="title-number">8.3</span>Refund of a transaction </h2>
<span class="title-number">9.3</span>Refund of a transaction </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -690,7 +739,7 @@ It can take some time until you see the refund in Shopware. Refunds will only be
</div> <div class="section" id="_on_hold_orders">
<div class="section-title">
<h2>
<span class="title-number">8.4</span>On hold orders </h2>
<span class="title-number">9.4</span>On hold orders </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -714,7 +763,7 @@ within the defined time frame, VR Payment will generate a manual task which you
</div> <div class="section" id="_limitations_of_the_synchronization_between_whitelabelname_and_shopware">
<div class="section-title">
<h2>
<span class="title-number">8.5</span>Limitations of the synchronization between VR Payment and Shopware </h2>
<span class="title-number">9.5</span>Limitations of the synchronization between VR Payment and Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -730,7 +779,7 @@ your Shopware backend.</p>
</div> <div class="section" id="_tokenization">
<div class="section-title">
<h2>
<span class="title-number">8.6</span>Tokenization </h2>
<span class="title-number">9.6</span>Tokenization </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -751,7 +800,7 @@ Tokenization is not available for guest checkouts.
</div> <div class="section" id="_recurring_payments">
<div class="section-title">
<h2>
<span class="title-number">8.7</span>Recurring payments </h2>
<span class="title-number">9.7</span>Recurring payments </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -761,7 +810,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="section" id="_key_features">
<div class="section-title">
<h2>
<span class="title-number">8.8</span>Key Features </h2>
<span class="title-number">9.8</span>Key Features </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -786,7 +835,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="section" id="_troubleshooting">
<div class="section-title">
<h2>
<span class="title-number">8.9</span>Troubleshooting </h2>
<span class="title-number">9.9</span>Troubleshooting </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -817,7 +866,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="section" id="_faqs">
<div class="section-title">
<h2>
<span class="title-number">8.10</span>FAQs </h2>
<span class="title-number">9.10</span>FAQs </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -849,7 +898,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="chapter" id="_changelog">
<div class="chapter-title">
<h1>
<span class="title-number">9</span>Changelog </h1>
<span class="title-number">10</span>Changelog </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -858,7 +907,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="chapter" id="_contributing">
<div class="chapter-title">
<h1>
<span class="title-number">10</span>Contributing </h1>
<span class="title-number">11</span>Contributing </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -869,7 +918,7 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</div> <div class="chapter" id="_support">
<div class="chapter-title">
<h1>
<span class="title-number">11</span>Support </h1>
<span class="title-number">12</span>Support </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -925,133 +974,150 @@ tokenization, it can be used for subscriptions. The recurring payment is fully m
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<a href="#_update">
<span class="item-number">5</span>
<span class="item-title">Update</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_via_administration">
<span class="item-number">5.1</span>
<span class="item-title">Via Administration</span>
</a>
</li> <li class="nav-level-2">
<a href="#_via_cli">
<span class="item-number">5.2</span>
<span class="item-title">Via CLI</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<span class="item-number">6</span>
<span class="item-title">Portal Startup Guide</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_create_the_api_key">
<span class="item-number">5.1</span>
<span class="item-number">6.1</span>
<span class="item-title">Create the API key:</span>
</a>
</li> <li class="nav-level-2">
<a href="#_setup_payment_methods">
<span class="item-number">5.2</span>
<span class="item-number">6.2</span>
<span class="item-title">Setup Payment Methods</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_shop_startup_guide">
<span class="item-number">6</span>
<span class="item-number">7</span>
<span class="item-title">Shop Startup Guide</span>
</a>
</li> <li class="nav-level-1">
<a href="#_transaction_state_graph">
<span class="item-number">7</span>
<span class="item-number">8</span>
<span class="item-title">Transaction State graph</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_state_mapping_of_shopware_orders">
<span class="item-number">7.1</span>
<span class="item-number">8.1</span>
<span class="item-title">State mapping of Shopware orders</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_general_remarks_regarding_order_statuses">
<span class="item-number">7.1.1</span>
<span class="item-number">8.1.1</span>
<span class="item-title">General remarks regarding order statuses</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_state_mapping_of_shopware_payment_status">
<span class="item-number">7.2</span>
<span class="item-number">8.2</span>
<span class="item-title">State mapping of Shopware payment status</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_general_remarks_regarding_payment_statuses">
<span class="item-number">7.2.1</span>
<span class="item-number">8.2.1</span>
<span class="item-title">General remarks regarding payment statuses</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_state_mapping_of_shopware_delivery_status">
<span class="item-number">7.3</span>
<span class="item-number">8.3</span>
<span class="item-title">State mapping of Shopware delivery status</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_transaction_management">
<span class="item-number">8</span>
<span class="item-number">9</span>
<span class="item-title">Transaction management</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_complete_capture_an_order">
<span class="item-number">8.1</span>
<span class="item-number">9.1</span>
<span class="item-title">Complete (capture) an order</span>
</a>
</li> <li class="nav-level-2">
<a href="#_void_a_transaction">
<span class="item-number">8.2</span>
<span class="item-number">9.2</span>
<span class="item-title">Void a transaction</span>
</a>
</li> <li class="nav-level-2">
<a href="#_refund_of_a_transaction">
<span class="item-number">8.3</span>
<span class="item-number">9.3</span>
<span class="item-title">Refund of a transaction</span>
</a>
</li> <li class="nav-level-2">
<a href="#_on_hold_orders">
<span class="item-number">8.4</span>
<span class="item-number">9.4</span>
<span class="item-title">On hold orders</span>
</a>
</li> <li class="nav-level-2">
<a href="#_limitations_of_the_synchronization_between_whitelabelname_and_shopware">
<span class="item-number">8.5</span>
<span class="item-number">9.5</span>
<span class="item-title">Limitations of the synchronization between VR Payment and Shopware</span>
</a>
</li> <li class="nav-level-2">
<a href="#_tokenization">
<span class="item-number">8.6</span>
<span class="item-number">9.6</span>
<span class="item-title">Tokenization</span>
</a>
</li> <li class="nav-level-2">
<a href="#_recurring_payments">
<span class="item-number">8.7</span>
<span class="item-number">9.7</span>
<span class="item-title">Recurring payments</span>
</a>
</li> <li class="nav-level-2">
<a href="#_key_features">
<span class="item-number">8.8</span>
<span class="item-number">9.8</span>
<span class="item-title">Key Features</span>
</a>
</li> <li class="nav-level-2">
<a href="#_troubleshooting">
<span class="item-number">8.9</span>
<span class="item-number">9.9</span>
<span class="item-title">Troubleshooting</span>
</a>
</li> <li class="nav-level-2">
<a href="#_faqs">
<span class="item-number">8.10</span>
<span class="item-number">9.10</span>
<span class="item-title">FAQs</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_changelog">
<span class="item-number">9</span>
<span class="item-number">10</span>
<span class="item-title">Changelog</span>
</a>
</li> <li class="nav-level-1">
<a href="#_contributing">
<span class="item-number">10</span>
<span class="item-number">11</span>
<span class="item-title">Contributing</span>
</a>
</li> <li class="nav-level-1">
<a href="#_support">
<span class="item-number">11</span>
<span class="item-number">12</span>
<span class="item-title">Support</span>
</a>
</li> </ul>
+115 -49
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.1.4/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.2.0/">
Source
</a>
</li>
@@ -184,10 +184,59 @@ php bin/console plugin:install --activate --clearCache VRPayment</code></pre>
</div>
</div> </div>
</div> </div>
</div> <div class="chapter" id="_mise_à_jour">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Mise à jour </h1>
</div>
<div class="chapter-body">
<div class="section" id="_via_l_administration">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Via ladministration </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Allez dans Shopware Admin &gt; Extensions &gt; Mes extensions.</p>
</li>
<li>
<p>Recherchez VRPaymentPayment.</p>
</li>
<li>
<p>Cliquez sur Mettre à jour.</p>
</li>
</ol>
</div> </div>
</div> <div class="section" id="_via_la_cli">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Via la CLI </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Déployez les nouveaux fichiers du plugin (remplacez le dossier <code>custom/plugins/VRPaymentPayment</code> ou téléversez/installez un nouveau ZIP).</p>
</li>
<li>
<p>Exécutez :</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear</code></pre>
</div>
</div>
</li>
</ol>
</div> </div>
</div> </div>
</div> <div class="chapter" id="portal-startup-guide">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Guide de démarrage pour le Portail </h1>
<span class="title-number">6</span>Guide de démarrage pour le Portail </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -206,7 +255,7 @@ Veuillez sélectionner le plan d&#8217;abonnement approprié - il doit prendre e
</div> <div class="section" id="_créez_la_clé_api">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Créez la clé API: </h2>
<span class="title-number">6.1</span>Créez la clé API: </h2>
</div>
<div class="section-body">
<div class="olist arabic">
@@ -292,7 +341,7 @@ Veuillez noter que le chargement des rôles peut durer quelques secondes.
</div> <div class="section" id="_configurer_les_modes_de_paiement">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Configurer les modes de paiement </h2>
<span class="title-number">6.2</span>Configurer les modes de paiement </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -354,7 +403,7 @@ Veuillez noter que les connecteurs semblent faire double emploi, mais c&#8217;es
</div> <div class="chapter" id="_guide_de_démarrage_pour_shopware">
<div class="chapter-title">
<h1>
<span class="title-number">6</span>Guide de démarrage pour Shopware </h1>
<span class="title-number">7</span>Guide de démarrage pour Shopware </h1>
</div>
<div class="chapter-body">
<div class="olist arabic">
@@ -493,7 +542,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="chapter" id="_différents_etats_pour_une_transaction">
<div class="chapter-title">
<h1>
<span class="title-number">7</span>Différents Etats pour une Transaction </h1>
<span class="title-number">8</span>Différents Etats pour une Transaction </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -503,7 +552,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_cartographie_des_différents_états_d_une_commande_de_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.1</span>Cartographie des différents états dune commande de Shopware </h2>
<span class="title-number">8.1</span>Cartographie des différents états dune commande de Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -511,7 +560,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_remarque_générales_concernant_les_status_des_commandes">
<div class="section-title">
<h3>
<span class="title-number">7.1.1</span>Remarque générales concernant les status des commandes </h3>
<span class="title-number">8.1.1</span>Remarque générales concernant les status des commandes </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -521,7 +570,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_cartographie_des_différents_états_du_paiement_de_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.2</span>Cartographie des différents états du paiement de Shopware </h2>
<span class="title-number">8.2</span>Cartographie des différents états du paiement de Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -548,7 +597,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_remarques_générales_concernant_les_différents_status_pour_les_paiements">
<div class="section-title">
<h3>
<span class="title-number">7.2.1</span>Remarques générales concernant les différents status pour les paiements </h3>
<span class="title-number">8.2.1</span>Remarques générales concernant les différents status pour les paiements </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -558,7 +607,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_carthographie_des_différents_états_de_livraison_chez_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.3</span>Carthographie des différents états de livraison chez Shopware </h2>
<span class="title-number">8.3</span>Carthographie des différents états de livraison chez Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -584,7 +633,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="chapter" id="_gestion_des_transactions">
<div class="chapter-title">
<h1>
<span class="title-number">8</span>Gestion des Transactions </h1>
<span class="title-number">9</span>Gestion des Transactions </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -592,7 +641,7 @@ Veuillez noter que si vous n&#8217;utilisez pas Space View Id, cette option doit
</div> <div class="section" id="_complete_capture_an_order">
<div class="section-title">
<h2>
<span class="title-number">8.1</span>Complete (capture) an order </h2>
<span class="title-number">9.1</span>Complete (capture) an order </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -624,7 +673,7 @@ Lorsque le paiement est en attente dans VR Payment, la commande reste en attente
</div> <div class="section" id="_annuler_une_transaction">
<div class="section-title">
<h2>
<span class="title-number">8.2</span>Annuler une transaction </h2>
<span class="title-number">9.2</span>Annuler une transaction </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -648,7 +697,7 @@ Vous ne pouvez annuler que les transactions qui ne sont pas encore complétée..
</div> <div class="section" id="_remboursement_d_une_transaction">
<div class="section-title">
<h2>
<span class="title-number">8.3</span>Remboursement d&#8217;une transaction </h2>
<span class="title-number">9.3</span>Remboursement d&#8217;une transaction </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -674,7 +723,7 @@ Il peut s&#8217;écouler un certain temps avant que vous ne voyiez le remboursem
</div> <div class="section" id="_commandes_en_attente">
<div class="section-title">
<h2>
<span class="title-number">8.4</span>Commandes en attente </h2>
<span class="title-number">9.4</span>Commandes en attente </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -696,7 +745,7 @@ Il peut s&#8217;écouler un certain temps avant que vous ne voyiez le remboursem
</div> <div class="section" id="_limites_de_la_synchronisation_entre_whitelabelname_et_shopware">
<div class="section-title">
<h2>
<span class="title-number">8.5</span>Limites de la synchronisation entre VR Payment et Shopware </h2>
<span class="title-number">9.5</span>Limites de la synchronisation entre VR Payment et Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -707,7 +756,7 @@ Il peut s&#8217;écouler un certain temps avant que vous ne voyiez le remboursem
</div> <div class="section" id="_tokenisation">
<div class="section-title">
<h2>
<span class="title-number">8.6</span>Tokenisation </h2>
<span class="title-number">9.6</span>Tokenisation </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -727,7 +776,7 @@ La tokenisation n&#8217;est pas disponible pour les paiements par les invités.
</div> <div class="section" id="_paiements_récurrents">
<div class="section-title">
<h2>
<span class="title-number">8.7</span>Paiements récurrents </h2>
<span class="title-number">9.7</span>Paiements récurrents </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -736,7 +785,7 @@ La tokenisation n&#8217;est pas disponible pour les paiements par les invités.
</div> <div class="section" id="_caractéristiques_pricinpales">
<div class="section-title">
<h2>
<span class="title-number">8.8</span>Caractéristiques Pricinpales </h2>
<span class="title-number">9.8</span>Caractéristiques Pricinpales </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -761,7 +810,7 @@ La tokenisation n&#8217;est pas disponible pour les paiements par les invités.
</div> <div class="section" id="_troubleshooting">
<div class="section-title">
<h2>
<span class="title-number">8.9</span>Troubleshooting </h2>
<span class="title-number">9.9</span>Troubleshooting </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -792,7 +841,7 @@ La tokenisation n&#8217;est pas disponible pour les paiements par les invités.
</div> <div class="section" id="_faqs">
<div class="section-title">
<h2>
<span class="title-number">8.10</span>FAQs </h2>
<span class="title-number">9.10</span>FAQs </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -820,7 +869,7 @@ A: Oui, le plugin prend en charge les portefeuilles comme Apple Pay.</p>
</div> <div class="chapter" id="_changelog">
<div class="chapter-title">
<h1>
<span class="title-number">9</span>Changelog </h1>
<span class="title-number">10</span>Changelog </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -829,7 +878,7 @@ A: Oui, le plugin prend en charge les portefeuilles comme Apple Pay.</p>
</div> <div class="chapter" id="_contribuer">
<div class="chapter-title">
<h1>
<span class="title-number">10</span>Contribuer </h1>
<span class="title-number">11</span>Contribuer </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -840,7 +889,7 @@ A: Oui, le plugin prend en charge les portefeuilles comme Apple Pay.</p>
</div> <div class="chapter" id="_support">
<div class="chapter-title">
<h1>
<span class="title-number">11</span>Support </h1>
<span class="title-number">12</span>Support </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -896,133 +945,150 @@ A: Oui, le plugin prend en charge les portefeuilles comme Apple Pay.</p>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<a href="#_mise_à_jour">
<span class="item-number">5</span>
<span class="item-title">Mise à jour</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_via_l_administration">
<span class="item-number">5.1</span>
<span class="item-title">Via ladministration</span>
</a>
</li> <li class="nav-level-2">
<a href="#_via_la_cli">
<span class="item-number">5.2</span>
<span class="item-title">Via la CLI</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<span class="item-number">6</span>
<span class="item-title">Guide de démarrage pour le Portail</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_créez_la_clé_api">
<span class="item-number">5.1</span>
<span class="item-number">6.1</span>
<span class="item-title">Créez la clé API:</span>
</a>
</li> <li class="nav-level-2">
<a href="#_configurer_les_modes_de_paiement">
<span class="item-number">5.2</span>
<span class="item-number">6.2</span>
<span class="item-title">Configurer les modes de paiement</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_guide_de_démarrage_pour_shopware">
<span class="item-number">6</span>
<span class="item-number">7</span>
<span class="item-title">Guide de démarrage pour Shopware</span>
</a>
</li> <li class="nav-level-1">
<a href="#_différents_etats_pour_une_transaction">
<span class="item-number">7</span>
<span class="item-number">8</span>
<span class="item-title">Différents Etats pour une Transaction</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_cartographie_des_différents_états_d_une_commande_de_shopware">
<span class="item-number">7.1</span>
<span class="item-number">8.1</span>
<span class="item-title">Cartographie des différents états dune commande de Shopware</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_remarque_générales_concernant_les_status_des_commandes">
<span class="item-number">7.1.1</span>
<span class="item-number">8.1.1</span>
<span class="item-title">Remarque générales concernant les status des commandes</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_cartographie_des_différents_états_du_paiement_de_shopware">
<span class="item-number">7.2</span>
<span class="item-number">8.2</span>
<span class="item-title">Cartographie des différents états du paiement de Shopware</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_remarques_générales_concernant_les_différents_status_pour_les_paiements">
<span class="item-number">7.2.1</span>
<span class="item-number">8.2.1</span>
<span class="item-title">Remarques générales concernant les différents status pour les paiements</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_carthographie_des_différents_états_de_livraison_chez_shopware">
<span class="item-number">7.3</span>
<span class="item-number">8.3</span>
<span class="item-title">Carthographie des différents états de livraison chez Shopware</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_gestion_des_transactions">
<span class="item-number">8</span>
<span class="item-number">9</span>
<span class="item-title">Gestion des Transactions</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_complete_capture_an_order">
<span class="item-number">8.1</span>
<span class="item-number">9.1</span>
<span class="item-title">Complete (capture) an order</span>
</a>
</li> <li class="nav-level-2">
<a href="#_annuler_une_transaction">
<span class="item-number">8.2</span>
<span class="item-number">9.2</span>
<span class="item-title">Annuler une transaction</span>
</a>
</li> <li class="nav-level-2">
<a href="#_remboursement_d_une_transaction">
<span class="item-number">8.3</span>
<span class="item-number">9.3</span>
<span class="item-title">Remboursement d&amp;#8217;une transaction</span>
</a>
</li> <li class="nav-level-2">
<a href="#_commandes_en_attente">
<span class="item-number">8.4</span>
<span class="item-number">9.4</span>
<span class="item-title">Commandes en attente</span>
</a>
</li> <li class="nav-level-2">
<a href="#_limites_de_la_synchronisation_entre_whitelabelname_et_shopware">
<span class="item-number">8.5</span>
<span class="item-number">9.5</span>
<span class="item-title">Limites de la synchronisation entre VR Payment et Shopware</span>
</a>
</li> <li class="nav-level-2">
<a href="#_tokenisation">
<span class="item-number">8.6</span>
<span class="item-number">9.6</span>
<span class="item-title">Tokenisation</span>
</a>
</li> <li class="nav-level-2">
<a href="#_paiements_récurrents">
<span class="item-number">8.7</span>
<span class="item-number">9.7</span>
<span class="item-title">Paiements récurrents</span>
</a>
</li> <li class="nav-level-2">
<a href="#_caractéristiques_pricinpales">
<span class="item-number">8.8</span>
<span class="item-number">9.8</span>
<span class="item-title">Caractéristiques Pricinpales</span>
</a>
</li> <li class="nav-level-2">
<a href="#_troubleshooting">
<span class="item-number">8.9</span>
<span class="item-number">9.9</span>
<span class="item-title">Troubleshooting</span>
</a>
</li> <li class="nav-level-2">
<a href="#_faqs">
<span class="item-number">8.10</span>
<span class="item-number">9.10</span>
<span class="item-title">FAQs</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_changelog">
<span class="item-number">9</span>
<span class="item-number">10</span>
<span class="item-title">Changelog</span>
</a>
</li> <li class="nav-level-1">
<a href="#_contribuer">
<span class="item-number">10</span>
<span class="item-number">11</span>
<span class="item-title">Contribuer</span>
</a>
</li> <li class="nav-level-1">
<a href="#_support">
<span class="item-number">11</span>
<span class="item-number">12</span>
<span class="item-title">Support</span>
</a>
</li> </ul>
+115 -49
View File
@@ -23,7 +23,7 @@
</a>
</li>
<li>
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.1.4/">
<a href="https://github.com/vr-payment/shopware-6/releases/tag/7.2.0/">
Source
</a>
</li>
@@ -191,10 +191,59 @@ php bin/console plugin:install --activate --clearCache VRPayment</code></pre>
</div>
</div> </div>
</div> </div>
</div> <div class="chapter" id="_aggiornamento">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Aggiornamento </h1>
</div>
<div class="chapter-body">
<div class="section" id="_tramite_amministrazione">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Tramite Amministrazione </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Vai su Shopware Admin &gt; Estensioni &gt; Le mie estensioni.</p>
</li>
<li>
<p>Trova VRPaymentPayment.</p>
</li>
<li>
<p>Clicca su Aggiorna.</p>
</li>
</ol>
</div> </div>
</div> <div class="section" id="_tramite_cli">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Tramite CLI </h2>
</div>
<div class="section-body">
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Distribuisci i nuovi file del plugin (sostituisci la cartella <code>custom/plugins/VRPaymentPayment</code> oppure carica/installa un nuovo ZIP).</p>
</li>
<li>
<p>Esegui:</p>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-bash" data-lang="bash">bin/console plugin:refresh
bin/console plugin:update --clearCache VRPaymentPayment
bin/console cache:clear</code></pre>
</div>
</div>
</li>
</ol>
</div> </div>
</div> </div>
</div> <div class="chapter" id="portal-startup-guide">
<div class="chapter-title">
<h1>
<span class="title-number">5</span>Guida Rapida al Portale </h1>
<span class="title-number">6</span>Guida Rapida al Portale </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -213,7 +262,7 @@ Selezionate il piano di abbonamento appropriato: dovrebbe supportare le transazi
</div> <div class="section" id="_create_la_chiave_api">
<div class="section-title">
<h2>
<span class="title-number">5.1</span>Create la chiave API: </h2>
<span class="title-number">6.1</span>Create la chiave API: </h2>
</div>
<div class="section-body">
<div class="olist arabic">
@@ -299,7 +348,7 @@ Si prega di notare che il caricamento dei ruoli potrebbe richiedere alcuni secon
</div> <div class="section" id="_configurate_i_metodi_di_pagamento">
<div class="section-title">
<h2>
<span class="title-number">5.2</span>Configurate i Metodi di Pagamento </h2>
<span class="title-number">6.2</span>Configurate i Metodi di Pagamento </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -361,7 +410,7 @@ Si prega di notare che i connettori sembrano duplicati, ma è perché uno è per
</div> <div class="chapter" id="_guida_rapida_al_shop">
<div class="chapter-title">
<h1>
<span class="title-number">6</span>Guida Rapida al Shop </h1>
<span class="title-number">7</span>Guida Rapida al Shop </h1>
</div>
<div class="chapter-body">
<div class="olist arabic">
@@ -500,7 +549,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="chapter" id="_grafico_dello_stato_della_transazione">
<div class="chapter-title">
<h1>
<span class="title-number">7</span>Grafico dello Stato della Transazione </h1>
<span class="title-number">8</span>Grafico dello Stato della Transazione </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -510,7 +559,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_mappatura_degli_stati_degli_ordini_di_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.1</span>Mappatura degli Stati degli Ordini di Shopware </h2>
<span class="title-number">8.1</span>Mappatura degli Stati degli Ordini di Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -518,7 +567,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_osservazioni_generali_riguardo_agli_stati_degli_ordini">
<div class="section-title">
<h3>
<span class="title-number">7.1.1</span>Osservazioni Generali Riguardo agli Stati degli Ordini </h3>
<span class="title-number">8.1.1</span>Osservazioni Generali Riguardo agli Stati degli Ordini </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -528,7 +577,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_mappatura_dello_stato_di_pagamento_di_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.2</span>Mappatura dello Stato di Pagamento di Shopware </h2>
<span class="title-number">8.2</span>Mappatura dello Stato di Pagamento di Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -555,7 +604,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_osservazioni_generali_riguardo_agli_stati_di_pagamento">
<div class="section-title">
<h3>
<span class="title-number">7.2.1</span>Osservazioni Generali Riguardo agli Stati di Pagamento </h3>
<span class="title-number">8.2.1</span>Osservazioni Generali Riguardo agli Stati di Pagamento </h3>
</div>
<div class="section-body">
<div class="paragraph">
@@ -565,7 +614,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_mappatura_dello_stato_di_spedizione_di_shopware">
<div class="section-title">
<h2>
<span class="title-number">7.3</span>Mappatura dello Stato di Spedizione di Shopware </h2>
<span class="title-number">8.3</span>Mappatura dello Stato di Spedizione di Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -591,7 +640,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="chapter" id="_gestione_delle_transazioni">
<div class="chapter-title">
<h1>
<span class="title-number">8</span>Gestione delle Transazioni </h1>
<span class="title-number">9</span>Gestione delle Transazioni </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -599,7 +648,7 @@ Si prega di notare che se non utilizzate lo Space View Id, questa opzione dovreb
</div> <div class="section" id="_completare_acquisire_un_ordine">
<div class="section-title">
<h2>
<span class="title-number">8.1</span>Completare (Acquisire) un Ordine </h2>
<span class="title-number">9.1</span>Completare (Acquisire) un Ordine </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -631,7 +680,7 @@ Quando il completamento è in sospeso in VR Payment, l&#8217;ordine rimarrà nel
</div> <div class="section" id="_annullare_una_transazione">
<div class="section-title">
<h2>
<span class="title-number">8.2</span>Annullare una transazione </h2>
<span class="title-number">9.2</span>Annullare una transazione </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -655,7 +704,7 @@ Puoi annullare solo le transazioni che non sono ancora state completate
</div> <div class="section" id="_rimborso_di_una_transazione">
<div class="section-title">
<h2>
<span class="title-number">8.3</span>Rimborso di una Transazione </h2>
<span class="title-number">9.3</span>Rimborso di una Transazione </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -681,7 +730,7 @@ Potrebbe volerci un po' di tempo prima che vediate il rimborso in Shopware. I ri
</div> <div class="section" id="_ordini_in_attesa">
<div class="section-title">
<h2>
<span class="title-number">8.4</span>Ordini in Attesa </h2>
<span class="title-number">9.4</span>Ordini in Attesa </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -703,7 +752,7 @@ Potrebbe volerci un po' di tempo prima che vediate il rimborso in Shopware. I ri
</div> <div class="section" id="_limitazioni_della_sincronizzazione_tra_whitelabelname_e_shopware">
<div class="section-title">
<h2>
<span class="title-number">8.5</span>Limitazioni della Sincronizzazione tra VR Payment e Shopware </h2>
<span class="title-number">9.5</span>Limitazioni della Sincronizzazione tra VR Payment e Shopware </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -714,7 +763,7 @@ Potrebbe volerci un po' di tempo prima che vediate il rimborso in Shopware. I ri
</div> <div class="section" id="_tokenization">
<div class="section-title">
<h2>
<span class="title-number">8.6</span>Tokenization </h2>
<span class="title-number">9.6</span>Tokenization </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -734,7 +783,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="section" id="_pagamenti_ricorrenti">
<div class="section-title">
<h2>
<span class="title-number">8.7</span>Pagamenti ricorrenti </h2>
<span class="title-number">9.7</span>Pagamenti ricorrenti </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -743,7 +792,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="section" id="_key_features">
<div class="section-title">
<h2>
<span class="title-number">8.8</span>Key Features </h2>
<span class="title-number">9.8</span>Key Features </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -768,7 +817,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="section" id="_risoluzione_dei_problemi">
<div class="section-title">
<h2>
<span class="title-number">8.9</span>Risoluzione dei Problemi </h2>
<span class="title-number">9.9</span>Risoluzione dei Problemi </h2>
</div>
<div class="section-body">
<div class="ulist">
@@ -799,7 +848,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="section" id="_faqs">
<div class="section-title">
<h2>
<span class="title-number">8.10</span>FAQs </h2>
<span class="title-number">9.10</span>FAQs </h2>
</div>
<div class="section-body">
<div class="paragraph">
@@ -831,7 +880,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="chapter" id="_changelog">
<div class="chapter-title">
<h1>
<span class="title-number">9</span>Changelog </h1>
<span class="title-number">10</span>Changelog </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -840,7 +889,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="chapter" id="_contribuzione">
<div class="chapter-title">
<h1>
<span class="title-number">10</span>Contribuzione </h1>
<span class="title-number">11</span>Contribuzione </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -851,7 +900,7 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</div> <div class="chapter" id="_support">
<div class="chapter-title">
<h1>
<span class="title-number">11</span>Support </h1>
<span class="title-number">12</span>Support </h1>
</div>
<div class="chapter-body">
<div class="paragraph">
@@ -907,133 +956,150 @@ La tokenizzazione non è disponibile per i checkout degli ospiti.
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<a href="#_aggiornamento">
<span class="item-number">5</span>
<span class="item-title">Aggiornamento</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_tramite_amministrazione">
<span class="item-number">5.1</span>
<span class="item-title">Tramite Amministrazione</span>
</a>
</li> <li class="nav-level-2">
<a href="#_tramite_cli">
<span class="item-number">5.2</span>
<span class="item-title">Tramite CLI</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#portal-startup-guide">
<span class="item-number">6</span>
<span class="item-title">Guida Rapida al Portale</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_create_la_chiave_api">
<span class="item-number">5.1</span>
<span class="item-number">6.1</span>
<span class="item-title">Create la chiave API:</span>
</a>
</li> <li class="nav-level-2">
<a href="#_configurate_i_metodi_di_pagamento">
<span class="item-number">5.2</span>
<span class="item-number">6.2</span>
<span class="item-title">Configurate i Metodi di Pagamento</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_guida_rapida_al_shop">
<span class="item-number">6</span>
<span class="item-number">7</span>
<span class="item-title">Guida Rapida al Shop</span>
</a>
</li> <li class="nav-level-1">
<a href="#_grafico_dello_stato_della_transazione">
<span class="item-number">7</span>
<span class="item-number">8</span>
<span class="item-title">Grafico dello Stato della Transazione</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_mappatura_degli_stati_degli_ordini_di_shopware">
<span class="item-number">7.1</span>
<span class="item-number">8.1</span>
<span class="item-title">Mappatura degli Stati degli Ordini di Shopware</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_osservazioni_generali_riguardo_agli_stati_degli_ordini">
<span class="item-number">7.1.1</span>
<span class="item-number">8.1.1</span>
<span class="item-title">Osservazioni Generali Riguardo agli Stati degli Ordini</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_mappatura_dello_stato_di_pagamento_di_shopware">
<span class="item-number">7.2</span>
<span class="item-number">8.2</span>
<span class="item-title">Mappatura dello Stato di Pagamento di Shopware</span>
</a>
<ul class="nav">
<li class="nav-level-3">
<a href="#_osservazioni_generali_riguardo_agli_stati_di_pagamento">
<span class="item-number">7.2.1</span>
<span class="item-number">8.2.1</span>
<span class="item-title">Osservazioni Generali Riguardo agli Stati di Pagamento</span>
</a>
</li> </ul>
</li> <li class="nav-level-2">
<a href="#_mappatura_dello_stato_di_spedizione_di_shopware">
<span class="item-number">7.3</span>
<span class="item-number">8.3</span>
<span class="item-title">Mappatura dello Stato di Spedizione di Shopware</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_gestione_delle_transazioni">
<span class="item-number">8</span>
<span class="item-number">9</span>
<span class="item-title">Gestione delle Transazioni</span>
</a>
<ul class="nav">
<li class="nav-level-2">
<a href="#_completare_acquisire_un_ordine">
<span class="item-number">8.1</span>
<span class="item-number">9.1</span>
<span class="item-title">Completare (Acquisire) un Ordine</span>
</a>
</li> <li class="nav-level-2">
<a href="#_annullare_una_transazione">
<span class="item-number">8.2</span>
<span class="item-number">9.2</span>
<span class="item-title">Annullare una transazione</span>
</a>
</li> <li class="nav-level-2">
<a href="#_rimborso_di_una_transazione">
<span class="item-number">8.3</span>
<span class="item-number">9.3</span>
<span class="item-title">Rimborso di una Transazione</span>
</a>
</li> <li class="nav-level-2">
<a href="#_ordini_in_attesa">
<span class="item-number">8.4</span>
<span class="item-number">9.4</span>
<span class="item-title">Ordini in Attesa</span>
</a>
</li> <li class="nav-level-2">
<a href="#_limitazioni_della_sincronizzazione_tra_whitelabelname_e_shopware">
<span class="item-number">8.5</span>
<span class="item-number">9.5</span>
<span class="item-title">Limitazioni della Sincronizzazione tra VR Payment e Shopware</span>
</a>
</li> <li class="nav-level-2">
<a href="#_tokenization">
<span class="item-number">8.6</span>
<span class="item-number">9.6</span>
<span class="item-title">Tokenization</span>
</a>
</li> <li class="nav-level-2">
<a href="#_pagamenti_ricorrenti">
<span class="item-number">8.7</span>
<span class="item-number">9.7</span>
<span class="item-title">Pagamenti ricorrenti</span>
</a>
</li> <li class="nav-level-2">
<a href="#_key_features">
<span class="item-number">8.8</span>
<span class="item-number">9.8</span>
<span class="item-title">Key Features</span>
</a>
</li> <li class="nav-level-2">
<a href="#_risoluzione_dei_problemi">
<span class="item-number">8.9</span>
<span class="item-number">9.9</span>
<span class="item-title">Risoluzione dei Problemi</span>
</a>
</li> <li class="nav-level-2">
<a href="#_faqs">
<span class="item-number">8.10</span>
<span class="item-number">9.10</span>
<span class="item-title">FAQs</span>
</a>
</li> </ul>
</li> <li class="nav-level-1">
<a href="#_changelog">
<span class="item-number">9</span>
<span class="item-number">10</span>
<span class="item-title">Changelog</span>
</a>
</li> <li class="nav-level-1">
<a href="#_contribuzione">
<span class="item-number">10</span>
<span class="item-number">11</span>
<span class="item-title">Contribuzione</span>
</a>
</li> <li class="nav-level-1">
<a href="#_support">
<span class="item-number">11</span>
<span class="item-number">12</span>
<span class="item-title">Support</span>
</a>
</li> </ul>
@@ -661,6 +661,13 @@ class PaymentMethodConfigurationService {
], $context);
// Media insert/update
// detect if collision, return existing id
$existingId = $this->checkMediaAlreadyExists($paymentMethodConfiguration->getResolvedImageUrl(), $context);
if ($existingId) {
return $existingId;
}
$mediaDefinition = $this->container->get(MediaDefinition::class);
$this->mediaSerializer->setRegistry($this->serializerRegistry);
@@ -681,6 +688,22 @@ class PaymentMethodConfigurationService {
}
}
private function checkMediaAlreadyExists($paymentMethodUrl, $context) {
// detect if collision, return existing id
if (preg_match('#/([^/]+)\.[^/.]+$#', $paymentMethodUrl, $matches)) {
$filename = $matches[1];
}
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('fileName', $filename));
$existing = $this->mediaRepository->search($criteria, $context)->first();
if ($existing) {
return $existing->getId();
}
return false;
}
/**
* Retrieves media default folder for a given payment method configuration.
*
@@ -13,6 +13,7 @@ use Symfony\Component\{
};
use VRPaymentPayment\Core\{
Api\Refund\Service\RefundService,
Api\Transaction\Service\TransactionService,
Settings\Service\SettingsService
};
@@ -41,16 +42,23 @@ class RefundController extends AbstractController
*/
protected $logger;
/**
* @var \VRPaymentPayment\Core\Api\Transaction\Service\TransactionService
*/
protected $transactionService;
/**
* RefundController constructor.
*
* @param \VRPaymentPayment\Core\Api\Refund\Service\RefundService $refundService
* @param \VRPaymentPayment\Core\Settings\Service\SettingsService $settingsService
* @param \VRPaymentPayment\Core\Api\Transaction\Service\TransactionService $transactionService
*/
public function __construct(RefundService $refundService, SettingsService $settingsService)
public function __construct(RefundService $refundService, SettingsService $settingsService, TransactionService $transactionService)
{
$this->settingsService = $settingsService;
$this->refundService = $refundService;
$this->transactionService = $transactionService;
}
/**
@@ -82,11 +90,23 @@ class RefundController extends AbstractController
$quantity = (int)$request->request->get('quantity');
$lineItemId = $request->request->get('lineItemId');
if ($quantity === null || $quantity <= 0) {
return new Response('refundQuantityZero', Response::HTTP_BAD_REQUEST);
}
$settings = $this->settingsService->getSettings($salesChannelId);
$apiClient = $settings->getApiClient();
$transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId);
$maxQuantity = $this->refundService->getMaxRefundableQuantity($transaction, $context, $lineItemId);
if ($quantity > $maxQuantity) {
return new Response('refundExceedsQuantity', Response::HTTP_BAD_REQUEST);
}
$refund = $this->refundService->create($transaction, $context, $lineItemId, $quantity);
if ($refund === null) {
return new Response('Refund was not created. Please check the refund amound or if the item was not refunded before', Response::HTTP_BAD_REQUEST);
}
@@ -111,10 +131,23 @@ class RefundController extends AbstractController
$transactionId = $request->request->get('transactionId');
$refundableAmount = $request->request->get('refundableAmount');
if ($refundableAmount === null || $refundableAmount <= 0.0) {
return new Response('refundAmountZero', Response::HTTP_BAD_REQUEST);
}
$settings = $this->settingsService->getSettings($salesChannelId);
$apiClient = $settings->getApiClient();
$transaction = $apiClient->getTransactionService()->read($settings->getSpaceId(), $transactionId);
$completed = (float) $transaction->getCompletedAmount();
$refunded = (float) $transaction->getRefundedAmount();
$maxRefund = round($completed - $refunded, 2);
if ($refundableAmount > $maxRefund) {
return new Response('refundExceedsAmount', Response::HTTP_BAD_REQUEST);
}
$refund = $this->refundService->createRefundByAmount($transaction, $refundableAmount, $context);
if ($refund === null) {
+68 -1
View File
@@ -12,7 +12,11 @@ use Shopware\Core\{
};
use VRPayment\Sdk\{
Model\Refund,
Model\Transaction
Model\Transaction,
Model\CriteriaOperator,
Model\EntityQueryFilter,
Model\EntityQueryFilterType,
Model\EntityQuery,
};
use VRPaymentPayment\Core\{
Api\Refund\Entity\RefundEntity,
@@ -241,4 +245,67 @@ class RefundService
->first();
}
/**
* Get total refunded quantity for transaction's line item by lineItemId.
*
* @param \VRPayment\Sdk\Model\Transaction $transaction
* @param \Shopware\Core\Framework\Context $context
* @param string $lineItemId
*
* @return int
*/
public function getRefundedQuantity(Transaction $transaction, Context $context, string $lineItemId): int {
$transactionEntity = $this->getTransactionEntityByTransactionId($transaction->getId(), $context);
$settings = $this->settingsService->getSettings($transactionEntity->getSalesChannel()->getId());
$apiClient = $settings->getApiClient();
$entityQueryFilter = (new EntityQueryFilter())
->setType(EntityQueryFilterType::LEAF)
->setOperator(CriteriaOperator::EQUALS)
->setFieldName('transaction.id')
->setValue($transaction->getId());
$query = (new EntityQuery())->setFilter($entityQueryFilter);
$refunds = $apiClient->getRefundService()->search($settings->getSpaceId(), $query);
$refundedQuantity = 0;
foreach ($refunds as $refund) {
foreach ($refund->getReductions() as $reduction) {
if ($reduction->getLineItemUniqueId() === $lineItemId) {
$refundedQuantity += (int) $reduction->getQuantityReduction();
}
}
}
return $refundedQuantity;
}
/**
* Get maximum quantity of available items to refund for line item.
*
* @param \VRPayment\Sdk\Model\Transaction $transaction
* @param \Shopware\Core\Framework\Context $context
* @param string $lineItemId
*
* @return int
*/
public function getMaxRefundableQuantity(Transaction $transaction, Context $context, string $lineItemId): int {
$originalQuantity = 0;
foreach ($transaction->getLineItems() as $lineItem) {
if ($lineItem->getUniqueId() === $lineItemId) {
$originalQuantity = (int) $lineItem->getQuantity();
break;
}
}
$refundedQuantity = $this->getRefundedQuantity($transaction, $context, $lineItemId);
$maxQuantity = $originalQuantity - $refundedQuantity;
return $maxQuantity;
}
}
@@ -32,7 +32,7 @@ use VRPaymentPayment\Core\Api\Refund\Entity\RefundEntityDefinition;
*/
class TransactionEntityDefinition extends EntityDefinition {
public const ENTITY_NAME = 'vrpayment_transaction';
public const ENTITY_NAME = 'vrpayment_transaction_data';
/**
* @return string
@@ -45,7 +45,8 @@ use VRPaymentPayment\Core\{
Settings\Service\SettingsService,
Util\LocaleCodeProvider,
Util\Payload\CustomProducts\CustomProductsLineItemTypes,
Util\Payload\TransactionPayload
Util\Payload\TransactionPayload,
Util\Analytics\Analytics
};
use Shopware\Core\Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity;
use Shopware\Core\Framework\Struct\ArrayEntity;
@@ -221,9 +222,14 @@ class TransactionService
$spaceId = $settings->getSpaceId();
}
$sdkTransaction = $settings->getApiClient()->getTransactionService()->create($spaceId, $sdkTransactionCreate);
$apiClient = $settings->getApiClient();
Analytics::addHeaders($apiClient, [
Analytics::SUBSCRIPTION_TRANSACTION => true
]);
$sdkTransaction = $apiClient->getTransactionService()->create($spaceId, $sdkTransactionCreate);
if ($sdkTransaction->valid()) {
return $settings->getApiClient()->getTransactionService()->processWithoutUserInteraction($spaceId, $sdkTransaction->getId());
return $apiClient->getTransactionService()->processWithoutUserInteraction($spaceId, $sdkTransaction->getId());
}
throw new \Exception("The transacion is not valid and could not be created.");
@@ -381,7 +387,7 @@ class TransactionService
*
* @return \Shopware\Core\Checkout\Order\OrderEntity
*/
protected function getOrderEntity(string $orderId, Context $context): OrderEntity
public function getOrderEntity(string $orderId, Context $context): OrderEntity
{
try {
$criteria = (new Criteria([$orderId]))->addAssociations(['deliveries']);
@@ -715,18 +721,20 @@ class TransactionService
{
$lineItem = new LineItemCreate();
$roundedPrice = $this->round($productData->getPrice()->getUnitPrice());
if ($productData instanceof LineItem) {
$lineItem->setName($productData->getLabel());
$lineItem->setUniqueId($productData->getId());
$lineItem->setSku($productData->getReferencedId() ?? $productData->getId());
$lineItem->setQuantity($productData->getQuantity());
$lineItem->setAmountIncludingTax($productData->getPrice()->getUnitPrice());
$lineItem->setAmountIncludingTax($roundedPrice);
} elseif ($productData instanceof OrderLineItemEntity) {
$lineItem->setName($productData->getLabel());
$lineItem->setUniqueId($productData->getId());
$lineItem->setSku($productData->getProductId() ?? $productData->getIdentifier() ?? $productData->getId());
$lineItem->setQuantity($productData->getQuantity());
$lineItem->setAmountIncludingTax($productData->getUnitPrice());
$lineItem->setAmountIncludingTax($roundedPrice);
} else {
throw new \InvalidArgumentException('Unsupported line item type: ' . get_class($productData));
}
@@ -800,4 +808,14 @@ class TransactionService
}
return false;
}
/**
* @param $amount
* @param int $precision
*
* @return float
*/
private function round($value, $precision = 2): float {
return \round($value, $precision);
}
}
@@ -125,7 +125,9 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
$orderTransactionId = $transaction->getOrderTransactionId();
$orderTransaction = $this->orderTransactionRepository->search(
(new Criteria([$orderTransactionId]))
->addAssociation('order'), $context
->addAssociation('order')
->addAssociation('stateMachineState'),
$context
)->getEntities()->first();
$contextSource = $context->getSource();
@@ -133,20 +135,9 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
$salesChannelContextId = $contextSource->getSalesChannelId();
}
$orderCustomer = $orderTransaction->getOrder()?->getOrderCustomer();
$contextToken = $this->getContextToken($request);
$parameters = new SalesChannelContextServiceParameters($salesChannelContextId, $contextToken, originalContext: $context);
if ($orderCustomer) {
$customerId = $orderCustomer->getCustomerId();
} else {
$customerId = null;
}
$parameters = new SalesChannelContextServiceParameters(
$salesChannelContextId,
$request->getSession()->get("sw-context-token", Random::getAlphanumericString(32)),
originalContext: $context,
customerId: $customerId
);
$salesChannelContext = $this->salesChannelContextService->get($parameters);
$redirectUrl = $transaction->getReturnUrl();
@@ -162,7 +153,10 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
$request->getSession()->remove('transactionId');
$errorMessage = 'An error occurred during the communication with external payment gateway : ' . $e->getMessage();
$this->logger->critical($errorMessage);
throw PaymentException::customerCanceled($orderTransactionId, $errorMessage);
if ($orderTransaction->getState()?->getTechnicalName() === OrderTransactionStates::STATE_CANCELLED) {
throw PaymentException::asyncFinalizeInterrupted($orderTransaction->getOrder()->getId(), $errorMessage);
}
throw PaymentException::customerCanceled($transaction->getOrderTransactionId(), $errorMessage);
}
}
@@ -186,7 +180,9 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
$orderTransactionId = $transaction->getOrderTransactionId();
$orderTransaction = $this->orderTransactionRepository->search(
(new Criteria([$orderTransactionId]))
->addAssociation('order'), $context
->addAssociation('order')
->addAssociation('stateMachineState'),
$context
)->getEntities()->first();
if ($orderTransaction->getOrder()->getAmountTotal() > 0) {
@@ -215,7 +211,11 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
$token = $request->getSession()->get('sw-context-token');
if ($token) {
$salesChannelId = $transactionEntity->getSalesChannelId();
$orderEntity = $this->pluginTransactionService->getOrderEntity(
$orderTransaction->getOrder()->getId(),
$context
);
$salesChannelId = $orderEntity->getSalesChannelId();
$parameters = new SalesChannelContextServiceParameters($salesChannelId, $token, originalContext: $context);
$salesChannelContext = $this->salesChannelContextService->get($parameters);
@@ -432,7 +432,9 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
{
$lineItemCreate = new \VRPayment\Sdk\Model\LineItemCreate();
$lineItemCreate->setAmountIncludingTax($lineItem->getAmountIncludingTax());
$roundedPrice = $this->round($lineItem->getAmountIncludingTax());
$lineItemCreate->setAmountIncludingTax($roundedPrice);
$attributes = $lineItem->getAttributes();
$attributesCreate = [];
@@ -469,4 +471,28 @@ class VRPaymentPaymentHandler extends AbstractPaymentHandler
return $lineItemCreate;
}
/**
* @param $amount
* @param int $precision
*
* @return float
*/
private function round($value, $precision = 2): float {
return \round($value, $precision);
}
private function getContextToken(Request $request): string
{
$headerContextToken = $request->headers->get('sw-context-token');
if ($headerContextToken) {
return $headerContextToken;
}
$sessionContextToken = $request->getSession()->get("sw-context-token");
if (!$sessionContextToken) {
return $sessionContextToken;
}
return Random::getAlphanumericString(32);
}
}
@@ -39,6 +39,7 @@ use VRPaymentPayment\Sdk\{Model\AddressCreate,
Model\TransactionCreate,
Model\TransactionPending};
use Shopware\Core\Framework\Struct\ArrayEntity;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
/**
* Class CheckoutSubscriber
@@ -337,6 +338,7 @@ class CheckoutSubscriber implements EventSubscriberInterface
$criteria->addFilter(
new EqualsFilter('salesChannels.id', $event->getSalesChannelContext()->getSalesChannelId())
);
$criteria->addSorting(new FieldSorting('position', FieldSorting::ASCENDING));
$result = $this->paymentMethodRepository->search($criteria, $event->getContext());
foreach ($result->getEntities() as $method) {
+4 -2
View File
@@ -15,6 +15,7 @@ class Analytics {
public const SHOP_SYSTEM_VERSION = 'x-meta-shop-system-version';
public const SHOP_SYSTEM_AND_VERSION = 'x-meta-shop-system-and-version';
public const PLUGIN_SYSTEM_VERSION = 'x-meta-plugin-version';
public const SUBSCRIPTION_TRANSACTION = 'x-meta-subscription-transaction';
/**
* @return array
@@ -25,16 +26,17 @@ class Analytics {
self::SHOP_SYSTEM => 'shopware',
self::SHOP_SYSTEM_VERSION => '6',
self::SHOP_SYSTEM_AND_VERSION => 'shopware-6',
self::PLUGIN_SYSTEM_VERSION => '7.1.4',
self::PLUGIN_SYSTEM_VERSION => '7.2.0',
];
}
/**
* @param \VRPayment\Sdk\ApiClient $apiClient
*/
public static function addHeaders(ApiClient &$apiClient)
public static function addHeaders(ApiClient &$apiClient, array $additionalHeaders = [])
{
$data = self::getDefaultData();
$data = array_merge($data, $additionalHeaders);
foreach ($data as $key => $value) {
$apiClient->addDefaultHeader($key, $value);
}
+13 -5
View File
@@ -397,7 +397,9 @@ class TransactionPayload extends AbstractPayload
$discountTitle = sprintf('DISCOUNT: %s', $discountName);
}
$lineItem->setAmountIncludingTax($amount)
$roundedAmount = self::round($amount);
$lineItem->setAmountIncludingTax($roundedAmount)
->setName($discountTitle)
->setQuantity(1)
->setShippingRequired(false)
@@ -520,12 +522,14 @@ class TransactionPayload extends AbstractPayload
$amount = self::round($amount + $shopLineItem->getPrice()->getCalculatedTaxes()->getAmount());
}
$roundedAmount = self::round($amount);
$lineItem = (new LineItemCreate())
->setName($this->fixLength($shopLineItem->getLabel(), 150))
->setUniqueId($uniqueId)
->setSku($sku)
->setQuantity($shopLineItem->getQuantity() ?? 1)
->setAmountIncludingTax($amount);
->setAmountIncludingTax($roundedAmount);
if (!empty($shopLineItem->getType()) && $shopLineItem->getType() == CustomProductsLineItemTypes::LINE_ITEM_TYPE_CUSTOMIZED_PRODUCTS) {
@@ -644,9 +648,10 @@ class TransactionPayload extends AbstractPayload
$amount = self::round($amount + $this->order->getShippingCosts()->getCalculatedTaxes()->getAmount());
}
$roundedAmount = self::round($amount);
$lineItem = (new LineItemCreate())
->setAmountIncludingTax($amount)
->setAmountIncludingTax($roundedAmount)
->setName($this->fixLength($shippingName . ' ' . $this->translator->trans('vrpayment.payload.shipping.lineItem'), 150))
->setQuantity($this->order->getShippingCosts()->getQuantity() ?? 1)
->setSku($this->fixLength($shippingName . '-Shipping', 200))
@@ -694,9 +699,11 @@ class TransactionPayload extends AbstractPayload
->setRate($taxRate)
->setTitle('Tax rate: '.$taxRate);
$roundedAmount = self::round($amount);
$name = $taxRate . '%-' . $shippingName;
$lineItem = (new LineItemCreate())
->setAmountIncludingTax($amount)
->setAmountIncludingTax($roundedAmount)
->setName($this->fixLength($name . ' ' . $this->translator->trans('vrpayment.payload.shipping.lineItem'), 150))
->setQuantity($this->order->getShippingCosts()->getQuantity() ?? 1)
->setSku($this->fixLength($name . '-Shipping', 200))
@@ -768,7 +775,8 @@ class TransactionPayload extends AbstractPayload
->setSku('Adjustment-Line-Item')
->setQuantity(1);
/** @noinspection PhpParamsInspection */
$lineItem->setAmountIncludingTax($adjustmentPrice)
$roundedAdjustmentPrice = self::round($adjustmentPrice);
$lineItem->setAmountIncludingTax($roundedAdjustmentPrice)
->setType(($adjustmentPrice > 0) ? LineItemType::FEE : LineItemType::DISCOUNT);
if (!$lineItem->valid()) {
@@ -31,7 +31,7 @@ class Migration1590156974TransactionEntity extends MigrationStep {
public function update(Connection $connection): void
{
$connection->executeStatement('
CREATE TABLE IF NOT EXISTS `vrpayment_transaction` (
CREATE TABLE IF NOT EXISTS `vrpayment_transaction_tmp` (
`id` BINARY(16) NOT NULL,
`data` JSON NOT NULL,
`payment_method_id` BINARY(16) NOT NULL,
@@ -42,7 +42,7 @@ class Migration1590646356RefundEntity extends MigrationStep {
PRIMARY KEY (`id`),
UNIQUE KEY `refund_id_UNIQUE` (`refund_id`),
KEY `fk.vrp_refund.transaction_id` (`transaction_id`),
CONSTRAINT `fk.vrp_refund.transaction_id` FOREIGN KEY (`transaction_id`) REFERENCES `vrpayment_transaction` (`transaction_id`) ON DELETE CASCADE
CONSTRAINT `fk.vrp_refund.transaction_id` FOREIGN KEY (`transaction_id`) REFERENCES `vrpayment_transaction_tmp` (`transaction_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
');
}
@@ -30,7 +30,7 @@ class Migration1590646356TransactionEntity extends MigrationStep {
public function update(Connection $connection): void
{
try {
$connection->executeStatement('ALTER TABLE `vrpayment_transaction` ADD COLUMN `confirmation_email_sent` TINYINT(1) NOT NULL DEFAULT 0 AFTER `id`;');
$connection->executeStatement('ALTER TABLE `vrpayment_transaction_tmp` ADD COLUMN `confirmation_email_sent` TINYINT(1) NOT NULL DEFAULT 0 AFTER `id`;');
}catch (\Exception $exception){
// column probably exists
}
@@ -33,19 +33,19 @@ class Migration1605701048TransactionEntity extends MigrationStep
try {
$connection->executeStatement('
ALTER TABLE `vrpayment_transaction`
ALTER TABLE `vrpayment_transaction_tmp`
ADD `order_version_id` binary(16) NOT NULL AFTER `transaction_id`;
');
$connection->executeStatement('
UPDATE `vrpayment_transaction` t1
UPDATE `vrpayment_transaction_tmp` t1
INNER JOIN `order` t2
ON t1.order_id = t2.id
SET t1.order_version_id = t2.version_id;
');
$connection->executeStatement('
ALTER TABLE `vrpayment_transaction`
ALTER TABLE `vrpayment_transaction_tmp`
DROP FOREIGN KEY `fk.vrp_transaction.order_id`,
DROP FOREIGN KEY `fk.vrp_transaction.order_transaction_id`,
DROP FOREIGN KEY `fk.vrp_transaction.payment_method_id`,
@@ -53,7 +53,7 @@ class Migration1605701048TransactionEntity extends MigrationStep
');
$connection->executeStatement('
ALTER TABLE `vrpayment_transaction`
ALTER TABLE `vrpayment_transaction_tmp`
ADD CONSTRAINT `fk.vrp_transaction_order_id` FOREIGN KEY (`order_id`, `order_version_id`)
REFERENCES `order` (`id`, `version_id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `fk.vrp_transaction_payment_method_id` FOREIGN KEY (`payment_method_id`)
@@ -30,7 +30,7 @@ class Migration1684240994TransactionEntity extends MigrationStep {
public function update(Connection $connection): void
{
try {
$connection->executeStatement('ALTER TABLE `vrpayment_transaction` ADD COLUMN `erp_merchant_id` VARCHAR(255) DEFAULT NULL AFTER `confirmation_email_sent`;');
$connection->executeStatement('ALTER TABLE `vrpayment_transaction_tmp` ADD COLUMN `erp_merchant_id` VARCHAR(255) DEFAULT NULL AFTER `confirmation_email_sent`;');
}catch (\Exception $exception){
// column probably exists
}
@@ -0,0 +1,323 @@
<?php declare(strict_types=1);
namespace VRPaymentPayment\Migration;
use Doctrine\DBAL\Connection;
use Shopware\Core\Framework\Migration\MigrationStep;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
/**
* Class Migration1766067106TransactionEntity
*
* @package VRPaymentPayment\Migration
*/
class Migration1766067106TransactionEntity extends MigrationStep
{
/**
* get creation timestamp
*
* @return int
*/
public function getCreationTimestamp(): int
{
return 1766067106;
}
/**
* update non-destructive changes
*
* @param \Doctrine\DBAL\Connection $connection
*/
public function update(Connection $connection): void
{
$oldTableName = 'vrpayment_transaction';
$tempTableName = 'vrpayment_transaction_tmp';
$realTableName = 'vrpayment_transaction_data';
$logger = new Logger('vrpayment_migration');
$logger->pushHandler(new StreamHandler(dirname(__DIR__, 5) . '/var/log/vrpayment-migration.log'));
$logger->info(
'Migration start', [
'old_table_exists' => $this->tableExists($connection, $oldTableName),
'temp_table_exists' => $this->tableExists($connection, $tempTableName),
'real_table_exists' => $this->tableExists($connection, $realTableName),
]
);
if ($this->tableExists($connection, $tempTableName)) {
// If _temp table exists, it means that this is a fresh installation.
$logger->info('Fresh installation detected.');
$connection->executeStatement(
sprintf('RENAME TABLE `%s` TO `%s`', $tempTableName, $realTableName)
);
$logger->info('Fresh installation finished.');
} else {
// If _temp does not exist, it means that this could be a version upgrade.
$logger->info('Possible plugin upgrade detected.');
if ($this->tableExists($connection, $oldTableName) && !$this->isOldPluginTable($connection, $oldTableName)) {
$logger->info('Old vrpayment_transaction table detected.');
// If vrpayment_transaction already exists and does not belong to old plugin,
// it means that this is indeed a version update.
$this->syncTransactionTable($connection, $oldTableName);
$logger->info('Old vrpayment_transaction table sync finished.');
$this->syncRefundTable($connection, $oldTableName);
$logger->info('Old vrpayment_refund table sync finished.');
$connection->executeStatement(
sprintf('RENAME TABLE `%s` TO `%s`', $oldTableName, $realTableName)
);
$logger->info('Old vrpayment_transaction table renaming completed.');
}
$logger->info('Possible plugin upgrade finished.');
// If vrpayment_transaction exists and it does belong to old plugin,
// it means we must run it in parallel.
}
$logger->info('Migration finished.');
return;
}
/**
* Check if table exists.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
*
* @return bool
*/
public function tableExists(Connection $connection, string $table): bool {
$result = $connection->fetchOne('SHOW TABLES LIKE :table', ['table' => $table]);
return $result !== false && $result !== null;
}
/**
* Check if table belongs to old plugin.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
*
* @return bool
*/
public function isOldPluginTable(Connection $connection, string $table): bool {
$oldTableExclusiveColumns = [
'finalized_at' => 'datetime',
'refunded_at' => 'datetime',
'initial_transaction_mode' => 'varchar',
'manual_capture' => 'tinyint',
'partial_refunded_at' => 'datetime',
'refunded_amount' => 'double',
'amount_to_refund' => 'double',
];
$resultColumns = $connection->fetchAllAssociative(
'SELECT LOWER(COLUMN_NAME) AS column_name, LOWER(DATA_TYPE) AS data_type
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = :table',
['table' => $table]
);
$dbColumns = [];
foreach($resultColumns as $column) {
$dbColumns[$column['column_name']] = $column['data_type'];
}
$oldPluginTable = true;
foreach($oldTableExclusiveColumns as $columnName => $columnType) {
if(!isset($dbColumns[$columnName])) {
$oldPluginTable = false;
break;
}
if ($dbColumns[$columnName] !== $columnType) {
$oldPluginTable = false;
break;
}
}
return $oldPluginTable;
}
/**
* Synchronizes the transaction table with the current/latest version.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
*/
private function syncTransactionTable(Connection $connection, string $table): void {
$this->addColumnIfMissing($connection, $table, 'confirmation_email_sent', "TINYINT(1) NOT NULL DEFAULT 0 AFTER `id`");
$this->addColumnIfMissing($connection, $table, 'erp_merchant_id', "VARCHAR(255) DEFAULT NULL AFTER `confirmation_email_sent`");
$this->addColumnIfMissing($connection, $table, 'data', "LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL CHECK (json_valid(`data`)) AFTER `erp_merchant_id`");
$this->addColumnIfMissing($connection, $table, 'payment_method_id', "BINARY(16) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'order_id', "BINARY(16) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'order_transaction_id', "BINARY(16) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'space_id', "INT(10) UNSIGNED NOT NULL");
$this->addColumnIfMissing($connection, $table, 'state', "VARCHAR(255) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'sales_channel_id', "BINARY(16) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'transaction_id', "INT(10) UNSIGNED NOT NULL");
$this->addColumnIfMissing($connection, $table, 'order_version_id', "BINARY(16) NOT NULL AFTER `transaction_id`");
$this->addColumnIfMissing($connection, $table, 'created_at', "DATETIME(3) NOT NULL");
$this->addColumnIfMissing($connection, $table, 'updated_at', "DATETIME(3) DEFAULT NULL");
$this->ensureIndexBySql($connection, $table, 'fk.vrp_transaction.order_id', "KEY `fk.vrp_transaction.order_id` (`order_id`)");
$this->ensureIndexBySql($connection, $table, 'fk.vrp_transaction.order_transaction_id', "KEY `fk.vrp_transaction.order_transaction_id` (`order_transaction_id`)");
$this->ensureIndexBySql($connection, $table, 'fk.vrp_transaction.payment_method_id', "KEY `fk.vrp_transaction.payment_method_id` (`payment_method_id`)");
$this->ensureIndexBySql($connection, $table, 'fk.vrp_transaction.sales_channel_id', "KEY `fk.vrp_transaction.sales_channel_id` (`sales_channel_id`)");
$this->ensureIndexBySql($connection, $table, 'fk.vrp_transaction', "KEY `fk.vrp_transaction` (`order_id`,`order_version_id`)");
$this->ensureForeignKey(
$connection,
$table,
'fk.vrp_transaction_order_id',
['order_id', 'order_version_id'],
'order',
['id', 'version_id'],
'CASCADE',
'CASCADE'
);
$this->ensureForeignKey(
$connection,
$table,
'fk.vrp_transaction_payment_method_id',
['payment_method_id'],
'payment_method',
['id'],
'RESTRICT',
'CASCADE'
);
$this->ensureForeignKey(
$connection,
$table,
'fk.vrp_transaction_sales_channel_id',
['sales_channel_id'],
'sales_channel',
['id'],
'RESTRICT',
'CASCADE'
);
}
/**
* Synchronizes the parts of the refund table related to transactions with the current/latest version.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
*/
private function syncRefundTable(Connection $connection, string $table): void {
$refundTable = 'vrpayment_refund';
$this->ensureIndexBySql($connection, $refundTable, 'fk.vrp_refund.transaction_id', "KEY `fk.vrp_refund.transaction_id` (`transaction_id`)");
$this->ensureForeignKey(
$connection,
$refundTable,
'fk.vrp_refund.transaction_id',
['transaction_id'],
$table,
['transaction_id'],
'CASCADE',
null
);
}
/**
* Adds column to the table if it's missing.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
* @param string $column
* @param string $sqlFragment
*/
private function addColumnIfMissing(Connection $connection, string $table, string $column, string $sqlFragment): void {
if ($this->columnExists($connection, $table, $column)) {
return;
}
$connection->executeStatement(
sprintf("ALTER TABLE `%s` ADD COLUMN `%s` %s", $table, $column, $sqlFragment)
);
}
/**
* Adds index to the table if it's missing.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
* @param string $indexName
* @param string $sqlFragment
*/
private function ensureIndexBySql(Connection $connection, string $table, string $indexName, string $sqlFragment): void {
if ($this->indexExists($connection, $table, $indexName)) {
return;
}
$connection->executeStatement(
sprintf("ALTER TABLE `%s` ADD %s", $table, $sqlFragment)
);
}
/**
* Adds foreign key constraint to the table if it's missing.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
* @param string $constraintName
* @param string $columns
* @param string $refTable
* @param string $refColumns
* @param string|null $onDelete
* @param string|null $onUpdate
*/
private function ensureForeignKey(
Connection $connection,
string $table,
string $constraintName,
array $columns,
string $refTable,
array $refColumns,
?string $onDelete,
?string $onUpdate
): void {
if ($this->foreignKeyExists($connection, $table, $constraintName)) {
return;
}
$columnsList = '`' . implode('`,`', $columns) . '`';
$refColumnsList = '`' . implode('`,`', $refColumns) . '`';
$connection->executeStatement(
sprintf(
"ALTER TABLE `%s`
ADD CONSTRAINT `%s` FOREIGN KEY (%s)
REFERENCES `%s` (%s)%s%s",
$table,
$constraintName,
$columnsList,
$refTable,
$refColumnsList,
$onDelete ? " ON DELETE {$onDelete}" : "",
$onUpdate ? " ON UPDATE {$onUpdate}" : ""
)
);
}
/**
* Check if foreign key constraint exists.
*
* @param \Doctrine\DBAL\Connection $connection
* @param string $table
* @param string $constraintName
*
* @return bool
*/
private function foreignKeyExists(Connection $connection, string $table, $constraintName): bool {
$result = $connection->fetchOne(
"SELECT 1 FROM information_schema.referential_constraints
WHERE constraint_schema = DATABASE()
AND table_name = ?
AND constraint_name = ?
LIMIT 1",
[$table,$constraintName]
);
return $result !== false && $result !== null;
}
/**
* update destructive changes
*
* @param \Doctrine\DBAL\Connection $connection
*/
public function updateDestructive(Connection $connection): void
{
// implement update destructive
}
}
@@ -70,13 +70,16 @@ Component.register('vrpayment-order-action-refund-by-amount', {
});
}).catch((errorResponse) => {
try {
var errorTitle;
var errorTitle = errorResponse?.response?.data?.errors?.[0]?.title ?? this.$tc('vrpayment-order.refundAction.refundCreateError.errorTitle')
var errorMessage;
if (errorResponse.response.data == 'refundExceedsAmount') {
errorTitle = this.$tc('vrpayment-order.refundAction.refundExceedsTotalError.title');
errorMessage = this.$tc('vrpayment-order.refundAction.refundExceedsTotalError.messageRefundAmountExceedsAvailableBalance');
} else {
errorTitle = errorResponse.response.data.errors[0].title;
switch(errorResponse.response.data) {
case 'refundAmountZero':
errorMessage = this.$tc('vrpayment-order.refundAction.refundCreateError.messageRefundAmountIsZero');
break;
case 'refundExceedsAmount':
errorMessage = this.$tc('vrpayment-order.refundAction.refundCreateError.messageRefundAmountExceedsAvailableBalance');
break;
default:
errorMessage = errorResponse.response.data.errors[0].detail;
}
this.createNotificationError({
@@ -9,6 +9,7 @@
:max="this.$parent.$parent.itemRefundableQuantity"
:min="0"
v-model="refundQuantity"
number-type="int"
:label="$tc('vrpayment-order.refund.refundQuantity.label')">
</mt-number-field>
@@ -68,9 +68,21 @@ Component.register('vrpayment-order-action-refund', {
});
}).catch((errorResponse) => {
try {
var errorTitle = errorResponse?.response?.data?.errors?.[0]?.title ?? this.$tc('vrpayment-order.refundAction.refundCreateError.errorTitle')
var errorMessage;
switch(errorResponse.response.data) {
case 'refundQuantityZero':
errorMessage = this.$tc('vrpayment-order.refundAction.refundCreateError.messageRefundQuantityIsZero');
break;
case 'refundExceedsQuantity':
errorMessage = this.$tc('vrpayment-order.refundAction.refundCreateError.messageRefundQuantityExceedsAvailableBalance');
break;
default:
errorMessage = errorResponse.response.data.errors[0].detail;
}
this.createNotificationError({
title: errorResponse.response.data.errors[0].title,
message: errorResponse.response.data.errors[0].detail,
title: errorTitle,
message: errorMessage,
autoClose: false
});
} catch (e) {
@@ -78,9 +78,12 @@
"successTitle": "Erfolg",
"maxAvailableItemsToRefund": "Maximal Verfügbare Artikel zum Erstatten",
"maxAvailableAmountToRefund": "Maximal verfügbarer Erstattungsbetrag",
"refundExceedsTotalError": {
"title": "Fehler beim Erstellen der Rückerstattung.",
"messageRefundAmountExceedsAvailableBalance": "Der Rückerstattungsbetrag übersteigt das verfügbare Guthaben."
"refundCreateError": {
"errorTitle": "Fehler beim Erstellen der Rückerstattung.",
"messageRefundAmountExceedsAvailableBalance": "Der Rückerstattungsbetrag übersteigt das verfügbare Guthaben.",
"messageRefundAmountIsZero": "Der Rückerstattungsbetrag muss größer als 0 sein.",
"messageRefundQuantityExceedsAvailableBalance": "Rückerstattung nach Menge überschreitet die maximal verfügbare Anzahl an Artikeln zur Rückerstattung.",
"messageRefundQuantityIsZero": "Rückerstattung nach Menge muss größer als 0 sein."
}
},
"transactionHistory": {
@@ -9,7 +9,6 @@
"void": "Cancel authorization",
"refund-whole-line-item": "Refund whole line item",
"refund-line-item-by-quantity": "Refund by quantity",
"refund-line-item-selected": "Rembourser sélectionnés",
"refund-line-item-selected": "Refund selected",
"refund-line-item-parial": "Partial refund"
}
@@ -79,9 +78,12 @@
"successTitle": "Success",
"maxAvailableItemsToRefund": "Maximum available items to refund",
"maxAvailableAmountToRefund": "Maximum available amount to refund",
"refundExceedsTotalError": {
"title": "Error while creating the refund.",
"messageRefundAmountExceedsAvailableBalance": "Refund amount exceeds available balance."
"refundCreateError": {
"errorTitle": "Error while creating the refund.",
"messageRefundAmountExceedsAvailableBalance": "Refund amount exceeds available balance.",
"messageRefundAmountIsZero": "Refund amount must be greater than 0.",
"messageRefundQuantityExceedsAvailableBalance": "Refund by quantity exceeds maximum available items to refund.",
"messageRefundQuantityIsZero": "Refund by quantity must be greater than 0."
}
},
"transactionHistory": {
@@ -78,9 +78,12 @@
"successTitle": "Succès",
"maxAvailableItemsToRefund": "Nombre maximum d'articles disponibles pour le remboursement",
"maxAvailableAmountToRefund": "Montant maximal disponible pour le remboursement",
"refundExceedsTotalError": {
"title": "Erreur lors de la création du remboursement.",
"messageRefundAmountExceedsAvailableBalance": "Le montant du remboursement dépasse le solde disponible."
"refundCreateError": {
"errorTitle": "Erreur lors de la création du remboursement.",
"messageRefundAmountExceedsAvailableBalance": "Le montant du remboursement dépasse le solde disponible.",
"messageRefundAmountIsZero": "Le montant du remboursement doit être supérieur à 0.",
"messageRefundQuantityExceedsAvailableBalance": "Le remboursement par quantité dépasse le nombre maximal darticles remboursables.",
"messageRefundQuantityIsZero": "Le remboursement par quantité doit être supérieur à 0."
}
},
"transactionHistory": {
@@ -78,9 +78,12 @@
"successTitle": "Successo",
"maxAvailableItemsToRefund": "Numero massimo di articoli disponibili da rimborsare",
"maxAvailableAmountToRefund": "Importo massimo disponibile per il rimborso",
"refundExceedsTotalError": {
"title": "Errore durante la creazione del rimborso.",
"messageRefundAmountExceedsAvailableBalance": "LL'importo del rimborso supera il saldo disponibile."
"refundCreateError": {
"errorTitle": "Errore durante la creazione del rimborso.",
"messageRefundAmountExceedsAvailableBalance": "LL'importo del rimborso supera il saldo disponibile.",
"messageRefundAmountIsZero": "L'importo del rimborso deve essere superiore a 0.",
"messageRefundQuantityExceedsAvailableBalance": "Il rimborso per quantità supera il numero massimo di articoli rimborsabili.",
"messageRefundQuantityIsZero": "Il rimborso per quantità deve essere maggiore di 0."
}
},
"transactionHistory": {
File diff suppressed because one or more lines are too long
@@ -10,6 +10,7 @@
<service id="VRPaymentPayment\Core\Api\Refund\Controller\RefundController" public="true">
<argument type="service" id="VRPaymentPayment\Core\Api\Refund\Service\RefundService"/>
<argument type="service" id="VRPaymentPayment\Core\Settings\Service\SettingsService"/>
<argument type="service" id="VRPaymentPayment\Core\Api\Transaction\Service\TransactionService"/>
<call method="setLogger">
<argument type="service" id="monolog.logger.vrpayment_payment"/>
</call>
@@ -0,0 +1,25 @@
{
"base": "/bundles/vrpaymentpayment/administration/",
"entryPoints": {
"v-r-payment-payment": {
"css": [
"/bundles/vrpaymentpayment/administration/assets/v-r-payment-payment-D4AH6HY2.css"
],
"dynamic": [],
"js": [
"/bundles/vrpaymentpayment/administration/assets/v-r-payment-payment-Cp2eQSV_.js"
],
"legacy": false,
"preload": []
}
},
"legacy": false,
"metadatas": {},
"version": [
"7.1.0",
7,
1,
0
],
"viteServer": null
}
@@ -0,0 +1,11 @@
{
"main.js": {
"file": "assets/v-r-payment-payment-Cp2eQSV_.js",
"name": "v-r-payment-payment",
"src": "main.js",
"isEntry": true,
"css": [
"assets/v-r-payment-payment-D4AH6HY2.css"
]
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
.sw-order-detail .sw-tabs{margin-top:40px}.sw-order-detail .sw-order-detail-base .mt-card-view__content{overflow-x:visible;overflow-y:visible}.vrpayment-order-detail__data{display:grid}.vrpayment-order-detail__heading{padding-top:15px}