Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Facebook检索正确的访问令牌_Php_Facebook - Fatal编程技术网

Php Facebook检索正确的访问令牌

Php Facebook检索正确的访问令牌,php,facebook,Php,Facebook,我很难找到正确的访问令牌。 我已经尝试了我在Google和developers.fb上找到的所有方法,但是对于这个应用程序(我以前做过,并在另一个应用程序中使用过),我似乎没有成功 我知道FB一直在更新他们的API,所以我可能只是找到了过时的解决方案 似乎有不同类型的访问令牌:用户访问令牌和页面访问令牌。我在facebook文档中找到了一些答案,但没有一个是我能理解的 我正在尝试创建的应用程序类似于生日提醒,因此它需要能够发送脱机消息(fex.由cron作业运行,并仅以应用程序本身的名义发布到我

我很难找到正确的访问令牌。 我已经尝试了我在Google和developers.fb上找到的所有方法,但是对于这个应用程序(我以前做过,并在另一个应用程序中使用过),我似乎没有成功

我知道FB一直在更新他们的API,所以我可能只是找到了过时的解决方案

似乎有不同类型的访问令牌:用户访问令牌和页面访问令牌。我在facebook文档中找到了一些答案,但没有一个是我能理解的

我正在尝试创建的应用程序类似于生日提醒,因此它需要能够发送脱机消息(fex.由cron作业运行,并仅以应用程序本身的名义发布到我拥有的一个fb页面)

我已使用此地址上的页面选项卡注册了该应用程序: --
https://www.facebook.com/dialog/pagetab?app_id=MY_APP'S_ID&display=popup&next=MY_URL
-- 现在可以从Facebook页面的设置中找到它

然后我进入需要访问令牌的部分。 我不知道哪个URL提供了什么样的访问令牌,所以我尝试了两种:

我访问过这个网址: (我写了所有重复的链接、教程中的答案和我重新写的链接) (当然,出于安全原因,所有指向我的应用程序和网页的代码都会被替换)

--
https://www.facebook.com/dialog/oauth?client_id=0123456789011121&redirect_uri=http://www.example.com&scope=read_stream,发布流,离线访问
--

--
https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&redirect_uri=MY_REDIRECT_URL&scope=read_stream,发布流,离线访问
--

得到:

http://www.example.com/?code=XXXXX1x1X1xxXxxX1xXxXxX1X111xX11XXXXX1XXXXXxX_XxXxxXxX1xxxXx1xXxXx-x1XxXXXxXXx1xXxXXXxXl1xX-111xXxxxXxxx1xXxxx1xXx1X1X1Xx-xxxXXXxXXXX1XXXXxx1Xxx1_xXxXxxxXx1x1XxXxxXx1XXxX-x1x1xxxXXxXxX1XX1XX1x1-xxXxxxx1Xx1XxXXXxxX#_=_
换句话说(我相信),检索代码:

XXXXX1x1X1xxXxxX1xXxXxX1X111xX11XXXXX1XXXXXxX_XxXxxXxX1xxxXx1xXxXx-x1XxXXXxXXx1xXxXXXxXl1xX-111xXxxxXxxx1xXxxx1xXx1X1X1Xx-xxxXXXxXXXX1XXXXxx1Xxx1_xXxXxxxXx1x1XxXxxXx1XXxX-x1x1xxxXXxXxX1XX1XX1x1-xxXxxxx1Xx1XxXXXxxX#_=_
正如我在谷歌上发现的那样,我似乎也需要获得另一个代码,因此我访问了这个URL(当然我已经尝试了我首先获得的第一个代码):

--
https://graph.facebook.com/oauth/access_token?client_id=MY_APP_ID&redirect_uri=MY_REDIRECT_URL&client_secret=MY_APP_SECRET&code=THE_CODE_I_GOT_FROM_THE_PREVIOUS_RUN
--

但当我尝试运行应用程序时,会收到以下错误消息: 结果:
{“错误”:{“消息”:“格式错误的访问令牌xxxxx1x1xxxxx1xxxxx1xxxxx1x1x111xxxxx1xxxxx1xxxxx1xxxxxx\u xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xx-111xxxxx1xxxxx1xxxxx1xxxxx1xx-xxxxxxxxxxxxx1xxxxx1xxxxx1\u xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxxx1xxxx

我尝试了不同类型的访问令牌(#=)的结尾,因为我无法识别它与我上周检索到的另一个工作访问令牌,以及我构建的一个完全工作的应用程序。正如我记得的那样,那一次没有那个结局

如果有兴趣的话,我也会在这里发布脚本。我在一个教程中找到了它,它是非常简单的代码:

<?php
    // CURL function to send with post method
    function send_post_curl($url, $postdata = “”) {
    $ch = curl_init($url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $data = curl_exec ($ch);
    curl_close ($ch);
    return $data;
    }
    // setup the message
    $fburl = 'https://graph.facebook.com/THE_FB_PAGE_ID/feed';
    $fbtoken = 'THE_ACCESS_TOKEN';
    $fbmsg = 'Great API to auto status, this is the message.
    Thank to WebDDR
    http://webddr.net/tips-and-tricks/facebook-offline-access-step-by-step-explanation/';
    $fbpcurl = 'access_token='. $fbtoken;
    $fbpcurl .= '&message='. str_replace('&', 'and', urlencode($fbmsg)) ;
    $result = send_post_curl($fburl, $fbpcurl);
    echo 'Result: '. $result;
?> 

我真的希望有人能帮助我,我做这项工作是为了我在大学的教育。 /约翰 附言 对不起,我不得不和链接争论,链接,因为论坛认为这是垃圾邮件 Ds.

请尝试以下代码:

<?php
session_start();   
$facebook_appid         = "facebook_appid";                                 // Facebook appplication id
$facebook_secret        = "facebook_secret";                // Facebook secret id
$redirect_uri           = "https://localhost/facebook_page/events.php";   // return url to our application after facebook login ## should be SAME as in facebook application
$scope                  = "user_photos,email,user_birthday,user_online_presence,offline_access,manage_pages,publish_stream,user_events,friends_events"; // User permission for facebook

$code                   = $_REQUEST["code"]?$_REQUEST["code"]:"";

if(empty($code)) {
    $_SESSION['state']  = time(); // CSRF protection
    $dialog_url         = "https://www.facebook.com/dialog/oauth?client_id=". $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri) . "&state=". $_SESSION['state'] . "&scope=".$scope;
    header("location:".$dialog_url);
}

if($_SESSION['state'] && ($_SESSION['state'] == $_REQUEST['state'])) {
    $token_url          = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri). "&client_secret=" . $facebook_secret . "&code=" . $code;
    $response           = @file_get_contents($token_url);

    $params             = null;
    parse_str($response, $params);


    echo $params['access_token'];
    echo "<br>";

    //$offer_url        = "https://graph.facebook.com/".$dt->id."/conversations?access_token=".$dt->access_token;
    //$off              = @file_get_contents($offer_url);
    //$dto              = json_decode($off);

    //echo "<pre>";
    //print_r($dto);


}

?>


感谢您尝试帮助我,但我仍然收到相同的错误消息:{“error”:{“message”:“格式错误的访问令牌XXX……XXX#=u”,“type”:“OAuthException”,“code”:190}}编辑了添加的代码session_start();现在试试这段代码是为我工作的,你需要给$redirect_uri和你在应用程序设置中的“site url”相同,我现在检查了,所以我这样做了,这是正确的。奇怪的是,我还有另外两个带有access_令牌的应用程序,它们都可以运行。我很高兴你能帮助我!酷。。所以你把它修好了
<?php
session_start();   
$facebook_appid         = "facebook_appid";                                 // Facebook appplication id
$facebook_secret        = "facebook_secret";                // Facebook secret id
$redirect_uri           = "https://localhost/facebook_page/events.php";   // return url to our application after facebook login ## should be SAME as in facebook application
$scope                  = "user_photos,email,user_birthday,user_online_presence,offline_access,manage_pages,publish_stream,user_events,friends_events"; // User permission for facebook

$code                   = $_REQUEST["code"]?$_REQUEST["code"]:"";

if(empty($code)) {
    $_SESSION['state']  = time(); // CSRF protection
    $dialog_url         = "https://www.facebook.com/dialog/oauth?client_id=". $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri) . "&state=". $_SESSION['state'] . "&scope=".$scope;
    header("location:".$dialog_url);
}

if($_SESSION['state'] && ($_SESSION['state'] == $_REQUEST['state'])) {
    $token_url          = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $facebook_appid . "&redirect_uri=" . urlencode($redirect_uri). "&client_secret=" . $facebook_secret . "&code=" . $code;
    $response           = @file_get_contents($token_url);

    $params             = null;
    parse_str($response, $params);


    echo $params['access_token'];
    echo "<br>";

    //$offer_url        = "https://graph.facebook.com/".$dt->id."/conversations?access_token=".$dt->access_token;
    //$off              = @file_get_contents($offer_url);
    //$dto              = json_decode($off);

    //echo "<pre>";
    //print_r($dto);


}

?>