json 使用API - Python创建印刷产品

jgwigjjp  于 2023-03-09  发布在  Python
关注(0)|答案(1)|浏览(127)

我正在尝试使用Printful API和Python创建一个产品。我能够在那里的网站上创建一个产品(一个基本的)连帽衫,我想尝试使用Python创建相同的连帽衫。
下面是我正在使用的文档:https://developers.printful.com/docs/#operation/createSyncProduct
我不断得到这个错误,这是非常普遍的:

{
    "code": 400,
    "result": "This API endpoint applies only to Printful stores based on the Manual Order / API platform. Find out more at Printful API docs.",
    "error": {
        "reason": "BadRequest",
        "message": "This API endpoint applies only to Printful stores based on the Manual Order / API platform. Find out more at Printful API docs."
    }
}

下面是我正在尝试测试的代码:

import requests
import json

my_key = "my_token"

headers = {
    "Authorization" : "Bearer "+my_key
}

data = {
            "id": 302079884,
            "external_id": "8136758395169",
            "name": "Unisex Hoodie",
            # "variants": 6,
            "thumbnail_url": "https://cdn.shopify.com/s/files/1/0713/4275/2033/products/unisex-premium-hoodie-black-front-64079acdc1ff0_grande.jpg?v=1678219998",
            "is_ignored": False
        }
data = json.dumps(data)

products = requests.post("https://api.printful.com/store/products",headers=headers,data=data)
print(json.dumps(products.json(),indent=4))

我不确定如何测试这段代码,因为响应非常笼统。
我能够通过尝试获取我在网站上制作的产品来测试我的令牌以确保它工作:

import requests
import json

my_key = "my_token"

headers = {
    "Authorization" : "Bearer "+my_key
}

products = requests.get("https://api.printful.com/sync/products",headers=headers)
print(json.dumps(products.json(),indent=4))

我得到的回答是:

{
    "code": 200,
    "result": [
        {
            "id": 302079884,
            "external_id": "8136758395169",
            "name": "Unisex Hoodie",
            "variants": 6,
            "synced": 6,
            "thumbnail_url": "https://cdn.shopify.com/s/files/1/0713/4275/2033/products/unisex-premium-hoodie-black-front-64079acdc1ff0_grande.jpg?v=1678219998",
            "is_ignored": false
        }
    ],
    "extra": [],
    "paging": {
        "total": 1,
        "offset": 0,
        "limit": 20
    }
}

所以我知道我正确地点击了API。如果有人对如何使用Printful API创建基本产品有任何建议,那将是非常棒的。

EDIT:我还尝试了@Driftr95提到的将数据 Package 在“sync_product”周围的方法,但仍然不起作用。下面是新的数据变量:

data = {
    "sync_product": {
        "name": "API product Bella",
        "thumbnail": "https://imagemagick.org/image/wizard.jpg"
    },
    "sync_variants": [
        {
            "retail_price": "21.00",
            "variant_id": 44666144522529,
            "files": [
                {
                    "url": "https://imagemagick.org/image/wizard.jpg"
                },
                {
                    "type": "back",
                    "url": "https://imagemagick.org/image/wizard.jpg"
                }
            ]
        }
    ]
}

但我还是得到了

{
    "code": 400,
    "result": "This API endpoint applies only to Printful stores based on the Manual Order / API platform. Find out more at Printful API docs.",
    "error": {
        "reason": "BadRequest",
        "message": "This API endpoint applies only to Printful stores based on the Manual Order / API platform. Find out more at Printful API docs."
    }
}

那个回应是如此的模糊,以至于很难判断我试图发送的帖子数据有什么问题。

vsikbqxv

vsikbqxv1#

我自己想出了答案。对于那些将来遇到这个问题的人,我想最好显示代码。
首先解决这个问题:
{“代码”:400,“结果”:“此API终结点仅适用于基于手动订单/ API平台的Printful商店。有关详细信息,请参阅Printful API docs。",“error”:{“原因”:“请求错误”,“消息”:“此API终结点仅适用于基于手动订单/ API平台的Printful商店。有关详细信息,请参阅Printful API文档。”} }
是因为我当时用的是一个直接针对shopify的API token/key,当你为printful创建一个API key/token的时候,它会问你想要它应用到哪个商店,由于当时我只有一个测试shopify商店,所以我决定用那个token,但我使用的端点不允许你直接从printful创建产品到shopify或你的电子商务商店。因此,我创建了一个只使用printful的测试存储,并使用了一个直接用于此目的的API密钥/令牌。
然后我遇到了另一个问题,因为我没有指定颜色的连帽衫我试图创造。所以我决定尝试一个样机,我认为这是最基本的东西,你可以。
以下是修复代码的方法。尝试以下示例数据,应该可以正常工作:

data = {
    "sync_product": {
            "name": "Test Product",
        },
        "sync_variants": [
            {
                "external_id": "44666144522529",
                "variant_id": 10779,
                "retail_price": "31.00",
                "sku": "7563051_10779",
                "files": [
                    {
                        "type": "mockup",
                        "url": None,
                    }
                ]
            }
        ]
}

从这里开始,你可以根据printful目录中可以使用的产品,慢慢调整你所需要的东西。

相关问题