1

現在、Venmo の Oauth API を使用して Ionic Framework で構築されたアプリにログインしようとしています。長期間のアクセス トークンを取得できるように、サーバー サイド フローを使用しようとしています。コードを受け取り、それを requestToken 変数に設定できます。

ただし、「 https://api.venmo.com/v1/oauth/access_token 」にクライアント ID、クライアント シークレット、およびリクエスト トークンを使用して投稿しようとすると、次のエラー アラートが表示されます:「エラー: [オブジェクト オブジェクト]」。

コンソールを確認すると、有効なリクエスト トークンを持っているように見えますが、投稿リクエストで 400 Bad Request エラーが発生していることがわかります。エラー メッセージは次のとおりです。

以下は、Venmo の Oauth API 経由でログインするために使用しているログイン関数のコードです。

//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;
  };
}

この関数は、Nic Raboy によるこの役立つウォークスルー記事 ( https://blog.nraboy.com/2014/07/using-oauth-2-0-service-ionicframework/ ) からのものです。データ配列の表示方法に問題があるのではないかと思いますので、Ionic で Venmo API をうまく実装した経験のある方がいらっしゃいましたら、よろしくお願いします!

4

1 に答える 1

0

上記の方法で実際にこの問題を解決できました。元のコードでは、コンテンツ タイプを URL エンコードに設定するために使用した行を省略しました (これは Nic の例に含まれていました)。この行を追加すると、リクエストは期待どおりに機能しました。行は次のとおりでした。

$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
于 2015-08-11T02:35:08.207 に答える