我们现在有一个在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);
答案 0 :(得分:1)
更新:修改我的代码以使用curl后,有一些改进,但它没有解决问题。有问题的应用程序现已超过其使用高峰,因此显然错误数量大幅下降。它有时仍然会发生。错误是(最常见的):
......和其他类似的错误。
根据我对一两周数据的经验,当流量很高时,它似乎影响了大约一半的请求,而当流量很低时,它似乎会减少 - 但这是非常不科学的。 :)
-
那么解决方案呢?那真的没有。似乎有一部分请求会失败,我的(您的)应用程序需要尽可能优雅地处理这些错误。
我唯一的问题是,还有其他人有过高流量应用的经验吗? (在这种情况下意味着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
。