Goedemorgen,
Ik heb een vraag betreft een script/api waar ik maar niet uitkom.
Het gaat om een API script die contact maakt met de kassa en WooCommerce.
Die script moet kijken met behulp van de API wat de voorraad, prijs en actieprijs is, dit moet dan synchoom lopen met WooCommerce.
Mocht iemand kunnen helpen graag, Echter heb ik al een voorbeeld script, mocht het nodig zijn.
Mocht je willen helpen hoor ik graag van je en super bedankt.
Beste Ariën,
Dit is wat ik heb, echter loop hij niet het hele lijstje van de sku's ik heb 8000 producten maar hij checkt er misschien 8/1200. Ik heb er een cronjob van gemaakt. Zie hieronder de script die ik geschreven heb, echter heb ik ook de timeout tijd verlengd ipv 3600 heb ik maar 7200 gedaan, want ik dacht misschien is dat het. Dit scriptje gaat naar de kassa kijken wat de data is van de producten, prijs, actieprijs en voorraad de script haalt de gegevens op en slaat ze op in het database van WooCommerce.
// Get product data from ASPOS using SKU
$aspos_endpoint = "/api/products/scancode/$sku_value?expand=StockInfo,DefaultScanCode,ScanCodes,Discount";
$aspos_url = $asposBaseUrl . $aspos_endpoint;
// Check if product is found
if (isset($aspos_data['errors']) && $aspos_data['errors'][0]['errorCode'] === 'product_not_found') {
// Product not found with the original SKU, try with leading zero
$sku_value_with_zero = '0' . $sku_value;
$aspos_endpoint = "/api/products/scancode/$sku_value_with_zero?expand=StockInfo,DefaultScanCode,ScanCodes,Discount";
$aspos_url = $asposBaseUrl . $aspos_endpoint;
// Parse ASPOS response again
$aspos_data = json_decode($aspos_response, true);
}
// Now you can proceed with processing the ASPOS data as before
// Check if product is found and proceed accordingly
if (isset($aspos_data['errors']) && $aspos_data['errors'][0]['errorCode'] === 'product_not_found') {
// Product not found in ASPOS as well
// Handle the case where the product is not found
echo "Product not found for SKU: $sku_value";
} else {
// Product found, proceed with further processing
$regular_price = $aspos_data['priceInclTax'];
$sale_price = $aspos_data['discount']['priceInclTax'];
$manage_stock = 'true';
$stock_quantity = $aspos_data['stockInfo'][0]['availableQuantity'];
// Continue with your existing logic for updating WooCommerce product data
}
}
// Free the result set
$result->free();
} else {
echo 'Error executing the query: ' . $mysqli->error;
}
// Close the database connection
$mysqli->close();
Via cronjobs is altijd een goed idee. Ook kan je het eens proberen om het via de CLI uit te voeren, als je die mogelijkheid hebt.
Waar die op vastloopt is inderdaad wat uitzoekwerk, goede debugging moet je de goede richting op helpen. Het kan ook zijn dat de server die je opvraagt, het bijltje erbij neerlegt.
?Onbekende gebruiker
19-03-2024 21:20
Beste Arien, helaas dit blijkt dus niet de oplossing, echter wel geprobeerd, vandaar de later reactie. Door het proberen.
Opmerkelijk. Dat is just de oplossing. Als dat niet werk, dan mis je een paar controlepunten in je code.
Log elke actie die er plaatsvind in een textbestand, en doe dat bij elke iteratie van een product. Houd daarbij ook de tijd bij hoelang elke actie duurt, en toon bij elke iteratie hoelang die duurde.
Als je ergens een time-out heb, dan moet je in een oogopslag kunnen zien waar het fout gaat, waar het script eindigt, en hoelang welk proces duurde.
Als je Monolog gebruikt, dan kan je zoiets als dit gebruiken:
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Configureer Monolog om logs naar een bestand te schrijven
$log = new Logger('cronjob');
$log->pushHandler(new StreamHandler('logs/app.log', Logger::INFO));
// Start de timer
$startTime = microtime(true);
// Simuleer een actie
$log->info('Actie gestart');
sleep(2); // Simuleer een actie die 2 seconden duurt
$log->info('Actie voltooid');
// Bereken de verstreken tijd
$endTime = microtime(true);
$elapsedTime = $endTime - $startTime;
// Log de verstreken tijd met Monolog
$log->info("Verstreken tijd voor actie: $elapsedTime seconden");
?>