- 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
75 lines
4.4 KiB
SQL
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;
|