在 JSON Returns 正文中向 SendGrid 添加收件人无效
Adding a Recipient to SendGrid in JSON Returns Body is Invalid
首先:我正在使用 Laravel 5.7.10、Guzzle 6.3.3、PHP 7.2.9 和 SendGrid 3.9.6
我只有大约 6 个月的 API 经验,所以请耐心等待我的行话:)
我的客户端请求代码失败:
$client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => [MyAPIKey - Correct and Valid],
'Content-Type' => "application/json",
],
'json' => json_encode(
[
'email' => $emailSent['email']
]
),
]);
在 SendGrid API 文档下,(联系人 API - 收件人 /post)(https://sendgrid.com/docs/API_Reference/api_v3.html):
应将用户添加为 json 编码的 'data' 字段。我试图避免出于令人讨厌的语法原因以及更好的错误处理而发送 cURL 请求。 (我以前用 cURL 写过这个,但不喜欢它。)
但是,当我向 url 发送请求时,理论上应该将他们添加为用户并为他们分配收件人 ID,但我 Laravel 将此错误推回给我:
Client error: POST https://api.sendgrid.com/v3/contactdb/recipients
resulted in a 400 BAD REQUEST
response: {"errors":[{"message":"request body is invalid"}]}
我知道这个变量是有效的,因为我在发送此请求之前已经检查过它,所以据我所知,问题不在于变量。
如有任何帮助,我们将不胜感激 - 我认为这是一个简单的语法错误。
我看过类似的代码
$client->setBody(xyz)
这是我应该看的东西吗?
编辑:感谢帮助,我已经学习并弄明白了。
适用于我的正确有效代码:
(Uri 是 contactdb/recipients 中主要的扩展)
$res = $client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => My API Key,
],
'json' => [
[
'email' => $emailSent['email']
]
],
]);
如评论和答案中所述,通过将 post 定义为 json,您根本不必添加内容类型或对其进行编码。只需用逗号分隔管道! :)
您不必 json_encode
自己 body,它由 Guzzle 完成。只需简单地传递数组:
$client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => [MyAPIKey - Correct and Valid],
],
'json' => [
'email' => $emailSent['email']
],
]);
首先:我正在使用 Laravel 5.7.10、Guzzle 6.3.3、PHP 7.2.9 和 SendGrid 3.9.6
我只有大约 6 个月的 API 经验,所以请耐心等待我的行话:)
我的客户端请求代码失败:
$client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => [MyAPIKey - Correct and Valid],
'Content-Type' => "application/json",
],
'json' => json_encode(
[
'email' => $emailSent['email']
]
),
]);
在 SendGrid API 文档下,(联系人 API - 收件人 /post)(https://sendgrid.com/docs/API_Reference/api_v3.html):
应将用户添加为 json 编码的 'data' 字段。我试图避免出于令人讨厌的语法原因以及更好的错误处理而发送 cURL 请求。 (我以前用 cURL 写过这个,但不喜欢它。)
但是,当我向 url 发送请求时,理论上应该将他们添加为用户并为他们分配收件人 ID,但我 Laravel 将此错误推回给我:
Client error:
POST https://api.sendgrid.com/v3/contactdb/recipients
resulted in a400 BAD REQUEST
response: {"errors":[{"message":"request body is invalid"}]}
我知道这个变量是有效的,因为我在发送此请求之前已经检查过它,所以据我所知,问题不在于变量。
如有任何帮助,我们将不胜感激 - 我认为这是一个简单的语法错误。
我看过类似的代码
$client->setBody(xyz)
这是我应该看的东西吗?
编辑:感谢帮助,我已经学习并弄明白了。
适用于我的正确有效代码: (Uri 是 contactdb/recipients 中主要的扩展)
$res = $client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => My API Key,
],
'json' => [
[
'email' => $emailSent['email']
]
],
]);
如评论和答案中所述,通过将 post 定义为 json,您根本不必添加内容类型或对其进行编码。只需用逗号分隔管道! :)
您不必 json_encode
自己 body,它由 Guzzle 完成。只需简单地传递数组:
$client->request('POST', 'contactdb/recipients', [
'headers' => [
'Authorization' => [MyAPIKey - Correct and Valid],
],
'json' => [
'email' => $emailSent['email']
],
]);