无法通过 API 422 错误向 Sage One Post 开具发票

Unable to Post an invoice to Sage One via API 422 Error

我能够根据 SAGE ONE API 进行身份验证,并且还能够从 API 检索数据,但是我现在正在尝试 post 一张简单的发票,但是不断收到422 错误。有什么明显的我想念的吗?

我已经仔细检查了 JSON 结构和我提供的值,它们都是有效的。不确定我在这里做错了什么!

我的 JSON 包看起来像这样

{"contact_id":"66b76fa19edc11e797950a57719b2edb",
"date":"2019-04-13",
"invoice_lines":[{"description":"Test Description",
"ledger_account_id":"0367afd89ece11e797950a57719b2edb","quantity":1,"unit_price":100}]}

code 

Dim http As HttpWebRequest = WebRequest.Create(New Uri("https://api.columbus.sage.com/uki/sageone/accounts/v3/sales_invoices"))
            http.Method = "POST"
            http.ContentType = "application/json"
            http.Accept = "application/json"
            http.Headers.Add("X-Site", "mysite")
            http.Headers.Add("ocp-apim-subscription-key", "mykey")
            http.Headers.Add("Authorization", "Bearer " mytoken)

            Dim data = Encoding.UTF8.GetBytes(json)
            http.ContentLength = data.Length

            Dim stream = http.GetRequestStream()
            stream.Write(data, 0, data.Length)
            stream.Close()

            Dim response = http.GetResponse().GetResponseStream()

这个 POST 主体对我有用(具有不同的 ID):

{
  "sales_invoice": {
    "contact_id": "66b76fa19edc11e797950a57719b2edb",
    "date": "2019-04-13",
    "main_address": { "address_line_1": "42 Test Street" },
    "invoice_lines": [
      {
        "description": "Test Description",
        "ledger_account_id": "0367afd89ece11e797950a57719b2edb",
        "quantity": 1,
        "unit_price": 100,
        "tax_rate_id": "GB_NO_TAX"
      }
    ]
  }
}

您需要用一个键来包装您的 JSON 结构,该键是您的资源名称(在本例中为 "sales_invoice")。

您还需要指定一个主要地址,以及每个订单项的税率 ID。

为确保您的销售发票有一个有效的分类帐户,请获取可能的帐户列表:

GET /ledger_accounts?visible_in=sales