* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. */ /** * \file idsconnect/mockserver.php * \ingroup idsconnect * \brief Mock-Server der einen Großhandels-Shop simuliert * * Dieser Server empfängt IDS Connect Anfragen und simuliert einen Shop. * Damit können alle Funktionen getestet werden, ohne echte Bestellungen auszulösen. */ // Dolibarr laden (ohne Login für den Mock-Server) define('NOLOGIN', 1); define('NOCSRFCHECK', 1); define('NOREQUIREMENU', 1); $res = 0; if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; } $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; } if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; } if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; } if (!$res && file_exists("../main.inc.php")) { $res = @include "../main.inc.php"; } if (!$res && file_exists("../../main.inc.php")) { $res = @include "../../main.inc.php"; } if (!$res) { die("Include of main fails"); } // Nur im Testmodus erreichbar if (!getDolGlobalInt('IDSCONNECT_TESTMODE')) { http_response_code(403); die("Mock-Server ist nur im Testmodus verfügbar"); } // IDS-Parameter aus POST lesen $kndnr = GETPOST('kndnr', 'alphanohtml') ?: ''; $name_kunde = GETPOST('name_kunde', 'alphanohtml') ?: ''; $pw_kunde = GETPOST('pw_kunde', 'none') ?: ''; $version = GETPOST('version', 'alphanohtml') ?: '2.5'; $ids_action = GETPOST('action', 'alpha') ?: ''; $hookurl = GETPOST('hookurl', 'alphanohtml') ?: ''; $warenkorb_xml = GETPOST('warenkorb', 'none') ?: ''; $artikelnr = GETPOST('artikelnr', 'alphanohtml') ?: ''; // Mock-Server Action bestimmen $mock_action = GETPOST('mock_action', 'alpha') ?: ''; // Beispiel-Artikel für den Mock-Shop $mock_articles = array( array('nr' => '1234567', 'bezeichnung' => 'Leitungsschutzschalter B16 1-polig', 'preis' => 5.42, 'einheit' => 'STK', 'hersteller' => 'Hager', 'ean' => '3250613160012'), array('nr' => '2345678', 'bezeichnung' => 'FI-Schutzschalter 40A 30mA 4-polig', 'preis' => 28.90, 'einheit' => 'STK', 'hersteller' => 'ABB', 'ean' => '7612271443526'), array('nr' => '3456789', 'bezeichnung' => 'NYM-J 3x1,5 mm² (100m Ring)', 'preis' => 62.50, 'einheit' => 'STK', 'hersteller' => 'Lapp', 'ean' => '4044774881328'), array('nr' => '4567890', 'bezeichnung' => 'Schalterdose UP D=60mm', 'preis' => 0.35, 'einheit' => 'STK', 'hersteller' => 'Kaiser', 'ean' => '4013456000216'), array('nr' => '5678901', 'bezeichnung' => 'Zählerschrank 1-Feld komplett', 'preis' => 189.00, 'einheit' => 'STK', 'hersteller' => 'Hager', 'ean' => '3250616167483'), array('nr' => '6789012', 'bezeichnung' => 'Wallbox 11kW mit Ladesteckdose Typ 2', 'preis' => 495.00, 'einheit' => 'STK', 'hersteller' => 'ABL', 'ean' => '4015141000001'), array('nr' => '7890123', 'bezeichnung' => 'SLS-Schalter E-Charakteristik 35A 1-polig', 'preis' => 22.80, 'einheit' => 'STK', 'hersteller' => 'Hager', 'ean' => '3250613211363'), array('nr' => '8901234', 'bezeichnung' => 'Überspannungsschutz Typ 2 TN-S', 'preis' => 78.50, 'einheit' => 'STK', 'hersteller' => 'Dehn', 'ean' => '4013364108530'), ); // ============================================================ // Warenkorb an HOOKURL zurücksenden // ============================================================ if ($mock_action === 'send_cart' && !empty($hookurl)) { $cart_items = array(); if (!empty($_POST['cart_items']) && is_array($_POST['cart_items'])) { foreach ($_POST['cart_items'] as $idx => $item) { $qty = (int) ($item['qty'] ?? 0); if ($qty > 0 && isset($mock_articles[$idx])) { $art = $mock_articles[$idx]; $cart_items[] = array( 'nr' => $art['nr'], 'bezeichnung' => $art['bezeichnung'], 'menge' => $qty, 'einheit' => $art['einheit'], 'einzelpreis' => $art['preis'], 'ean' => $art['ean'], 'hersteller' => $art['hersteller'], ); } } } if (empty($cart_items)) { $error_msg = 'Keine Artikel ausgewählt'; } else { // Warenkorb-XML im IDS Connect 2.5 Format generieren $xml = ''."\n"; $xml .= ''."\n"; $xml .= ' '."\n"; $xml .= ' '.date('Y-m-d').''."\n"; $xml .= ' '."\n"; $xml .= ' Warenkorbruückgabe'."\n"; $xml .= ' 2.5'."\n"; $xml .= ' '."\n"; $xml .= ' '."\n"; $xml .= ' '."\n"; $xml .= ' Lieferung'."\n"; $xml .= ' EUR'."\n"; $xml .= ' '."\n"; foreach ($cart_items as $item) { $xml .= ' '."\n"; $xml .= ' '.htmlspecialchars($item['nr'], ENT_XML1).''."\n"; $xml .= ' '.$item['menge'].''."\n"; $xml .= ' '.htmlspecialchars($item['einheit'], ENT_XML1).''."\n"; $xml .= ' '.htmlspecialchars($item['bezeichnung'], ENT_XML1).''."\n"; $xml .= ' '.$item['einzelpreis'].''."\n"; $xml .= ' '.$item['einzelpreis'].''."\n"; $xml .= ' 1'."\n"; $xml .= ' 19'."\n"; $xml .= ' '.htmlspecialchars($item['ean'], ENT_XML1).''."\n"; $xml .= ' '.htmlspecialchars($item['hersteller'], ENT_XML1).''."\n"; $xml .= ' '."\n"; } $xml .= ' '."\n"; $xml .= ''; // Per Redirect mit POST-Daten an HOOKURL senden // Wir nutzen ein Auto-Submit-Formular (wie IDS Connect es spezifiziert) header('Content-Type: text/html; charset=UTF-8'); echo ''; echo 'Mock-Server - Warenkorb wird gesendet...'; echo ''; echo '

