Modul: Kunden mit nicht ausgelieferter Bestellung seit xy Stunden eine Nachricht schicken
Verfasst: 18 Jul 2025, 10:39
Wollte gerne Lieferstatusanfragen-Emails vorbeugen, indem ich Kunden mit einem bestimmten Bestellstatus (z.B. Zahlung eingegangen oder Ratenzahlung authorized) deren Bestellung über x Tage alt ist eine Nachricht über die Gambio Services sende per Cronjob. Sowas wie: "Wir arbeiten mit Hochtouren... Danke für die Geduld, bleiben Sie gechilled" 
ich renne aber immer ins Memory Limit sobald ich den OrderWriteService anwerfe - sogar wenn ich danach einen exit; platziere zum Testen, und wenn ich das Memory Limit auf 1024 MB hochsetze. Da ist doch was nicht normal, oder?
Gibts da einen schlankeren Weg als MainFactory::create('OrderWriteService') ?
ich renne aber immer ins Memory Limit sobald ich den OrderWriteService anwerfe - sogar wenn ich danach einen exit; platziere zum Testen, und wenn ich das Memory Limit auf 1024 MB hochsetze. Da ist doch was nicht normal, oder?
Code: Alles auswählen
<?php
ini_set('memory_limit', '1024M');
$allowedToken = 'meinsichereraccesstoken123';
$token = $_GET['token'] ?? '';
if (!ctype_alnum($token) || $token !== $allowedToken) {
http_response_code(403);
die('Zugriff verweigert.');
}
require_once __DIR__ . '/includes/application_top.php';
$sourceStatusIds = [5, 6, 175];
$notifyCustomer = true;
$minOrderAgeInHours = 96;
// OrderWriteService instanziieren
$orderWriteService = MainFactory::create('OrderWriteService');
$testOrderId = isset($_GET['testOrderId']) ? (int)$_GET['testOrderId'] : 0;
echo $testOrderId;
if ($testOrderId > 0) {
$query = xtc_db_query("
SELECT orders_id, customers_name, customers_id, date_purchased, orders_status
FROM orders
WHERE orders_id = $testOrderId limit 1
");
} else {
$escapedStatusIds = array_map('intval', $sourceStatusIds);
$inClause = implode(',', $escapedStatusIds);
$query = xtc_db_query("
SELECT orders_id, customers_name, customers_id, date_purchased, orders_status
FROM orders
WHERE orders_status IN ($inClause) limit 2
");
}
while ($order = xtc_db_fetch_array($query)) {
$orderId = (int)$order['orders_id'];
$customerId = (int)$order['customers_id'];
$currentStatusId = (int)$order['orders_status'];
$orderAge = (time() - strtotime($order['date_purchased'])) / 3600;
if ($orderAge < $minOrderAgeInHours) {
continue;
}
$comment = 'Wir haben Ihre Bestellung nicht vergessen, brauchen aber aus logistischen Gründen noch etwas Zeit. Bitte sehen Sie von Rückfragen zum Bestellstatus ab, außer bei dringenden Fällen.';
try {
// Update Order Status und add Status History Entry mit Benachrichtigung
$orderWriteService->updateOrderStatus(
new IdType($orderId),
new IntType($currentStatusId),
new StringType($comment),
new BoolType($notifyCustomer),
new IdType($customerId) //
);
} catch (Exception $e) {
echo "Fehler: " . $e->getMessage();
}
}
echo 'Benachrichtigungen abgeschlossen.';