feat(payments): Anbieter-Gerüst core/payments mit PayPal Orders v2

- ProviderInterface/AbstractProvider: Vorgang mit Uhrzeit+Session (payment_transactions),
  Mail und Warenkorb erst nach Zahlung, idempotentes markPaid, Betragsabgleich,
  shop_event + PG payment_log
- Secrets verschluesselt (libsodium) in MySQL, Schluessel ausserhalb Docroot
- Cashdesk: ?payment_return/?payment_cancel, Pending-Riegel, zahlung_erst_spaeter()
- Backend Zahlart-Editor: Einstellungen speichern (war ohne Empfaenger), Secret-Felder
- payment_webhook.php (Standalone), cli.php (init-key, secret, reconcile, status)
- PayPal-v2-Blaupause vom Juli entfernt
This commit is contained in:
Thomas Bartelt
2026-09-13 19:51:52 +02:00
parent af81e8f63a
commit 397fb5944a
30 changed files with 2002 additions and 1104 deletions
@@ -0,0 +1,37 @@
<!-- content_cash_desk/payment_result.tpl : Rueckmeldung der Zahlungsanbieter (core/payments) -->
<div class="full_box">
<div class="title_wrapper">
<div class="title"><h2>{if $provider_label}{$provider_label|escape}{else}Zahlung{/if}</h2></div>
<div class="clear"></div>
</div>
<div class="box_content">
<div class="box_padder cashdesk_payment_info">
{if $call == 'payment_open'}
<p>Vielen Dank f&uuml;r Ihre Bestellung.<br /><br />
Sie werden zur Bezahlung weitergeleitet. Falls das nicht automatisch geschieht,
klicken Sie bitte auf den folgenden Button.</p>
<meta http-equiv="refresh" content="0;url={$payment_link|escape}">
<a href="{$payment_link|escape}" class="button" style="width:220px;">Weiter zur Bezahlung</a>
<br /><br />
{elseif $call == 'payment_cancelled'}
<p>Sie haben die Bezahlung abgebrochen.<br /><br />
Ihr Warenkorb ist unver&auml;ndert &ndash; Sie k&ouml;nnen die Bestellung jederzeit
mit einer anderen Zahlart abschlie&szlig;en.</p>
<a href="/Kasse/" class="button" style="width:220px;">Zur&uuml;ck zur Kasse</a>
<br /><br />
{elseif $call == 'payment_pending'}
<p>{$message}</p>
{if $order_number}<p>Ihre Bestellnummer: <strong>{$order_number|escape}</strong></p>{/if}
{else}
<p>{$message}</p>
{if $order_number}<p>Bestellnummer: <strong>{$order_number|escape}</strong></p>{/if}
<a href="/Kasse/" class="button" style="width:220px;">Zur&uuml;ck zur Kasse</a>
<br /><br />
{/if}
</div>
</div>
</div>
@@ -1,30 +0,0 @@
<!-- content_cash_desk/paypalrest.tpl (PayPal Orders v2) -->
<div class="full_box">
<div class="title_wrapper">
<div class="title"><h2>PayPal</h2></div>
<div class="clear"></div>
</div>
<div class="box_content">
<div class="box_padder cashdesk_paypal_info">
{if $call == 'payment_open'}
{if $paypal_link}
<p>Vielen Dank f&uuml;r Ihre Bestellung.<br /><br />
Sie werden zu PayPal weitergeleitet. Falls das nicht automatisch
geschieht, klicken Sie bitte auf den folgenden Button.</p>
<meta http-equiv="refresh" content="0;url={$paypal_link}">
<a href="{$paypal_link}" class="button" style="width:220px;">Weiter zu PayPal</a>
<br /><br />
{else}
<p>Mit PayPal ist ein Fehler aufgetreten.</p>
{/if}
{/if}
{if $call == 'payment_error'}
<p>{$message}</p>
{/if}
</div>
</div>
</div>