在Sage API 3.1上使用Laravel 5.7中的Guzzle 6丢失请求正文

时间:2018-12-12 12:19:33

标签: laravel guzzle6

根据SAGE API 3.1 manual,要创建发票,您必须传递以下信息:

POST /sales_invoices
Content-Type: application/json
Accept: */*

{
  "sales_invoice": {
    "contact_id": "14d93840783b11e8990a122c8428e4b2",
    "date": "2018-06-24",
    "invoice_lines": [
      {
        "description": "A Minimal Invoice Item",
        "ledger_account_id": "4195173e75db11e8990a122c8428e4b2",
        "quantity": "1",
        "unit_price": "0.99",
        "tax_rate_id": "584793ca75db11e8990a122c8428e4b2"
      }
    ]
  }
}

好吧,在我的代码上

$client = new Client();

$endpoint = $this->endpoint.'/'.$this->action; // https://api.accounting.sage.com/v3.1/sales_invoices

$response = $client->post($endpoint, [
                'headers' => [
                    'Accept' => 'application/json',
                    'Authorization' => 'Bearer '.$this->token // My token valid
                ],
                'form_params' => $this->params
            ]);

我的参数

"sales_invoice" => array:3 [
    "contact_id" => "a39b46d1cb8a4f5a9048c32f7895147c"
    "date" => "2018-03-04"
    "invoice_lines" => array:1 [
      0 => array:5 [
        "description" => "Factura creada por error"
        "ledger_account_id" => "49131457ee4f11e8ae720268dc652fba"
        "quantity" => "1"
        "unit_price" => "0"
        "tax_rate_id" => "ES_EXEMPT"
      ]
    ]
  ]
]

并且Guzzle扩展错误显示了sales_invoice[invoice_lines]中缺少值的问题。

[{
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines] is invalid",
    "$source": "sales_invoice[invoice_lines]"
}, {
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines] is invalid",
    "$source": "sales_invoice[invoice_lines]"
}, {
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines] is invalid",
    "$source": "sales_invoice[invoice_lines]"
}, {
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines][0][description] is missing",
    "$source": "sales_invoice[invoice_lines][0][description]"
}, {
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines][0][ledger_account_id] is missing",
    "$source": "sales_invoice[invoice_lines][0][ledger_account_id]"
}, {
    "$severity": "error",
    "$dataCode": "Validation",
    "$message": "sales_invoice[invoice_lines][0][unit_price] is missing",
    "$source": "sales_invoice[invoice_lines][0][unit_price]"
}]

此代码有什么问题?

1 个答案:

答案 0 :(得分:0)

与其通过form_params发送,而不是通过json发送有效载荷:

$response = $client->post($endpoint, [
    'headers' => [
         'Authorization' => 'Bearer '.$this->token // My token valid
    ],
    'json' => $this->params
]);
  

内容类型标头application/json是自动添加的。