简体   繁体   English

PHP Shopify集成-删除变体

[英]PHP Shopify integration - variant delete

I'm working on a PHP application integrated to shopify. 我正在开发集成到shopify的PHP应用程序。 Basically product information must be sync between the "shop" and application. 基本上,产品信息必须在“商店”和应用程序之间同步。 Inside the products we have variants (similar to sub products). 在产品内部,我们有变体(类似于子产品)。 Shopify used to send webhooks with json data to report these changes. Shopify过去发送带有json数据的webhook来报告这些更改。 Every time I change/add/delete a variant, shopify send a "product update" webhook that changes only the json content. 每当我更改/添加/删除变体时,shopify都会发送一个“产品更新” webhook,该Webhook仅更改json内容。 This is a example: 这是一个例子:

{
...
    "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
    }],
...
}

If I create a new variant it sends me a "product update" with current status, and has the new variant in json. 如果我创建一个新的变体,它将向我发送一个具有当前状态的“产品更新”,并且在json中具有新的变体。 Similarly, if I delete, it only send me a "product update" with current status, but without the deleted variant in json. 同样,如果删除,它只会向我发送具有当前状态的“产品更新”,而不会在json中删除已删除的变体。

I created the following code that can treat properly the change/add case: 我创建了以下代码,可以正确处理更改/添加的情况:

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());
        }

    }

}

The problem is that this code does not handle the delete variant case. 问题在于此代码无法处理delete变体情况。 I tried to do it but until now only create a "big confusing" code that could not work. 我尝试这样做,但直到现在为止只能创建无法使用的“大混乱”代码。 Please, advise if you have any suggestion to a smart way to handle it. 请告知您是否有任何明智的处理方法的建议。

To solve I used following code: 为了解决这个问题,我使用了以下代码:

//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());
                }

            }

        }

}

This is not elegant but worked. 这不是很优雅,但是可行。 Feel free to suggest code improvements. 随意提出代码改进建议。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM