angular yelp api无效签名错误

时间:2016-06-02 17:58:50

标签: javascript angularjs yelp

我正在尝试以角度创建一个yelp api请求,并且我收到无效的签名错误。我一直在跟踪类似的问题:Yelp API and AngularJS但没有运气。 这是我的控制器:

    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, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
                            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”:“签名无效”,   “id”:“INVALID_SIGNATURE”,“description”:“签名无效。预期   签名基本字符串:   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“}})

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我在向查询添加排序选项(之前有效)时遇到了同样的错误。在找到问题之后,事实证明我将排序类型定义为Yelp除了字符串之外的数字

所以

private $sort:number = 0

错了,我的问题已经解决了

private $sort:string = "0"

关于你的代码,我也注意到,我的代码中的回调分别以不同的方式定义

CALLBACK: "angular.callbacks._0"

也许只是为了测试,如果你将你的var params重命名为yelpParams会发生什么(几天前我的节点后端有问题因为我使用变量名等于预定义的请求变量。然后,我尽量避免使用same_name:same_name)。尝试类似:

 ...{params: yelpParams}...

此外,即使我无法重现它,我在一个论坛上看到Yelp正在等待按字母顺序排列的params签名

希望其中一条提示可以帮助您解决问题