【发布时间】:2018-10-27 03:40:31
【问题描述】:
首先:我正在使用 Laravel 5.7.10、Guzzle 6.3.3、PHP 7.2.9 和 SendGrid 3.9.6
我只有大约 6 个月的 API 经验,所以请耐心等待 jargan :)
我的客户请求代码失败:
$client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => [MyAPIKey - Correct and Valid],
'Content-Type' => "application/json",
],
'json' => json_encode(
[
'email' => $emailSent['email']
]
),
]);
在 SendGrid API 文档下,(Contacts API - Recipients /post)(https://sendgrid.com/docs/API_Reference/api_v3.html):
应将用户添加为 json 编码的“数据”字段。由于令人讨厌的语法原因以及更好的错误处理,我试图避免发送 cURL 请求。 (我以前用 cURL 写过这个,不喜欢。)
但是,当我向这个 url 发送请求时,理论上应该将它们添加为用户并为它们分配一个收件人 ID,我让 Laravel 将此错误推送给我:
客户端错误:
POST https://api.sendgrid.com/v3/contactdb/recipients导致400 BAD REQUEST响应:{"errors":[{"message":"request body is invalid"}]}
我知道这个变量是有效的,因为我在发送这个请求之前已经检查过了,所以据我所知问题不是变量。
任何帮助将不胜感激 - 我认为这是一个简单的语法错误。
我见过类似的代码
$client->setBody(xyz)
这是我应该看的东西吗?
编辑:感谢帮助,我已经学会并解决了这个问题。
适用于我的正确且有效的代码: (uri是contactdb/recipients中main的扩展)
$res = $client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => My API Key,
],
'json' => [
[
'email' => $emailSent['email']
]
],
]);
如 cmets 和 answers 中所述,通过将帖子定义为 json,您根本不必添加内容类型或对其进行编码。只是用管道逗号分隔! :)
【问题讨论】:
标签: php laravel rest guzzle laravel-5.7