2016-06-02 10 views
0

Ich versuche, eine yelp API-Anfrage in angular zu erstellen, und ich bekomme einen ungültigen Signaturfehler. Ich habe ein ähnliches Problem von hier aus verfolgt: Yelp API and AngularJS aber kein Glück. Hier ist mein Controller:angular yelp api ungültiger Signaturfehler

app.controller('MainController', ['$scope', 'yelpService', 
     function($scope, yelpService) { 
      yelpService.retrieveYelp('', function(data) { 
       $scope.businesses = data.businesses; 
      }); 
     }]); 

Und hier ist mein Service:

app.factory("yelpService", function($http) { 
      return { 
       "retrieveYelp": function(name, callback) { 
        var method = 'GET'; 
        var url = 'http://api.yelp.com/v2/search'; 
        var params = { 
          callback: 'JSON_CALLBACK', 
          location: 'San+Francisco', 
          oauth_consumer_key: '', //Consumer Key 
          oauth_token: '', //Token 
          oauth_signature_method: "HMAC-SHA1", 
          oauth_timestamp: new Date().getTime(), 
          oauth_nonce: randomString(32, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 
          term: 'mexican' 
         }; 
        var consumerSecret = ''; //Consumer Secret 
        var tokenSecret = ''; //Token Secret 
        var signature = oauthSignature.generate(method, url, params, consumerSecret, tokenSecret, { encodeSignature: false}); 
        // var signature = oauth.authorize(request_data, token); 
        params['oauth_signature'] = signature; 
        $http.jsonp(url, {params: params}) 
         .then(function(response){ 
          console.log(response); 
         }, function(response) { 
         // called asynchronously if an error occurs 
         // or server returns response with an error status. 
          console.log(response) 
         }) 
        } 
      } 
     }); 



function randomString(length, chars) { 
    var result = ''; 
    for (var i = length; i > 0; --i) result +=  chars[Math.round(Math.random() * (chars.length - 1))]; 
    return result; 
} 

Und hier ist der Fehler:

/**/angular.callbacks._0({"error": {"text": "Signature was invalid", "id": "INVALID_SIGNATURE", "description": "Invalid signature. Expected signature base string: GET\u0026http%3A%2F%2Fapi.yelp.com%2Fv2%2Fsearch\u0026callback%3Dangular.callbacks._0%26location%3DSan%252BFrancisco%26oauth_consumer_key%3DiVBpzLwc-Us4-2dlRTzJJg%26oauth_nonce%3DikBZWdLPBMRif0fT0NUi4ygoiUwNXMUq%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1464889608736%26oauth_token%3DY-XgKu4g2wHAK7s_h6NoKwg8rooI797N%26term%3Dmexican"}})

Könnte mir jemand helfen?

Antwort

0

Ich hatte den gleichen Fehler, während ich die Sortieroption zu meiner Abfrage hinzugefügt hatte (die vorher funktionierte). Nach der Suche nach definiert das Problem es stellt sich heraus, dass ich die Art der Sortierung als Nummer wo Yelp einen String

so

private $sort:number = 0 

falsch war und mein Problem wurde von

private $sort:string = "0" 

Bezug gelöst ausgenommen wurde Ihre code habe ich auch festgestellt, dass der callback in meinem code jeweils anders definiert ist bzw.

Und vielleicht nur zum Testen, was passiert, wenn Sie Ihre Var-Parameter in etwas wie yelpParams umbenennen (vor ein paar Tagen hatte ich ein Problem in meinem Knoten-Backend, das ich als Variablenname gleich einer vordefinierten Anfragevariable verwendete. Seitdem versuche ich zu vermeiden, same_name: same_name zu verwenden. Versuchen Sie so etwas wie:

...{params: yelpParams}... 

Des Weiteren konnte auch ich reproduzieren es nicht, ich in einem Forum gelesen, dass Yelp eine Signatur mit params alphabetisch

Hoffnung einer dieser Hinweise sortiert erwartet würden Sie führen zu lösen Ihr Problem

Verwandte Themen