拥有高流量网站的Facebook Auth:空访问令牌,空/我

时间:2012-02-17 18:01:35

标签: facebook api facebook-graph-api

我们现在有一个在Facebook标签上运行的应用程序正在接收大量的流量。人们每隔几秒就会注册一次,而且大部分都是成功的。但是我遇到了以下问题:

- 根本没有收到访问令牌(空响应,没有错误)
- 或者如果收到,则对/ me的API调用失败(空响应,无错误)

编辑:显然限制API调用不是问题,因为600/600次调用/秒是每个用户,这更有意义:)。

还有其他人遇到过这样的问题吗?我每分钟获得大约20-30个成功的应用程序注册,大约2-3个失败的注册。注意:这些不是拒绝访问应用程序的用户 - 这些是在别处处理的...

编辑:我收到“无法打开流:HTTP请求失败!HTTP / 1.0 400错误请求”

$token_url = "https://graph.facebook.com/oauth/access_token?client_id=".$oauth_clientid."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$oauth_secret."&code=".$code;
$access_token = file_get_contents($token_url);

3 个答案:

答案 0 :(得分:1)

更新:修改我的代码以使用curl后,有一些改进,但它没有解决问题。有问题的应用程序现已超过其使用高峰,因此显然错误数量大幅下降。它有时仍然会发生。错误是(最常见的):

  • 卷曲错误(6):无法解析主机'graph.facebook.com'
  • 卷曲错误(28):SSL连接超时

......和其他类似的错误。

根据我对一两周数据的经验,当流量很高时,它似乎影响了大约一半的请求,而当流量很低时,它似乎会减少 - 但这是非常不科学的。 :)

-

那么解决方案呢?那真的没有。似乎有一部分请求会失败,我的(您的)应用程序需要尽可能优雅地处理这些错误。

我唯一的问题是,还有其他人有过高流量应用的经验吗? (在这种情况下意味着100 000-500 000每日综合浏览量和50 000-100 000活跃用户)

答案 1 :(得分:0)

尝试记录curl错误并在获得access_token时返回值,答案应该在那里。

答案 2 :(得分:0)

我认为这是因为php_openssl扩展名不存在或被禁用。请参阅this question以启用它。或者你可以使用cURL。从PHP SDK官方提取fb_ca_chain_bundle.crt(或将CURLOPT_SSL_VERIFYPEER设置为false):

$base_url = 'https://graph.facebook.com/oauth/access_token';
$params   = array();

$params['client_id']     = $client_id;
$params['client_secret'] = $client_secret;
$params['redirect_uri']  = $redirect_uri;
$params['code']          = $code;

$options = array(
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_CAINFO         => __DIR__ .'/fb_ca_chain_bundle.crt',
    CURLOPT_RETURNTRANSFER => true,
    CURLINFO_HEADER_OUT    => false,
    CURLOPT_HEADER         => false,
    CURLOPT_URL            => $base_url . '?' . http_build_query($params),
 );

 // Init cURL and send the request
 $ch = curl_init();
 curl_setopt_array($ch, $params);

 $result = curl_exec($ch);
 $infos  = curl_getinfo($ch);

 curl_close($ch);
 var_dump($result, $infos);

编辑:我警告您,这是我的代码的快速复制和粘贴,因此您需要仔细检查$options