你将如何使用facebook php sdk执行`debug_token`调用?

时间:2013-10-14 12:04:34

标签: php facebook facebook-graph-api

根据documentation端点看起来像

GET /debug_token?
     input_token={input-token}&
     access_token={access-token}

,其中

  

input_token:您想要获取有关
的信息的访问令牌   access_token:您的应用访问令牌或来自应用开发者的有效用户访问令牌

假设我没有“来自应用程序开发者的有效用户访问令牌” - 只是因为我不想每2个月更新一次并始终牢记 - 我将如何使用“应用访问令牌“?

getApplicationAccessToken()方法受到保护,因此无法在不将其覆盖为公开的情况下访问它。

我缺少任何优雅的解决方案?

PS:由于缺少访问令牌而导致“您必须提供应用程序访问令牌或作为应用程序所有者或开发者的用户访问令牌”错误的调用示例:

$tokenDebug = $fb->api('debug_token', array(
    'input_token' => $token,
));

PPS:“有趣”的是,上面的错误不会出现在每个$token上,而是出现在某些情况下,我看不出失败的令牌和成功的令牌之间有任何明显的区别。

PPPS:$token用户访问令牌

PPPPS:为FB PHP SDK https://developers.facebook.com/bugs/637897982899835

创建了一个功能请求

PPPPPS:可能更好的是创建一个拉取请求,但它是凌晨1:30而且我太累了

2 个答案:

答案 0 :(得分:10)

好的,所以如果需要app访问令牌,app_id|app_secret(两个值都与中间的管道符号连接在一起)总是有效。

方法getApplicationAccessToken似乎在PHP SDK中受到保护,直到3.2.2 - 而getAppIdgetAppSecret在该版本中已经公开;所以那些可能是硬编码id和秘密的替代方案。

答案 1 :(得分:6)

PHP SDK具有getOAuth2Client()客户端方法,该方法返回\Facebook\Authentication\OAuth2Client个实例。

这有debugToken($accessToken)方法,它返回一个包含访问令牌数据的\Facebook\Authentication\AccessTokenMetadata实例。

$appid = '123456789';
$appsecret = 'foobar';

$api = new Facebook(['app_id' => $appid, 'app_secret' => $appsecret]);

$oauth = $api->getOAuth2Client();
$meta = $oauth->debugToken($accessToken);
$meta->validateAppId($appid); // Will throw a FacebookSDKException if invalid

$meta->getIsValid(); // boolean
$meta->getExpiresAt(); // \DateTime|null