2011-09-30 57 views
9

Tôi đang nâng cấp các ứng dụng FB hiện có của mình và hoàn toàn tìm kiếm ứng dụng canvas iframe PHP đơn giản để ủy quyền và xác thực (cũng như sử dụng SSL) . Không bao giờ xem qua rất nhiều ví dụ ...Ứng dụng canvas Facebook "redirect_uri" thoát ra khỏi khung nội tuyến sau khi ủy quyền và xác thực

Đây là nơi tôi bị kẹt: Sau khi người dùng ủy quyền ứng dụng và ứng dụng xác thực người dùng (tôi có thể tạo yêu cầu biểu đồ bằng mã thông báo OK), redirect_uri xảy ra, và toàn bộ trang làm mới, để lại Facebook và sau đó chỉ cho tôi thấy nội dung của trang "URL Canvas" của tôi (với tên miền của máy chủ của tôi), chứ không phải iframe trên Facebook.

Tôi hiện có này như một thô quá trình hai bước ...

Đây là những gì mã của tôi trông như thế nào trên trang đầu tiên (index.php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 

$code = $_REQUEST['code']; 

if(!$code){ 
$display= 'page'; 
$scope= 'manage_pages, offline_access, read_insights, publish_stream, user_about_me, user_likes, email'; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$oauth_url = 'https://www.facebook.com/dialog/oauth?canvas=1&client_id='.$app_id.'&display='.$display.'&redirect_uri='.urlencode($redirect_url).'&scope='.$scope; 
$config = array('appId' => $app_id,'secret' => $app_secret,'cookie' => true,'domain' => true); 
$facebook_client = new Facebook($config); 

echo "<script type=\"text/javascript\">top.location.href = \"".$oauth_url."\";</script>"; 
} 
?> 

và trang thứ hai (bước 2 .php):

<?php 
require('src/facebook.php'); 

$app_id = '123456789'; 
$app_secret = '1234secrets1234'; 
$canvas_page = "https://apps.facebook.com/123456789/"; 
$canvas_url = "https://myserver.com/apptest/"; 


if($_REQUEST['code']){ 
$code=$_REQUEST['code']; 
$redirect_url = 'https://myserver.com/apptest/step2.php'; 
$link="https://graph.facebook.com/oauth/access_token?canvas=1&client_id=".$app_id."&redirect_uri=".urlencode($redirect_url)."&client_secret=".$app_secret."&code=".$code; 
$string = file_get_contents($link); 
$auth_token=substr($string, 13, 150); 

$graph_url = "https://graph.facebook.com/me?access_token=".$auth_token; 
$user = json_decode(file_get_contents($graph_url)); 
echo("Hello " . $user->name); 
} 

Một lần nữa, khi người dùng đã ủy quyền ứng dụng và ứng dụng đã xác thực người dùng, gọi biểu đồ hoạt động.

Bất kỳ ý tưởng nào?

+0

bản sao có thể có của [Tại sao tôi nhận được chỉ mục chưa được xác định cho signed_request trong ứng dụng facebook của mình?] (Http://facebook.stackoverflow.com/questions/7534241/why-do-i-get-an-undefined-index -for-signed-request-in-my-facebook-app) – ifaour

Trả lời

1

Tôi đã làm việc này. Trên ứng dụng> cài đặt> cơ bản tôi đã không thiết lập một không gian tên, do đó, URL nó đã cho tôi cho các ứng dụng trên facebook là như thế này: https://apps.facebook.com/123456789/ và bây giờ với không gian tên họ đã thay đổi nó thành: https://apps.facebook.com/myappname. Vì vậy, đó có thể là nó. Tôi đã cố gắng cẩn thận làm theo bản demo autorization PHP đơn giản trên trang này: https://developers.facebook.com/docs/appsonfacebook/tutorial/ và nó có vẻ hoạt động tốt ngay bây giờ.

Cảm ơn sự giúp đỡ!

+0

Tôi cũng nhận thấy điều tương tự. Khi tôi sử dụng URL với không gian tên nó hoạt động. Khi tôi sử dụng URL với id ứng dụng, nó không thành công. WTH? – hekevintran

6

Khi điều hướng đến hộp thoại OAuth, trang web (không phải khung của ứng dụng của bạn) được điều hướng đến URL OAuth. Để quay lại iframe Facebook sau khi xác thực, bạn cần phải đặt URL chuyển hướng OAuth thành URL canvas_page. Mã được hiển thị ở trên đang điều hướng đến URL của máy chủ của tôi khi được chuyển hướng để ứng dụng của bạn chiếm toàn bộ trang (vì bạn đã rời khung nội tuyến Facebook khi điều hướng đến hộp thoại OAuth). Mã của bạn tại canvas_url cần phải xác định xem mã đó có được nhập từ ủy quyền (thành công hay không thành công) hoặc nếu mã được nhập bằng mã thông báo truy cập hợp lệ sau khi xác thực.

Ngoài ra URL canvas_page của bạn dường như bao gồm máy chủ ứng dụng facebook và ID ứng dụng của bạn. Nó phải là máy chủ ứng dụng facebook và tên ứng dụng của bạn (URL chuyển hướng phải giống với URL "Trang vải nền" trên trang dành cho nhà phát triển ứng dụng của bạn).

+0

Tôi đã thử nhưng tôi gặp lỗi API nói rằng miền Facebook không được phép. – jonkeegan

+0

Tôi nghĩ URL canvas_page của bạn không đúng, xem ở trên. –

+0

ở cuối canvas_url bạn phải thêm "/" .. thay vì "http://apps.facebook.com/my_canvas_name" sử dụng "http://apps.facebook.com/my_canvas_name/" – mjs

Các vấn đề liên quan