将键值与 facebook 令牌数组分开
separate key value from facebook token array
我正在尝试在没有 sdk
的情况下使用 php
访问 facebook login
,这就是为什么我从 facebook
获得 access_token 的原因,如下所示:
array(1) { ["{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}"]=> string(0) "" }
但我只想要 access_token => "xxxxxxxxxxx"
这样的 $access_token['access_token'];
我已经试过了:
if(isset($access_token['access_token']) || array_key_exists('access_token', $access_token))
或
parse_str($access_token, $token_array);
但运气不好!!
我该怎么做?
public function facebookAction()
{
if(isset($_REQUEST["error"]))
{
$this->flashSession->error("ERROR:: ".$_REQUEST['error']);
return $this->response->redirect('index');
}
elseif(isset($_REQUEST["code"]))
{
if(isset($_REQUEST["state"]) && $_REQUEST["state"]==$_SESSION["state"])
{
$access_token = $this->get_access_token();
//[ Problem is here ]
$raw = file_get_contents("https://graph.facebook.com/me?fields=id,name,email,picture,gender&access_token=".$access_token);
$data_array = json_decode($raw,TRUE);
$fbid = $data_array['id'];
$fbmail = $data_array['email'];
$this->session->set('id', '1000');
$this->session->set("uname", $fbmail);
$this->flashSession->success("SUCCESS:: You are now flying with Phalcon!");
return $this->response->redirect('index');
}else{ $this->flashSession->error("ERROR:: Request STATE & CODE Error!");return $this->response->redirect('index'); }
}else{ $this->dialog(); }
}
function generate_state(){ return md5(uniqid(rand(),TRUE)); }
function dialog(){
$app_secret = "bbbbbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaa";
//$auth_type = 'rerequest';
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$fbPermission = array('email');
$defaultGraphVersion = 'v3.2';
$state = $this->generate_state();
$_SESSION["state"] = $state;
return $this->response->redirect('https://www.facebook.com/'.$defaultGraphVersion.'/dialog/oauth?client_id='.$app_id.'&scope=email&redirect_uri='.$redirect_uri.'&state='.$state);
}
function get_access_token(){
$app_secret = "bbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaaa";
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$code = $_REQUEST["code"];
$response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=".$redirect_uri."&client_secret=".$app_secret."&code=".$code);
json_decode($response, $access_token);
return $access_token;
}
在 get_access_token
中将 parse_str
更改为 json_decode
;
parse_str('{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}', $res);
print_r($res);
输出
Array
(
[{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}] =>
)
解析字符串只是获取字符串并像这样对待它,类似于它是 URL 查询字符串的一部分 example.com?foo
:
parse_str('foo=bar', $res);
print_r($res);
parse_str('foo', $res);
print_r($res);
输出
//parse_str('foo=bar', $res);
Array
(
[foo] => bar
)
//parse_str('foo', $res);
Array
(
[foo] =>
)
正如 foo
将成为 [foo => bar]
中的键一样,您的字符串将成为那里的键。
parse_str Parses encoded_string as if it were the query string passed via a URL and sets variables in the current scope (or in the array if result is provided).
使用Json解码
print_r(json_decode('{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}', true));
输出
Array
(
[access_token] => xxxxxxxxxxxxxxx
[token_type] => bearer
[expires_in] => 543543581
)
所以:
function get_access_token(){
$app_secret = "bbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaaa";
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$code = $_REQUEST["code"];
$response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=".$redirect_uri."&client_secret=".$app_secret."&code=".$code);
$res = json_decode($response, true);
//return false or the access_token
return isset($res['access_token']) ? $res['access_token'] : false;
//OR
return $res; //return the whole response
//---------- old code ---------
//parse_str($response, $access_token);
//return $access_token;
}
所以你得到的响应是数组项,其中键是你的 JSON 数据和空值?
您的回复很丑陋,但这就是您获取价值的方式:
<?php
$response = [
'{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}' => '',
];
$response_key = \array_keys($response)[0];
$response_array = \json_decode($response_key, true);
$access_token = $response_array['access_token'];
echo $access_token;
?>
我正在尝试在没有 sdk
的情况下使用 php
访问 facebook login
,这就是为什么我从 facebook
获得 access_token 的原因,如下所示:
array(1) { ["{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}"]=> string(0) "" }
但我只想要 access_token => "xxxxxxxxxxx"
这样的 $access_token['access_token'];
我已经试过了:
if(isset($access_token['access_token']) || array_key_exists('access_token', $access_token))
或 parse_str($access_token, $token_array);
但运气不好!!
我该怎么做?
public function facebookAction()
{
if(isset($_REQUEST["error"]))
{
$this->flashSession->error("ERROR:: ".$_REQUEST['error']);
return $this->response->redirect('index');
}
elseif(isset($_REQUEST["code"]))
{
if(isset($_REQUEST["state"]) && $_REQUEST["state"]==$_SESSION["state"])
{
$access_token = $this->get_access_token();
//[ Problem is here ]
$raw = file_get_contents("https://graph.facebook.com/me?fields=id,name,email,picture,gender&access_token=".$access_token);
$data_array = json_decode($raw,TRUE);
$fbid = $data_array['id'];
$fbmail = $data_array['email'];
$this->session->set('id', '1000');
$this->session->set("uname", $fbmail);
$this->flashSession->success("SUCCESS:: You are now flying with Phalcon!");
return $this->response->redirect('index');
}else{ $this->flashSession->error("ERROR:: Request STATE & CODE Error!");return $this->response->redirect('index'); }
}else{ $this->dialog(); }
}
function generate_state(){ return md5(uniqid(rand(),TRUE)); }
function dialog(){
$app_secret = "bbbbbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaa";
//$auth_type = 'rerequest';
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$fbPermission = array('email');
$defaultGraphVersion = 'v3.2';
$state = $this->generate_state();
$_SESSION["state"] = $state;
return $this->response->redirect('https://www.facebook.com/'.$defaultGraphVersion.'/dialog/oauth?client_id='.$app_id.'&scope=email&redirect_uri='.$redirect_uri.'&state='.$state);
}
function get_access_token(){
$app_secret = "bbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaaa";
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$code = $_REQUEST["code"];
$response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=".$redirect_uri."&client_secret=".$app_secret."&code=".$code);
json_decode($response, $access_token);
return $access_token;
}
在 get_access_token
中将 parse_str
更改为 json_decode
;
parse_str('{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}', $res);
print_r($res);
输出
Array
(
[{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}] =>
)
解析字符串只是获取字符串并像这样对待它,类似于它是 URL 查询字符串的一部分 example.com?foo
:
parse_str('foo=bar', $res);
print_r($res);
parse_str('foo', $res);
print_r($res);
输出
//parse_str('foo=bar', $res);
Array
(
[foo] => bar
)
//parse_str('foo', $res);
Array
(
[foo] =>
)
正如 foo
将成为 [foo => bar]
中的键一样,您的字符串将成为那里的键。
parse_str Parses encoded_string as if it were the query string passed via a URL and sets variables in the current scope (or in the array if result is provided).
使用Json解码
print_r(json_decode('{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}', true));
输出
Array
(
[access_token] => xxxxxxxxxxxxxxx
[token_type] => bearer
[expires_in] => 543543581
)
所以:
function get_access_token(){
$app_secret = "bbbbbbbbbbbbb";
$app_id = "aaaaaaaaaaaaaa";
$redirect_uri = urlencode("https://localhost/firefly/Oauth/facebook");
$code = $_REQUEST["code"];
$response = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&redirect_uri=".$redirect_uri."&client_secret=".$app_secret."&code=".$code);
$res = json_decode($response, true);
//return false or the access_token
return isset($res['access_token']) ? $res['access_token'] : false;
//OR
return $res; //return the whole response
//---------- old code ---------
//parse_str($response, $access_token);
//return $access_token;
}
所以你得到的响应是数组项,其中键是你的 JSON 数据和空值?
您的回复很丑陋,但这就是您获取价值的方式:
<?php
$response = [
'{"access_token":"xxxxxxxxxxxxxxx","token_type":"bearer","expires_in":543543581}' => '',
];
$response_key = \array_keys($response)[0];
$response_array = \json_decode($response_key, true);
$access_token = $response_array['access_token'];
echo $access_token;
?>