2016-06-02 2 views
0

Я пытаюсь создать запрос api-ylpp в угловом и получить недопустимую ошибку подписи. Я следую аналогичной проблеме отсюда: Yelp API and AngularJS, но не повезло. Вот мой контроллер:angular yelp api ошибка недопустимой подписи

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

А вот моя служба:

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

А вот ошибка:

/**/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"}})

Может кто-нибудь помочь?

ответ

0

У меня была такая же ошибка, когда я добавлял параметр сортировки в свой запрос (который работал раньше). После того, как ищет проблему, то получается, что я определил тип своего рода, как номер, где Yelp был за исключением строки

так

private $sort:number = 0 

был неправ, и моя проблема была решена

private $sort:string = "0" 

Что касается вашего код, я также заметил, что обратный вызов в моем коде определяется по-разному соответственно

CALLBACK: "angular.callbacks._0" 

И, может быть, просто для тестирования, что произойдет, если вы переименуете свои параметры var в нечто вроде yelpParams (пару дней назад у меня была проблема в моем узле backend coz, который я использовал, поскольку имя переменной равно предопределенной переменной запроса. С тех пор я стараюсь избегать использования same_name: same_name). Попробуйте что-то вроде:

...{params: yelpParams}... 

Кроме того, даже я не мог воспроизвести его, я прочитал на форуме, что Yelp ожидает подписи с Params отсортированный по алфавиту

Надежда одна из этих подсказок приведет вас решить ваша проблема

Смежные вопросы