laravel - 在 Laravel 5.7 中使用 Guzzle 6 在 Sage API 3.1 上工作时缺少请求正文
问题描述
根据 SAGE API 3.1手册,要创建发票,您必须通过以下内容:
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]"
}]
这段代码有什么问题?
解决方案
与其通过 发送它form_params
,不如将有效负载发送为json
:
$response = $client->post($endpoint, [
'headers' => [
'Authorization' => 'Bearer '.$this->token // My token valid
],
'json' => $this->params
]);
内容类型标头
application/json
会自动添加。
推荐阅读
- c++ - 使用 GoogleMock 模拟由被测代码创建的实例
- php - PHP Soap“捕获异常:服务器无法处理请求。---> 对象引用未设置为对象的实例。”
- apache-flink - Apache Flink:作业完成后如何做一些动作?
- php - 使用 php 和 mysql 进行搜索查询的问题
- swift - 如何快速为每个单元格添加不同的附件(或子视图)?
- python - Python 3 Multiprocessing - 我应该使用多少个进程?
- c++ - C++:为什么会出现错误:“数组初始值设定项必须是初始值设定项列表或字符串文字”?
- amazon-web-services - 识别目标组中的 AWS 不健康主机
- html - 无法在我的 html 页面中集成 mp4 视频
- jquery - JQuery 新行