Files
shop-old/core/payments/install.sql
T
Tom Bartelt 85bc1d8c9a feat(payments): Block Zahlungsvorgang im Bestell-Editor, Storno-Felder bei automatischem Storno
- Bestell-Editor rechts: Zahlungsvorgang (Status, Grund, Transaktions-ID,
  Referenz, Betraege, Zeiten, Verlauf aus PG payment_log), anbieterneutral
  ueber payment_transactions (Payments\Overview, Log::forOrder)
- markCancelled() fuellt Stornodatum, Stornostatus, Stornogrund und
  Storno-Nachricht der Bestellung (nur leere Felder)
- neuer Stornogrund 'Zahlung beim Anbieter nicht abgeschlossen' (install.sql)
- reconcile: 404-Grund lesbar mit Alter des Vorgangs
2026-09-22 09:30:52 +02:00

75 lines
4.4 KiB
SQL

-- ============================================================================
-- core/payments -- Installation (MySQL, Shop-DB)
-- Additiv: bestehende Zahlarten und Bestellungen werden nicht angefasst.
-- Reihenfolge: 1) Tabellen 2) Zahlart + Einstellungen 3) Kundengruppen (Test)
-- ============================================================================
-- 1a) Vorgaenge je Anbieter -- mit echter Uhrzeit, Session (Warenkorb) und Sollbetrag.
CREATE TABLE IF NOT EXISTS `payment_transactions` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`provider` VARCHAR(40) NOT NULL,
`order_id` BIGINT UNSIGNED NOT NULL,
`order_number` VARCHAR(50) NULL,
`reference` VARCHAR(191) NOT NULL COMMENT 'ID beim Anbieter (PayPal Order-ID)',
`expected_amount` DECIMAL(13,2) NOT NULL,
`currency` CHAR(3) NOT NULL DEFAULT 'EUR',
`status` ENUM('open','pending','paid','cancelled','mismatch') NOT NULL DEFAULT 'open',
`approve_url` TEXT NULL,
`session_id` VARCHAR(191) NULL,
`customer_id` INT UNSIGNED NULL,
`capture_id` VARCHAR(191) NULL,
`paid_amount` DECIMAL(13,2) NULL,
`paid_at` DATETIME NULL,
`detail` VARCHAR(500) NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_provider_reference` (`provider`,`reference`),
KEY `idx_order` (`order_id`),
KEY `idx_status_created` (`provider`,`status`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 1b) Verschluesselte Zugangsdaten (Schluessel liegt ausserhalb des Docroots).
CREATE TABLE IF NOT EXISTS `payment_provider_secrets` (
`provider` VARCHAR(40) NOT NULL,
`name` VARCHAR(60) NOT NULL,
`value_enc` TEXT NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`provider`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2a) Einstellungen der Zahlart (erscheinen im Zahlart-Editor unter "Einstellungen").
INSERT IGNORE INTO `configuration` (`name`, `text`, `group_id`, `setting`, `type`, `description`) VALUES
('paypal_v2_mode', '', 'paypal_v2', 'sandbox', 1, 'sandbox oder live'),
('paypal_v2_brand_name', '', 'paypal_v2', 'intelectra', 1, 'Anzeigename auf der PayPal-Seite'),
('paypal_v2_send_address', '', 'paypal_v2', '1', 1, '1 = Lieferadresse an PayPal uebergeben (Verkaeuferschutz), 0 = nicht'),
('paypal_v2_currency', '', 'paypal_v2', 'EUR', 1, 'Waehrung (ISO 4217)'),
('paypal_v2_express', '', 'paypal_v2', '1', 1, '1 = Button "Direkt mit PayPal bezahlen" im Warenkorb, 0 = aus'),
('paypal_v2_express_countries', '', 'paypal_v2', 'DE', 1, 'Laender (ISO-2, kommagetrennt), deren PayPal-Adresse im Express-Kauf angenommen wird');
-- 2a2) Stornogrund fuer automatische Stornos (Kunde hat beim Anbieter nicht bezahlt).
-- type 0 = Kunden Storno. markCancelled() sucht ihn ueber den Namen.
INSERT INTO `cancellation_reasons` (`name`, `type`, `active`)
SELECT 'Zahlung beim Anbieter nicht abgeschlossen', 0, 1
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `cancellation_reasons` WHERE `name` = 'Zahlung beim Anbieter nicht abgeschlossen');
-- 2b) Zahlart anlegen. active=1, aber noch KEINER Kundengruppe zugeordnet => im Shop unsichtbar.
-- helperjoinkey 'pp' = derselbe PayPal-Aufschlag wie die alte Zahlart (shipping_area.add_pp).
INSERT INTO `payment_methods`
(`name`, `module`, `argument`, `active`, `rang`, `invoice_text`, `order_text`, `order_email_text`, `helperjoinkey`, `configuration_group_id`)
SELECT 'PayPal', 'paypal_v2', '', 1, 2,
'Bezahlung erfolgte per PayPal',
'Sie werden zur Bezahlung Ihrer Bestellung zu PayPal weitergeleitet.',
'Der zu zahlende Betrag wurde per PayPal beglichen.',
'pp', 'paypal_v2'
FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM `payment_methods` WHERE `module` = 'paypal_v2');
-- 3) TEST: Zahlart nur fuer eine Kundengruppe sichtbar machen (Gruppen: 1 Endverbraucher,
-- 100 Besucher, 101 Haendler, 103 Gast). Beispiel Endverbraucher:
-- INSERT INTO `customer_group_payment_method_configuration` (`group_id`, `payment_method_id`, `shipping_area_id`, `active`)
-- SELECT 1, id, 1, 1 FROM payment_methods WHERE module='paypal_v2';
-- GO-LIVE (spaeter): alle Gruppen wie bei id=4 freischalten und die alte Zahlart verstecken:
-- UPDATE `customer_group_payment_method_configuration` SET active=0 WHERE payment_method_id=4;
-- UPDATE `payment_methods` SET active=0 WHERE id=4;