Интеграция PHP Shopify - вариант удаления

Я работаю над приложением PHP, интегрированным в магазин. В основном информация о продукте должна быть синхронизирована между «магазином» и приложением. Внутри продуктов у нас есть варианты (аналогичные подпродуктам). 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());
        }

    }

}

Проблема в том, что этот код не обрабатывает вариант удаления. Я пытался это сделать, но до сих пор создавал только "большой сбивающий с толку" код, который не мог работать. Пожалуйста, посоветуйте, есть ли у вас какие-либо предложения, как с этим справиться.


person Valladão    schedule 01.04.2013    source источник


Ответы (1)


Для решения я использовал следующий код:

//Variable to count variant update or create
$var_count = 0;

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'";
        $var_count++;


        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')";
        $var_count++;

        if (!mysql_query($sql,$con)) {
            die('Error: ' . mysql_error());
        }

    }

}

//Start checking to erase variant if needed
$result = mysql_query("SELECT `idVar` FROM products NATURAL JOIN variants WHERE `idShopify`='$idShopify'",$con);
$num_rows = mysql_num_rows($result);

if ($num_rows>$var_count) {

    while($row = mysql_fetch_array($result))
        {

            $clear = 0;

            foreach ($jsonArr['variants'] as $rows) {

                if ($rows['id']==$row['idVar']) {
                    $clear++;
                }

            }

            if ($clear==0) {

                $idVar = $row['idVar'];
                $sql = "DELETE FROM `variants` WHERE `idVar`='$idVar'";

                if (!mysql_query($sql,$con)) {
                    die('Error: ' . mysql_error());
                }

            }

        }

}

Это не изящно, но сработало. Не стесняйтесь предлагать улучшения кода.

person Valladão    schedule 22.04.2013