Возникли проблемы при отправке запросов к API с использованием AJAX - PullRequest
2 голосов
/ 10 октября 2019

Моя компания использует программное обеспечение nocrm.io для отслеживания потенциальных клиентов и клиентов. Я хотел бы использовать их API в нашем веб-приложении, чтобы иметь возможность получать и размещать информацию. В настоящее время у меня возникают проблемы при попытке сделать http-запросы в нашем веб-приложении с использованием их API. Каждый раз, когда я пытаюсь выполнить запрос GET для проверки связи с APIKey, я получаю сообщение об ошибке 401. Я пытался делать запросы через Postman, и они работают, но когда я пытаюсь реализовать эти запросы в моем приложении, они этого не делают, что немного расстраивает.

Если кто-то имел опыт использования этого APIили что-то подобное, что могло бы помочь мне, это было бы здорово.

Вот ссылка на их API: https://youdontneedacrm.com/api#nocrm.io-api

В настоящее время я использую jquery AJAX для выполнения запросов. Я попытался поместить APIKey в заголовки, как предлагает их API, но это просто дает мне 401 и CORS. Их API также предполагает, что вы можете поместить APIKey в параметры запроса, но я все равно получаю ту же ошибку 401.

Да, я также убедился, что APIKey, который я использую, является правильным, так чтоЭто не проблема.

Я поместил запрос в браузер, который возвращает статус 200, говорящий, что мой APIKey также верен.

Ниже приведено то, что в настоящее время дает мне 401 ошибку.

myfile.js

import $ from 'jquery'
const api_key = require('../../../env.config.json').CRM.API_KEY;

class Myfile extends React.Component{

 constructor(props){
  super(props);
  this.state = {}
 }

    PingApi(){
        var url = 'https://OUR_ACCOUNT.nocrm.io/api/v2/ping'
        var apikey = api_key

        var dataObject = {
            'X-API-KEY': apikey
        }

        $.ajax({
            type: 'GET',
            dataType: 'jsonp',
            url: url,
            data: dataObject,
            headers: {"Accept": "application/json"},
            crossDomain: true,
            beforeSend: function(xhr){
                xhr.withCredentials = true;
            },
            success: function(data, textStatus, jqXHR){
                console.log("Good");
            },
            error: function(jqXHR, textStatus, errorThrown){
                console.log(jqXHR);
                console.log(textStatus);
                console.log(errorThrown);
            }
        })
    }


 render(){
  return(
   <button onClick={this.PingApi.bind(this)}>Ping API</button>
  );
 }
}

export default Myfile

Я ожидал получить статус 200 с возвращенным объектом json, но вместо этого получил401.

EDIT Вот скриншот запроса, работающего в Почтальоне. Очевидно, я заблокировал конфиденциальную информацию по соображениям безопасности. И да, API-ключ такой же, как тот, который я использую в нашем веб-приложении.

enter image description here

1 Ответ

1 голос
/ 10 октября 2019

Хотя вы можете передавать ключ API через тело запроса или заголовки (в соответствии с документами) - вы отправляете запрос GET, где тела нет. Передайте его через заголовок:

headers: {"Accept": "application/json", "X-API-KEY": apikey}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...