将收件人添加到JSON返回正文中的SendGrid无效

时间:2018-10-26 18:02:53

标签: php laravel rest guzzle laravel-5.7

首要事项:我正在使用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文档中,(联系人API-收件人/ 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响应:{“错误”:[{“消息”:“请求正文无效”}]}}

我知道该变量是有效的,正如我在发送此请求之前检查过的那样,所以就我所知,问题不在于变量。

任何帮助将不胜感激-我认为这是一个简单的语法错误。

我看过类似的代码

$client->setBody(xyz)

这是我应该看的东西吗?

编辑:感谢您的帮助,我已经了解并弄清了这一点。

对我有效的正确有效的代码: (Uri是contactdb / recipients中主要对象的扩展)

$res = $client->request('POST', 'contactdb/recipients', [
  'headers' => [
    'Authorization' => My API Key,
  ],
  'json' => [
    [
        'email' => $emailSent['email']
    ]
  ],
]);

如评论和答案中所述,通过将帖子定义为json,您完全不必添加内容类型或对其进行编码。用逗号分隔即可! :)

1 个答案:

答案 0 :(得分:0)

您不必自己json_encode尸体,这是由Guzzle完成的。只需简单地传递数组:

$client->request('POST', 'contactdb/recipients', [
  'headers' => [
    'Authorization' => [MyAPIKey - Correct and Valid],
  ],
  'json' => [
      'email' => $emailSent['email']
  ],
]);