Sendgrid v3 api返回错误请求

时间:2017-02-22 19:39:40

标签: javascript ajax sendgrid

我正在尝试使用sendgrid V3 api将我们的用户添加到邮件列表中。我构建了以下Ajax请求来访问他们的API,但我不断收到bad request错误。我省略了xhr.setRequestHeader,但我确实有一个有效的API密钥并且它可以工作,因为当它被省略时,它会返回403.现在,我只是因为错误的请求体而得到400。我已经让我的请求正确看起来像他们的例子,我仍然卡住了。 Example request body from their website

var sendgridData = 
  [
    {
       "marketing_emails": 0,
        "weekly_emails": 0,
        "email": userProfile.email,
        "first_name": "foo",
        "last_name": 'bar',
        "userid": 2,
    }
  ]
 $.ajax({
   method: 'POST',
   url: 'https://api.sendgrid.com/v3/contactdb/recipients',
   data: sendgridData,
   dataType: 'json',
   contentType: 'application/json',
 },
 success: 
 function(res)
 {
   console.log(1, res)

  Modal.close();
   },
   error:
     function(e)
     {
      Modal.close();
      console.log(1,e);
     }
 })

1 个答案:

答案 0 :(得分:1)

更新了代码的工作示例和working jsfiddle

var apiKey = 'Bearer [API KEY HERE]'

var sendgridData = [
  {
    "marketing_emails": 0,
    "weekly_emails": 0,
    "email": 'someperson@example.com',
    "first_name": "foo",
    "last_name": 'bar',
    "userid": 2,
  }
]

$.ajax({
  method: 'POST',
  url: 'https://api.sendgrid.com/v3/contactdb/recipients',
  data: JSON.stringify(sendgridData),
  dataType: 'json',
  headers: { 'Authorization': apiKey },
  crossDomain: true
})
.done(function(res) {
  console.log(1, res)
})
.fail(function (e) {
  console.log(2, e.status, e.responseText)
})

让我们来看看您正在制作的请求并从那里开始。您正在以Content-Type: application/json;向API发送请求并发送一些数据。 API正在使用400 Bad Request进行响应。 API返回400的原因是因为您正在发送服务器不喜欢或无法读取/解析的请求。

您的代码还有其他一些问题:

  1. v3上的Contacts API的端点为https://api.sendgrid.com/v3/contactdb/recipients
  2. 您根本不会发送任何身份验证标头。您可能无法执行此客户端,因为这会给您的Sendgrid 向全世界公开您的API密钥带来巨大的安全风险