【问题标题】:BigCommerce Orders API: unable to updateBigCommerce 订单 API:无法更新
【发布时间】:2022-04-08 06:13:59
【问题描述】:

我正在尝试使用对 V2 订单 API 的 PUT 请求更新商店中的现有订单:

https://api.bigcommerce.com/stores/{$$.env.store_hash}/v2/orders/{id}

根据docs,我应该可以更新以下内容:

customer_id, status_id, 添加新产品, 添加自定义产品, billing_address

我唯一成功更改的是 status_id。我可以使用文档页面底部提供的示例正文:

{
  "status_id": 1,
  "billing_address": {
    "first_name": "Trisha",
    "last_name": "McLaughlin",
    "company": "",
    "street_1": "123 Main Street",
    "street_2": "",
    "city": "Anywhere",
    "state": "Some State",
    "zip": "12345",
    "country": "United States",
    "country_iso2": "US",
    "phone": "",
    "email": "elsie@example.com"
  }
}

我得到一个没有正文的 200 OK 响应。但在商店中只有状态发生变化。如果我故意拼错某个字段,则会收到错误响应,提示我正文格式正确,但被忽略了。

谁能提供一个更新帐单地址或添加 API 将作用的新产品的正文示例?

我目前正在使用 Postman 生成 PUT 请求,但稍后将移至 PHP。

谢谢。

编辑:

这是我尝试添加现有产品的请求示例,也被接受但不起作用。

{
    "products": [{
        "product_id": 111,
        "quantity": 5
    }]
}

编辑 2:为了提供更多上下文,我尝试更新的订单已经有现有产品并且已经“付费”(产品是免费的)。我尝试添加已经在订单中的产品以及新产品。我也在各种状态的订单上试过这个。此外,订单是由访客帐户处理的,因此 customer_id 字段为 0。我没有尝试使用注册帐户订单执行此操作。这些事情中的任何一个都可能导致问题吗?

编辑 3:对于其他路过的人来说,这似乎是与可下载产品相关的错误。有关详细信息,请参阅已接受答案下的评论链。

【问题讨论】:

  • 您能否提供一个请求正文的示例?
  • @T.J.我正在使用他们提供的示例,该示例在问题中被引用。
  • 使用上面的示例并将 product_id 更改为商店中的一个,它确实返回 200。然后对产品子资源(developer.bigcommerce.com/api-reference/orders/orders-api/…)进行查询,我可以看到它已添加到订单中。
  • @T.J.对不起,这对我根本不起作用。你的身体里有其他东西吗?我正在使用带有原始应用程序/json 主体的 V2 API。标头是客户端、令牌、内容类型和接受。我正在查看商店并查询 {order_id}/products API,但都没有反映任何变化。这是邮递员的问题吗?我可以尝试用 PHP 发出请求,看看是否可行。
  • 经过测试,我们似乎需要更新如何将新产品添加到订单中。示例中的结构不正确。我无法重现您遇到的其他问题,我在下面列出了每个 PUT 的示例正文。

标签: bigcommerce


【解决方案1】:

添加新产品:

{
    "products": [{
        "name": "Poster",
        "quantity": 5,
        "price_inc_tax": 12.45,
        "price_ex_tax": 10.12
    }]
}

添加现有产品:确保将 product_id 更新为商店中的产品。

{
    "products": [{
        "product_id": 187,
        "quantity": 5,
        "price_inc_tax": 12.45,
        "price_ex_tax": 10.12
    }]
}

它将返回 200。然后查询 Order Products 以查看订单上的产品列表。

要更新帐单地址,此结构有效:

{
"billing_address": {
    "first_name": "Jane",
    "last_name": "Doe",
    "company": "",
    "street_1": "455 Main Street",
    "street_2": "",
    "city": "Austin",
    "state": "Texas",
    "zip": "78751",
    "country": "United States",
    "country_iso2": "US",
    "phone": "",
    "email": "rick@sanchez.com"
}
}

客户 ID 需要与商店中存在的客户 ID 匹配。要获取客户列表,请使用customers endpoint

{
    "customer_id": 20
}

【讨论】:

  • 您好,恐怕这仍然不适合我。为了提供更多上下文,我尝试更新的订单已经有现有产品并且已经“付费”(产品是免费的)。我尝试添加已经在订单中的产品以及新产品。我也在各种状态的订单上试过这个。此外,订单是由访客帐户处理的,因此 customer_id 字段为 0。我没有尝试使用注册帐户订单执行此操作。这些事情中的任何一个都可能导致问题吗?
  • 您是否要添加金额为 0 美元的产品?请提供您的代码,而不是文档示例代码。您只能更新存在的客户。这意味着他们在商店中有一个客户 ID。尝试添加不存在的 id 将不起作用。
  • 我测试了客户订单或 customer_id 为 0 并添加了 $0 的产品。两者都为我工作。如果您运行此查询,返回的产品是什么:https://api.bigcommerce.com/stores/{$$.env.store_hash}/v2/orders/{order_id}/products
  • 我没有使用任何原始代码,仅使用作为示例提供的 JSON 以及您提供的 JSON。唯一的修改是将 product_id 更改为 111,这对应于默认存在于新商店中的示例产品(价格为 25 美元)。我还尝试了与我创建的免费数字项目相对应的 product_id,但没有成功。通过帐单地址更新,我的意思是更改订单上列出的帐单地址,而不是在客户帐户中(没有客户帐户,因为它是客人结帐)。但是,我可以成功更改与订单关联的 customer_id。
  • 这是我得到的回复:imgur.com/a/94EkwGs 这是最初在通过店面结账流程添加的订单中的商品。
【解决方案2】:

根据此页面: https://developer.bigcommerce.com/api-reference/b3A6MzU5MDQ3MzE-update-an-order

它说:

“状态将包括订单状态下定义的(字符串、选项)值之一。此值是只读的。不要尝试在 POST 或 PUT 操作中修改或设置此值。”

您似乎无法从 api 更新订单状态...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多