*
* 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 '';
exit;
}
}
// ============================================================
// Mock-Shop HTML ausgeben
// ============================================================
header('Content-Type: text/html; charset=UTF-8');
?>
IDS Connect Mock-Server - Testshop
⚠️ 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
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