0
votes

I am developing a VB.NET application to interact with our new Shopify store. I am in the process of automating product additions/updates/removal based on data in our Oracle database.

Basically the application creates a new Shopify part for a pattern, then creates product variants for each sku in that pattern. It does this by POSTing and PUTing requests using the HttpWebRequest class. This was working great through yesterday afternoon, now today for some reason it's failing on the product variant creation/update with a 404 - Not Found error code.

The product add request JSON is below. This works perfectly, it creates the part on Shopify which I can then see through the admin panel. This is POSTed to the URL "https://key:[email protected]/admin/products.json" (where key and password are replaced with our credentials)

{
    "product": {
        "id": 0,
        "body_html": "A classic combination of embroidery and cut work form the flowing border, creating your own seaside retreat. ",
        "title": "Seabreeze Sand",
        "vendor": "SKL",
        "product_type": "",
        "published_scope": "global",
        "tags": "J71227",
        "variants": null,
        "options": null,
        "images": [{
            "id": 0,
            "product_id": 0,
            "position": 1,
            "src": "http:\/\/i320.photobucket.com\/albums\/nn353\/fkhphoto\/J71227main.jpg",
            "variant_ids": null
        }],
        "image": null
    }
}

This is the JSON reply I'm receiving after this call, and I can also see the part added in the Shopify admin panel:

{
    "product": {
        "id": 7874734983,
        "title": "Seabreeze Sand",
        "body_html": "A classic combination of embroidery and cut work form the flowing border, creating your own seaside retreat. ",
        "vendor": "SKL",
        "product_type": "",
        "created_at": "2016-07-14T10:43:56-04:00",
        "handle": "seabreeze-sand",
        "updated_at": "2016-07-14T10:43:56-04:00",
        "published_at": "2016-07-14T10:43:56-04:00",
        "template_suffix": null,
        "published_scope": "global",
        "tags": "J71227",
        "variants": [{
            "id": 24925005383,
            "product_id": 7874734983,
            "title": "Default Title",
            "price": "0.00",
            "sku": "",
            "position": 1,
            "grams": 0,
            "inventory_policy": "deny",
            "compare_at_price": null,
            "fulfillment_service": "manual",
            "inventory_management": null,
            "option1": "Default Title",
            "option2": null,
            "option3": null,
            "created_at": "2016-07-14T10:43:56-04:00",
            "updated_at": "2016-07-14T10:43:56-04:00",
            "taxable": true,
            "barcode": null,
            "image_id": null,
            "inventory_quantity": 1,
            "weight": 0.0,
            "weight_unit": "lb",
            "old_inventory_quantity": 1,
            "requires_shipping": true
        }],
        "options": [{
            "id": 9404426823,
            "product_id": 7874734983,
            "name": "Title",
            "position": 1,
            "values": ["Default Title"]
        }],
        "images": [{
            "id": 16242879303,
            "product_id": 7874734983,
            "position": 1,
            "created_at": "2016-07-14T10:43:56-04:00",
            "updated_at": "2016-07-14T10:43:56-04:00",
            "src": "https://cdn.shopify.com/s/files/1/1363/2407/products/J71227main.jpg?v=1468507436",
            "variant_ids": []
        }],
        "image": {
            "id": 16242879303,
            "product_id": 7874734983,
            "position": 1,
            "created_at": "2016-07-14T10:43:56-04:00",
            "updated_at": "2016-07-14T10:43:56-04:00",
            "src": "https://cdn.shopify.com/s/files/1/1363/2407/products/J71227main.jpg?v=1468507436",
            "variant_ids": []
        }
    }
}

Immediately after that, I'm POSTing the following JSON to add a product variant to this newly created part, to the URL "https://key:[email protected]/admin/products/7874734983/variants.json". This is the call that returns a 404 - Not Found error through the HttpWebRequest class.

{
    "variant": {
        "id": 0,
        "product_id": 7874734983,
        "title": "Seabreeze Tier Curtain in Sand",
        "price": "11.99",
        "sku": "J7122700013V09",
        "compare_at_price": "0.00",
        "position": 0,
        "grams": 0,
        "option1": "57X13 ROD POCKET VAL",
        "option2": null,
        "option3": null,
        "taxable": true,
        "barcode": "036326422417",
        "weight": 0,
        "weight_unit": "lb",
        "inventory_quantity": 550,
        "old_inventory_quantity": 550,
        "requires_shipping": true,
        "image_id": null,
        "metafields": [{
            "id": 0,
            "key": "point1",
            "value": "57 x 13 Valance",
            "value_type": "string",
            "namespace": "J7122700013V09"
        },
        {
            "id": 0,
            "key": "point2",
            "value": "To achieve the look in the photo, use one valance and one tier pair.",
            "value_type": "string",
            "namespace": "J7122700013V09"
        },
        {
            "id": 0,
            "key": "point3",
            "value": "Feels like you are in your own beach cottage.",
            "value_type": "string",
            "namespace": "J7122700013V09"
        },
        {
            "id": 0,
            "key": "point4",
            "value": "100% Polyester.",
            "value_type": "string",
            "namespace": "J7122700013V09"
        },
        {
            "id": 0,
            "key": "point5",
            "value": " ",
            "value_type": "string",
            "namespace": "J7122700013V09"
        }]
    }
}

What am I doing wrong? The URLs, when copied into a web browser, work perfectly fine...I can see all the JSON of the current data. But when attempting to add the variant, I'm getting the 404.

1

1 Answers

1
votes

Try leaving out the "id": 0 properties — both from the variant and from the metafields. Shopify will determine the IDs automatically.