Facebook graph返回一个站点的访问令牌错误,而不是另一个站点


Facebook graph returns access-token error for one site, but not another

我认为这种情况的根本原因是我对Facebook API如何工作的普遍误解,所以我希望有更多知识的人可以为我指出正确的方向。

所有我想做的是返回一个facebook画廊为我们的客户端到两个不同的页面,托管在不同的服务器上。我在一个页面上使用这种格式:

$albums = json_decode( file_get_contents('http://graph.facebook.com/'.$facebook_ID.'/albums') );

这很好,我得到了我需要的。但是,在另一个站点上这样做会给我这个错误:

"message":"An access token is required to request this resource."

如果我所做的只是请求公共画廊,它真的需要访问令牌吗?更让我困惑的是,如果我在浏览器中输入以下内容:

http://graph.facebook.com/$facebook_ID/albums

我得到了所有需要的信息。这让我倾向于认为这不是域名问题?

谢谢!

—EDIT—

这里有更多关于curl的信息。

第一个-工作的请求,从我的本地盒子:

* About to connect() to graph.facebook.com port 80 (#0)
*   Trying 69.171.242.27...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
^M  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* Connected to graph.facebook.com (69.171.242.27) port 80 (#0)
> GET /370438539411/albums HTTP/1.1
> User-Agent: curl/7.29.0
> Host: graph.facebook.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Cache-Control: private, no-cache, no-store, must-revalidate
< Content-Type: application/json; charset=UTF-8
< ETag: "2829e31bfef4b737cdb31aab0f73c8ad35826012"
< Expires: Sat, 01 Jan 2000 00:00:00 GMT
< Pragma: no-cache
< X-FB-Rev: 801567
< X-FB-Debug: /uN6PrzpTWLLaJOn8vuww0ECYjineJN6P9w/DvvVczY=
< Date: Wed, 01 May 2013 12:01:26 GMT
< Connection: keep-alive
< Content-Length: 35483
< 
ALL THE THINGS

然后这里是我们的实时服务器的请求-一个EC2实例(如果这是相关的)

* About to connect() to graph.facebook.com port 80 (#0)
*   Trying 173.252.101.26...   % Total    % Received % Xferd  Average Speed   Time    Time         Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
^M  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0connected
* Connected to graph.facebook.com (173.252.101.26) port 80 (#0)
> GET /370438539411/albums HTTP/1.1
> User-Agent: curl/7.29.0
> Host: graph.facebook.com
> Accept: */*
> 
< HTTP/1.1 400 Bad Request
< Access-Control-Allow-Origin: *
< Cache-Control: no-store
< Content-Type: application/json; charset=UTF-8
< Expires: Sat, 01 Jan 2000 00:00:00 GMT
< Pragma: no-cache
< WWW-Authenticate: OAuth "Facebook Platform" "invalid_token" "An access token is required     to request this resource."
< X-FB-Rev: 801567
< X-FB-Debug: wSxKF5MlCAmEFf2BuYRBDotWWreR6/t5m5mebc8vDXw=
< Date: Wed, 01 May 2013 12:03:38 GMT
< Connection: keep-alive
< Content-Length: 112
< 
^M  0   112    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0{ [data not shown]
^M100   112  100   112    0     0    181      0 --:--:-- --:--:-- --:--:--   212
* Connection #0 to host graph.facebook.com left intact
* Closing connection #0
{"error":{"message":"An access token is required to request this resource.","type":"OAuthException","code":104}}
(END)

可能会有一些或其他的事情,可能会使访问公共数据的方式,就像他们正在访问。正如你已经经历过的那样,我希望你能安全地做到这一点,而是创建一个应用程序,并使用应用程序访问令牌来查询公共数据,而不是像Facebook可能在不久的将来甚至改变它那样直接去查询。