-- ============================================================================ -- 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;