2015-02-07 4 views
0

Я работаю с API-интерфейсом PayPal и текущим с этим документом make your firest call.Paypal API с угловыми | 400 (неверный запрос)

Я получил код состояния 400 (Bad Request) с сообщением об ошибке:

Object {ошибка: "invalid_request", error_description: "grant_type параметр является обязательным"}

'Authorization': "Basic RU9KMlMtWjZPb05fbGVfS1MxZDc1d3NaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA6RUNsdXNNRVVrOGU5aWhJN1pkVkxGNWNaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA=", 

В этом случай я использовал клиент-Id и Secret, который предоставленный пример и кодируются их в базе 64.

$http({ 
      url: 'https://api.sandbox.paypal.com/v1/oauth2/token', 
      method: 'POST', 
      headers: {'Content-Type': 'application/x-www-form-urlencoded', 
         'Authorization': "Basic RU9KMlMtWjZPb05fbGVfS1MxZDc1d3NaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA6RUNsdXNNRVVrOGU5aWhJN1pkVkxGNWNaNnkwU0ZkVnNZOTE4M0l2eEZ5WnA=", 
         'Accept-Language': 'en_US' 
         }, 
      data: { grant_type: 'client_credentials' } 
    }).success(function (data, status, headers, config) { 
       console.log(data) 
    }).error(function (data, status, headers, config) { 
       console.log(data) 
    }); 
+0

Так в чем ваш вопрос? – mindparse

ответ

2

Основная причина ваших данных кодируется как JSON вместо application/x-www-form-urlencoded, так что вам нужно сделать, это URL-кодирование данные, подобные:

$http({ 
    method: 'POST', 
    url: url, 
    data: $.param({grant_type: 'client_credentials'}), 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
}) 
0

Вам необходимо включить опцию 'withCredentials. Убедитесь, что вы поместили двоеточие между вашим идентификатором клиента и вашим секретным ключом. Вам не нужно вообще кодировать эти значения, просто используйте те, которые предоставляет Paypal. Я также думаю, что поле данных не должно быть объектом, так как Paypal, похоже, ожидает строку.

Если вы не используете окна, я считаю, что вам нужно установить тип содержимого в JSON, но документация там немного расплывчата. Может быть, попробуйте оба? Я думаю, что этот запрос конфигурации должен работать:

url: 'https://api.sandbox.paypal.com/v1/oauth2/token', 
method: 'POST', 
withCredentials: true, 
headers: {'Content-Type': 'application/json', 
      'Authorization': 'Basic {Client-Id}:{Secret}', 
      'Accept-Language': 'en_US' 
     }, 
data: 'grant_type=client_credentials' 

Наконец, вам может понадобиться настроить ваш $ httpProvider. Я никогда не был, но я не уверен в вашей среде и угловыми версии:

$httpProvider.defaults.useXDomain = true; 
Смежные вопросы