2017-02-22 8 views
0

Я пытаюсь использовать sendgrid V3 api, чтобы добавить наших пользователей в список рассылки. Я создал следующий запрос Ajax, чтобы поразить их API, но я продолжаю получать ошибку bad request. Я опустил xhr.setRequestHeader, но у меня есть действительный ключ API, и он работает, потому что когда он опускается, он возвращает 403. Теперь я просто получаю 400 для тела с плохим запросом. Я сделал свое тело запроса ТОЧНО, как их пример, и я все еще застрял. Example request body from their websiteSendgrid v3 api возвращает неверный запрос

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

Обновлено с рабочим образцом кода и working jsfiddle:

var apiKey = 'Bearer [API KEY HERE]' 

var sendgridData = [ 
    { 
    "marketing_emails": 0, 
    "weekly_emails": 0, 
    "email": '[email protected]', 
    "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) 
}) 

Давайте посмотрим на просьбу вы делаете и идти оттуда. Вы делаете запрос к API и отправляете по некоторым данным, как Content-Type: application/json;. API отвечает 400 Bad Request. Причина, по которой API возвращает 400, заключается в том, что вы отправляете запрос, который сервер не любил или не мог прочитать/проанализировать.

Есть несколько других вещей неправильно с вашим кодом, а также:

  1. Конечная точка для Контакты API на v3 является https://api.sendgrid.com/v3/contactdb/recipients
  2. Вы не посылать вдоль любой заголовки аутентификации на всех. Вероятно, вы не сможете сделать эту клиентскую сторону, так как это будет огромный риск для безопасности, предоставляющий ваш ключ API для Sendgrid миру.
+0

Спасибо за ответ Брэндон. «Контакты» - это опечатка. В моем коде он всегда был '/ contactdb /', и ошибка сохраняется. У меня также есть авторизация с ключом, но я оставил его из своего вопроса по понятным причинам. Любые другие идеи? –

+0

Я могу воспроизвести проблему и иметь рабочий фрагмент кода, я обновлю свой ответ. – brandon927

Смежные вопросы