Работя върху PHP приложение, интегрирано за shopify. По принцип информацията за продукта трябва да бъде синхронизирана между "магазина" и приложението. Вътре в продуктите имаме варианти (подобни на подпродукти). Shopify използва за изпращане на уеб кукички с json данни, за да докладва тези промени. Всеки път, когато променя/добавя/изтривам вариант, shopify изпраща уебкукичка за „актуализация на продукта“, която променя само json съдържанието. Това е пример:
{
...
"variants": [{
"id": 279656846,
"position": 1,
"price": "80.00",
"product_id": 123022448,
"sku": "1000",
"option1": "30 cm",
"inventory_quantity": 10
},
{
"id": 291321287,
"position": 2,
"price": "15.00",
"product_id": 123022448,
"sku": "1003",
"option1": "15 cm",
"inventory_quantity": 23
}],
...
}
Ако създам нов вариант, той ми изпраща „актуализация на продукта“ с текущо състояние и има новия вариант в json. По същия начин, ако изтрия, той ми изпраща само „актуализация на продукта“ с текущо състояние, но без изтрития вариант в json.
Създадох следния код, който може да третира правилно регистъра на промените/добавянето:
foreach ($jsonArr['variants'] as $rows) {
$variant = $rows['option1'];
$sku = $rows['sku'];
$salesPrice = $rows['price'];
$stockQty = $rows['inventory_quantity'];
$idVar = $rows['id'];
$dupchk = mysql_query("SELECT * FROM `variants` WHERE `idVar`='$idVar'",$con) or die (mysql_error());
$num_rows = mysql_num_rows($dupchk);
if ($num_rows > 0) {
$sql = "UPDATE `variants` SET `variant`='$variant',`sku`='$sku',`salesPrice`='$salesPrice',`stockQty`='$stockQty' WHERE `idVar`='$idVar'";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
}
else {
$sql = "INSERT INTO `variants`(`idVariant`, `idProduct`, `variant`, `sku`, `salesPrice`, `stockQty`, `comments`, `idVar`) VALUES ('','$idProduct','$variant','$sku','$salesPrice','$stockQty','','$idVar')";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
}
}
Проблемът е, че този код не обработва случай на вариант за изтриване. Опитах се да го направя, но досега създавах само „голям объркващ“ код, който не можеше да работи. Моля, дайте съвет, ако имате някакво предложение за интелигентен начин за справяне с него.