gpt4 book ai didi

php - Facebook SDK 访问 token 和 ajax

转载 作者:可可西里 更新时间:2023-10-31 22:49:49 25 4
gpt4 key购买 nike

我按照 Facebook SDK for PHP 文档创建了两个文件,login.php 和 fb-callback.php,所有查找逻辑都在 fb-callback.php 中。当我这样做时,一切正常。

但我想将查找逻辑移动到 get-posts.php 并通过 ajax 从 fb-callback.php 调用它。当我这样做时,我似乎无法获得访问 token 。我收到下面提到的错误,“访问 token :错误请求”。

我已将 fb-config.php 和 get-posts.php 都注册为有效的 OAuth 重定向 URI。那么如何获取 get-posts.php 的正确参数呢?

以下是所有相关文件:

登录.php

<?php
require_once "config.php";

$redirectURL = 'https://' . $_SERVER[ 'SERVER_NAME' ] . '/r/fb-callback.php';
$permissions = ['email','user_photos','user_posts'];
$loginUrl = $helper->getLoginUrl($redirectURL, $permissions);
?>

<a href='<?php echo $loginUrl; ?>'>
<img src='continue-with-facebook.png'>
</a>
?>

配置.php

<?php
if( !session_id() ) {
session_start();
}

require_once '/home/bitnami/vendor/autoload.php';

$fb = new Facebook\Facebook([
'app_id' => '---',
'app_secret' => '---',
'default_graph_version' => 'v3.1',
]);

$helper = $fb->getRedirectLoginHelper();
?>

fb-回调.php

<?php
require_once("config.php");
?>
<html>
<head>
<script type='text/javascript' src='jquery.js'></script>
<script>
var $j = jQuery.noConflict();

$j(document).ready(function () {

$j.ajax({
type: "GET",
url: "get-posts.php",
cache: false,
success: function (html) {
setTimeout(function () {
$j('#updateDiv').html(html);
}, 1000);
}
});
});
</script>
</head>
<body>
<div id='updateDiv'><img src='spinning.gif' alt='processing...'></div>
</body>
</html>

获取帖子.php

<?php
require_once("config.php");

// get the posts for this user id
try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo __LINE__ . ' Access Token: Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo __LINE__ . ' Access Token: Facebook SDK returned an error: ' . $e->getMessage();
exit;
}

if (! isset($accessToken)) {
if ($helper->getError()) {
header('HTTP/1.0 401 Unauthorized');
echo "Error: " . $helper->getError() . "\n";
echo "Error Code: " . $helper->getErrorCode() . "\n";
echo "Error Reason: " . $helper->getErrorReason() . "\n";
echo "Error Description: " . $helper->getErrorDescription() . "\n";
} else {
header('HTTP/1.0 400 Bad Request');
echo __LINE__ . ' Access Token: Bad request';
}
exit;
}

...

最佳答案

下面是实际代码,解释了下面必须更改的内容:

fb-回调.php

<?php
require_once("config.php");

try {
$accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo __LINE__ . ' Access Token: Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo __LINE__ . ' Access Token: Facebook SDK returned an error: ' . $e->getMessage();
exit;
}

if (! isset($accessToken)) {
if ($helper->getError()) {
header('HTTP/1.0 401 Unauthorized');
echo "Error: " . $helper->getError() . "\n";
echo "Error Code: " . $helper->getErrorCode() . "\n";
echo "Error Reason: " . $helper->getErrorReason() . "\n";
echo "Error Description: " . $helper->getErrorDescription() . "\n";
} else {
header('HTTP/1.0 400 Bad Request');
echo __LINE__ . ' Access Token: Bad request';
}
exit;
}

$get = "?accessToken=" . $accessToken;
?>
<html>
<head>
<script type='text/javascript' src='jquery.js'></script>
<script>
var $j = jQuery.noConflict();

$j(document).ready(function () {

$j.ajax({
type: "GET",
url: "get-posts.php<?php echo $get; ?>",
cache: false,
success: function (html) {
setTimeout(function () {
$j('#updateDiv').html(html);
}, 1000);
}
});
});
</script>
</head>
<body>
<div id='updateDiv'><img src='spinning.gif' alt='processing...'></div>
</body>
</html>

获取帖子.php

<?php
require_once("config.php");

$fb->setDefaultAccessToken($_GET['accessToken']);

...

那么改变了什么?首先,我需要在 fb-callback.php 中获取访问代码,而不是 get-posts.php。所以我将获取访问代码和检查错误的逻辑移回 fb-callback.php。然后我添加了一些逻辑来将收集到的访问 token 传递给 AJAX url 的参数字符串。 (在两个地方寻找“$get”,一次是我设置值的地方,一次是我将它附加到 AJAX url 的地方。)

在 get-posts.php 中,我删除了向 Facebook API 请求访问 token 的代码。相反,我只是根据从 fb-config.php 通过 GET 在名为“accessToken”的参数中使用来自 Facebook PHP SDK 的 setDefaultAccesstoken() 函数传递的内容来设置访问 token 。

如其他地方所述,您可以继续通过 GET、REQUEST 或 $_SESSION 将访问 token 的值传递到一个又一个页面,只要您保持 session 并通过 setDefaultAccessToken() 函数在每个后续页面通知 Facebook页面。

关于php - Facebook SDK 访问 token 和 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52753199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com