当用户允许我的应用程序时,我会收到这种类型的成功网址:
http://localhost/fbapp/app.php#access_token=AAAAALY8OpPABAM67auStdfgdfOdfgdfgdenqEt9QZCGD2a1h3iWFrhmNWqOf8l4a9RQ8tAJCM9y5QbYpsP6sT1g0ZCXDhtZCECZApGb&expires_in=6604
我正在尝试 $_GET['access_token'] 来保存访问令牌,但它不起作用,
我想知道如何从此 URL 获取访问令牌。
从你对 $_GET 的使用来看,我假设你在谈论 PHP。不幸的是,哈希标签永远不会发送到服务器。它们只存在于客户端,所以你需要使用一些javascript来调用PHP脚本。
例:
<script type="text/javascript">
var HashSearch = new function () {
var params;
this.set = function (key, value) {
params[key] = value;
this.push();
};
this.remove = function (key, value) {
delete params[key];
this.push();
};
this.get = function (key, value) {
return params[key];
};
this.keyExists = function (key) {
return params.hasOwnProperty(key);
};
this.push= function () {
var hashBuilder = [], key, value;
for(key in params) if (params.hasOwnProperty(key)) {
key = escape(key), value = escape(params[key]); // escape(undefined) == "undefined"
hashBuilder.push(key + ( (value !== "undefined") ? '=' + value : "" ));
}
window.location.hash = hashBuilder.join("&");
};
(this.load = function () {
params = {}
var hashStr = window.location.hash, hashArray, keyVal
hashStr = hashStr.substring(1, hashStr.length);
hashArray = hashStr.split('&');
for(var i = 0; i < hashArray.length; i++) {
keyVal = hashArray[i].split('=');
params[unescape(keyVal[0])] = (typeof keyVal[1] != "undefined") ? unescape(keyVal[1]) : keyVal[1];
}
})();
}
$.ajax({
type: "POST",
url: '/store_access.php',
data: 'access_token='+escape(HashSearch.get('access_token'),
dataType: "html",
success: function(response) {
alert('Access Token Stored');
}
});
</script>
我在这里找到了哈希搜索功能:从 url 中检索特定哈希标签的值
另外,我假设jquery在你的脚本发布,但你可以使用任何东西来调用。您甚至可以使用包含令牌的 url 将图像添加到正文中。
您使用的是客户端身份验证身份验证 URL 而不是服务器端 URL,这就是为什么您将access_token作为 URL 片段的一部分而不是作为 GET 变量的原因。
从身份验证 URL 中删除 response_type=token,然后按照服务器端身份验证进行操作。