Venmo Oauth 2.0 с использованием Ionic Framework - ошибка 400 неверных запросов

В настоящее время я пытаюсь войти в свое приложение, построенное на Ionic Framework, с помощью Oauth API Venmo. Я пытаюсь использовать поток на стороне сервера, чтобы получить токен более длительного доступа. Я могу получить код и установить его для переменной requestToken.

Однако, когда я пытаюсь опубликовать сообщение на " https://api.venmo.com/v1/oauth/access_token " с помощью своего идентификатора клиента, секрета клиента и маркера запроса, я получаю следующее сообщение об ошибке: "ОШИБКА: [объект объекта ]".

При проверке моей консоли я вижу, что ошибка связана с ошибкой 400 Bad Request, поступающей в мой пост-запрос, хотя, похоже, у меня есть действительный токен запроса. Сообщение об ошибке выглядит следующим образом: "Не удалось загрузить ресурс: сервер ответил со статусом 400 (неверный запрос)".

Ниже приведен код функции входа в систему, которую я использую для входа через Oauth API Venmo:

//VENMO SERVER SIDE API FUNCTION
var requestToken = "";
var accessToken = "";
var clientId = "CLIENT_ID_HERE";
var clientSecret = "CLIENT_SECRET_HERE";

$scope.login = function() {
  var ref = window.open('https://api.venmo.com/v1/oauth/authorize?client_id=' + clientId + '&scope=make_payments%20access_profile%20access_friends&response_type=code');
  ref.addEventListener('loadstart', function(event) {
    if ((event.url).startsWith("http://localhost/callback")) {
      requestToken = (event.url).split("?code=")[1];
      console.log("Request Token = " + requestToken);
      $http({
          method: "post",
          url: "https://api.venmo.com/v1/oauth/access_token",
          data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + requestToken
        })
        .success(function(data) {
          accessToken = data.access_token;
          $location.path("/make-bet");
        })
        .error(function(data, status) {
          alert("ERROR: " + data);
        });
      ref.close();
    }
  });
}

if (typeof String.prototype.startsWith != 'function') {
  String.prototype.startsWith = function(str) {
    return this.indexOf(str) == 0;
  };
}

Эта функция взята из этой полезной статьи Никола Рабоя ( https://blog.nraboy.com/2014/07/using-oauth-2-0-service-ionicframework/). Я думаю, что проблема может заключаться в том, как я представляю массив данных, поэтому, если у кого-то есть опыт успешной реализации API Venmo в Ionic, ваша помощь будет принята с благодарностью!

1 ответ

Я действительно смог решить эту проблему с помощью метода, описанного выше. В моем исходном коде я пропустил строку, используемую для установки типа контента на закодированный URL (который был включен в пример Nic). Как только я добавил эту строку, запрос функционировал как ожидалось. Линия была следующей:

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
Другие вопросы по тегам