Yelp API,OAuth;签名无效。预期的签名基本字符串

时间:2015-03-19 18:48:43

标签: javascript jquery ajax oauth yelp

注意:我查看了当我向Google输入错误时返回的Google搜索结果的前两页上的所有帖子,我仍然遇到此问题。似乎没有很多关于JavaScript OAuth内容的报道,因为大多数OAuth业务都发生在后端。

我正在尝试向Yelp Phone Search API发出AJAX请求。我正在使用Marco Bettiolo's JavaScript OAuth library。我相信我已经让OAuth库工作了,但出于某种原因,当我尝试拨打电话时,返回的JSON会说出"无效签名"错误。继续查看我的live project并自行查看错误。这是我的project on GitHub。如果你想自己重现错误,请转到我的live project,打开devtools控制台,点击健身房,弹出一个infoWindow,然后点击它所说的位置,"点击这里查看照片及#34。一旦你点击它,应用程序将启动AJAX请求并密切关注控制台,因为你会看到错误显示。

非常感谢任何帮助!

以下是相关代码。我已将与AJAX相关的代码放在onclick处理程序中,用于每个infoWindow中的照片链接。

photoLink.onclick = function() {
    // Modify phone number string so it's ready to be 
    // put into url for AJAX call to Yelp API
    var phoneNumber = place.formatted_phone_number;
    var re = /\D/gi; 
    phoneNumber = phoneNumber.replace(re, '');

    var yelpURL = YELP_BASE_URL + phoneNumber;

    var parameters = {
      oauth_consumer_key: YELP_CONSUMER_KEY,
      oauth_token: YELP_TOKEN,
      oauth_nonce: generateNonce(),
      oauth_timestamp: Math.floor(Date.now()/1000),
      oauth_signature_method: 'HMAC-SHA1',
      oauth_version : '1.0',
      callback: 'cb'              // This is crucial to include for jsonp implementation in 
                                  // AJAX or else the oauth-signature will be wrong.
    };

    var encodedSignature = oauthSignature.generate('GET',yelpURL, parameters, YELP_CONSUMER_SECRET, YELP_TOKEN_SECRET);
    parameters.oauth_signature = encodedSignature;

    var settings = {
      url: yelpURL,
      data: parameters,
      cache: true,  //        <----  This is crucial to include as well to prevent jQuery from 
                                  // adding on a cache-buster parameter "_=23489489749837", 
                                  // invalidating our oauth-signature
      dataType: 'jsonp',
      success: function(results) {
        // Do stuff with results
        console.log(results);
      },
      fail: function() {
        // Do stuff on fail
        console.log('AJAX request has failed :(');
      }
    };

    // Send AJAX request via jQuery library
    $.ajax(settings);
  };

1 个答案:

答案 0 :(得分:0)

在jQuery ajax设置中,您还需要在生成签名时指定回调名称以匹配您的回调参数。否则,jQuery将只选择一个导致无效签名的随机名称。

尝试将此添加到您的设置中:

jsonpCallback: 'cb'

希望这有帮助。