【问题标题】:angular yelp api invalid signature error角度 yelp api 无效签名错误
【发布时间】:2016-10-02 14:44:00
【问题描述】:

我正在尝试以 Angular 创建一个 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"}})

有人可以帮忙吗?

【问题讨论】:

    标签: javascript angularjs yelp


    【解决方案1】:

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

    所以

    private $sort:number = 0
    

    错了,我的问题被解决了

    private $sort:string = "0"
    

    关于您的代码,我还注意到,我的代码中的回调分别定义不同

    CALLBACK: "angular.callbacks._0"
    

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

     ...{params: yelpParams}...
    

    此外,即使我无法复制它,我在论坛上读到 Yelp 正在等待签名,参数按字母顺序排序

    希望这些提示之一能引导您解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 2015-05-27
      • 2015-05-23
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      相关资源
      最近更新 更多