Warenkorb wird an Dolibarr gesendet ('.count($cart_items).' Artikel)...

'; echo '
'; echo ''; echo ''; echo '
'; exit; } } // ============================================================ // Mock-Shop HTML ausgeben // ============================================================ header('Content-Type: text/html; charset=UTF-8'); ?> IDS Connect Mock-Server - Testshop

🔌 Mock-Elektrogroßhandel TESTMODUS

⚠️ Dies ist ein Testshop! Keine echten Bestellungen werden ausgelöst. Alle Daten sind Beispieldaten für Entwicklungszwecke.
Fehler:
Empfangene IDS-Daten: Kundennr: | Benutzer: | Version: | Action:

Bestellung empfangen (WKS)

Bestellung erfolgreich empfangen!
Der Großhandel hat folgende Artikel erhalten:
parseCartXml($warenkorb_xml); if (is_array($received_items) && count($received_items) > 0): ?>
Art.-Nr. Bezeichnung Einzelpreis (€) Menge Einheit
Gesamt netto:

Warenkorb-XML konnte nicht geparst werden.

XML-Rohdaten
Mock-Server Simulation: Im Live-Betrieb würde der Sonepar-Shop diese Bestellung entgegennehmen und verarbeiten.

Artikel auswählen

$art): ?>
Art.-Nr. Bezeichnung Hersteller Preis (€) Menge

Keine HOOKURL empfangen - Rücksendung nicht möglich.

Artikel Deep-Link

Angefragter Artikel:

'; echo 'Artikelnummer:'.htmlspecialchars($art['nr']).''; echo 'Bezeichnung:'.htmlspecialchars($art['bezeichnung']).''; echo 'Hersteller:'.htmlspecialchars($art['hersteller']).''; echo 'Preis:'.number_format($art['preis'], 2, ',', '.').' €'; echo 'Verfügbar:✅ Auf Lager (Mock)'; echo ''; break; } } if (!$found) { echo '

Artikel nicht gefunden (Mock-Datenbank enthält nur Beispieldaten)

'; } ?>

Schnittstellenversion

Unterstützte IDS Connect Version: 2.5

Login-Information

Login erfolgreich (Mock-Server)

Kundennummer:


IDS Connect Mock-Server v1.0 | Nur für Entwicklung und Tests | Zurück zu Dolibarr