Yelp API,OAuth;无效签名.需要签名基字符串

Yelp API, OAuth; Invalid signature. Expected signature base string

本文关键字:字符串 无效 API OAuth Yelp      更新时间:2023-09-26

注意:我已经查看了当我在谷歌中输入错误时返回的谷歌搜索结果前两页上的所有帖子,但我仍然有这个问题。似乎没有太多关于JavaScriptOAuth的报道,因为大多数OAuth业务都发生在后端。

我正在尝试向Yelp电话搜索API发出AJAX请求。我正在使用Marco Bettiolo的JavaScriptOAuth库。我相信我已经让OAuth库工作了,但由于某种原因,当我尝试进行调用时,返回的JSON表示"无效签名"错误。继续查看我的实时项目,并亲自查看错误。这是我在GitHub上的项目。如果你想自己重现错误,请转到我的实时项目,打开devtools控制台,点击一个健身房,弹出一个信息窗口,然后点击上面写着"点击此处查看照片"的地方。一旦你点击,应用程序将启动AJAX请求,并密切关注控制台,因为你会看到错误显示出来。

非常感谢您的帮助!

这是相关代码。我已经在每个infoWindow中的照片链接的onclick处理程序中放置了与AJAX相关的代码。

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

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

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

jsonpCallback: 'cb'

希望这能有所帮助。