Viết một ứng dụng (app) FaceBook bằng PHP - phần 2: Nào ta cùng code

Thảo luận trong 'Lập trình web với PHP' bắt đầu bởi babyinternet, 11/10/12.

  1. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Trong phần 1, các bạn đã làm quen với cách đăng ký một ứng dụng với FaceBook. Sau đây, chúng ta sẽ bắt đầu việc xây dựng ứng dụng và kết nối ứng dụng với server của FaceBook.

    Phần 2: Xây dựng ứng dụng FaceBook trên nền tảng PHP


    Trước tiên, do việc xây dựng app của chúng ta dựa trên nền tảng PHP, cho nên bạn cần download bộ SDK của FaceBook dựa trên nền tảng PHP. Chúng ta chép bộ SDK vào thư mục chứa ứng dụng của chúng ta. Ví dụ /appfacebook/src/.

    Tiếp theo, bạn tạo 1 file config.php để cấu hình để SDK có thể kết nối với Restful Service của Facebook. Nội dung file này như sau:

    PHP:
    <?php
    /*************************************************************************
    * Facebook App: Tutorial FaceBook App
    * Author: Nguyen Duy Nhan (babyinternet)
    * Author URL: http://vnwebmaster.com
    *************************************************************************/
     
    $config = array();
     
    $config["appId"] = '123456789';
     
    $config["secret"] = '123456789abc';
     
    $config["fileUpload"] = false// optional
     
    $config["cookie"] = true// enable optional cookie support  

    ?>
    Trong trong đoạn code trên, bạn cần thay lại $config["appId"]$config["secret"] bằng các chuỗi kí tự được Facebook cung cấp. Bạn xem lại phần 1 nếu cần nhé.

    Tiếp theo, bạn viết file index.php để chạy app của mình. Hãy bắt đầu với đoạn code đơn giản sau:

    PHP:
    <?php
    /*************************************************************************
    * Facebook App: Tutorial FaceBook App
    * Author: Nguyen Duy Nhan (babyinternet)
    * Author URL: http://vnwebmaster.com
    *************************************************************************/

    require_once("config.php");
    require_once(
    "src/facebook.php");
    $facebook = new Facebook($config);

    ?>
    Nếu bạn lập trình PHP, tôi sẽ không cần giải thích nhiều về đoạn code này nữa. Nói một cách đơn giản và dễ hiểu, chúng ta đã cấu hình và kết nối với SDK của FaceBook thông qua object $facebook.

    Để kiểm tra người dùng đã "Like" ứng dụng hay chưa, bạn có thể sử dụng đoạn code sau:

    PHP:
    if($signed_request["page"]["liked"]!=1){
     
    $is_liked false
    }else{
     
    $is_liked true;
    }
    Nếu biến $is_liked trả về true nghĩa là người dùng đã "Like" ứng dụng, bạn có thể đưa họ đến ứng dụng. Ngược lại bạn có thể hiển thị ra thông tin đề nghị người dùng "Like" ứng dụng.

    Lúc này, chúng ta sẽ cần một cấu trúc if else để xử lý vấn đề người dùng đã like hay chưa. Vấn đề này khá đơn giản nên tôi không hướng dẫn thêm nữa nhé.

    Tiếp theo, chúng ta sẽ lấy thông tin người dùng từ FaceBook để phục vụ cho mục đích của mình. Bạn có thể lấy rất nhiều thứ, nhưng trong tutorial này tôi chỉ lấy những thông tin cơ bản thôi:

    PHP:
    $user = $facebook->getUser();
        if ($user) {
          try {
            // Proceed knowing you have a logged in user who's authenticated.
            $user_profile = $facebook->api('/me');
          } catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
          }
            $code = $_REQUEST["code"];
            if(empty($code)) {
                $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
                $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
                . $config["appId"] . "&redirect_uri=" . urlencode(CANVAS_PAGE) . "&state="
                . $_SESSION['state'];
        
                echo("<script> top.location.href='" . $dialog_url . "'</script>");
            }
            //get user access_token
            $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
            . $config["appId"] . '&redirect_uri=' . urlencode(CANVAS_PAGE) 
            . '&client_secret=' . $config["secret"] 
            . '&code=' . $code;
            $access_token = file_get_contents($token_url);
            
            // Run fql query
            $fql_query_url = 'https://graph.facebook.com/'
            . '/fql?q=SELECT+birthday+FROM+user+WHERE+uid=me()'
            . '&' . $access_token;
            $fql_query_result = file_get_contents($fql_query_url);
            $fql_query_obj = json_decode($fql_query_result, true);
            $birthday = $fql_query_obj["data"][0]["birthday"];
            ?>
            <img src="https://graph.facebook.com/<?php echo $user?>/picture">
            <h3>Chào <strong><?=$outname " " $user_profile["name"];?></strong></h3>
            
            <div>
                <p>Ngày sinh của bạn là: <?=$birthday?></p>
                
            </div>
            <?php
        
    }else{
            echo(
    "<script> top.location.href='" $facebook->getLoginUrl() . "&scope=user_birthday'</script>");
        }
    Hãy nhìn đoạn code tôi vừa đăng lên, cũng không rắc rối lắm đâu. Tôi sẽ giải thích ngay sau đây:

    1. Đầu tiên $facebook->getUser() sẽ lấy ID của User Facebook đang xem ứng dụng. Nếu biến $user trả về giá trị False nghĩa là người dùng chưa đăng nhập. Lúc này, chúng ta sẽ redirect người dùng đến trang đăng nhập thông qua đường dẫn $facebook->getLoginUrl() kèm theo &scope=user_birthday để xin người dùng quyền được xem thông tin ngày sinh nhật của người dùng.
    2. Trong trường hợp chúng ta đã được sự cho phép của người dùng, biến $user sẽ trả về là ID của người dùng. Lúc này bạn có thể tiếp tục lấy thông tin người dùng thông qua $user_profile = $facebook->api('/me');
    3. Tiếp theo tôi sẽ kiểm tra thêm một lần nữa xem ứng dụng của chúng ta có quyền đã lấy thông tin người dùng hay chưa. Chuyện này giúp chúng ta chắc chắn thêm một lần nữa là ứng dụng có quyền lấy thông tin để thực thi. Đoạn code sau sẽ làm điều đó:

      PHP:
      $code $_REQUEST["code"];
              if(empty(
      $code)) {
                  
      $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
                  
      $dialog_url "http://www.facebook.com/dialog/oauth?client_id=" 
                  
      $config["appId"] . "&redirect_uri=" urlencode(CANVAS_PAGE) . "&state="
                  
      $_SESSION['state'];
          
                  echo(
      "<script> top.location.href='" $dialog_url "'</script>");
              }
    4. Sau khi kiểm tra xong, đoạn code cuối cùng của tôi là một ví dụ sử dụng fql query để lấy thông tin birthday của người dùng phục vụ thêm cho công việc. Còn thông tin người dùng cơ bản tôi đã có ở mảng $user_profile rồi.

    Đoạn code hoàn chỉnh cho file index.php mà tôi nói đến như sau:

    PHP:
    <?php
    /*************************************************************************
    * Facebook App: Tutorial FaceBook App
    * Author: Nguyen Duy Nhan (babyinternet)
    * Author URL: http://vnwebmaster.com
    *************************************************************************/
    require_once("includes/config.php");
    require_once(
    "includes/src/facebook.php");
    $facebook = new Facebook($config);

    $signed_request $facebook->getSignedRequest();
    if(
    $signed_request["page"]["liked"]!=1){
     
    $is_liked false
    }else{
     
    $is_liked true;
    }
        
    ?>
        
    <!doctype html>
    <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <meta http-equiv="Content-Type" co
    <head>
    <title>Tutorial FaceBook App</title>

    </head>
    <body>
    <?php
    if($is_liked ){
        
    $user $facebook->getUser();
        if (
    $user) {
          try {
            
    // Proceed knowing you have a logged in user who's authenticated.
            
    $user_profile $facebook->api('/me');
          } catch (
    FacebookApiException $e) {
            
    error_log($e);
            
    $user null;
          }
            
    $code $_REQUEST["code"];
            if(empty(
    $code)) {
                
    $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
                
    $dialog_url "http://www.facebook.com/dialog/oauth?client_id=" 
                
    $config["appId"] . "&redirect_uri=" urlencode(CANVAS_PAGE) . "&state="
                
    $_SESSION['state'];
        
                echo(
    "<script> top.location.href='" $dialog_url "'</script>");
            }
            
    //get user access_token
            
    $token_url 'https://graph.facebook.com/oauth/access_token?client_id='
            
    $config["appId"] . '&redirect_uri=' urlencode(CANVAS_PAGE
            . 
    '&client_secret=' $config["secret"
            . 
    '&code=' $code;
            
    $access_token file_get_contents($token_url);
            
            
    // Run fql query
            
    $fql_query_url 'https://graph.facebook.com/'
            
    '/fql?q=SELECT+birthday+FROM+user+WHERE+uid=me()'
            
    '&' $access_token;
            
    $fql_query_result file_get_contents($fql_query_url);
            
    $fql_query_obj json_decode($fql_query_resulttrue);
            
    $birthday $fql_query_obj["data"][0]["birthday"];
            
    ?>
            <img src="https://graph.facebook.com/<?php echo $user?>/picture">
            <h3>Chào <strong><?=$outname " " $user_profile["name"];?></strong></h3>
            
            <div>
                <p>Ngày sinh của bạn là: <?=$birthday?></p>
                
            </div>
            <?php
        
    }else{
            echo(
    "<script> top.location.href='" $facebook->getLoginUrl() . "&scope=user_birthday'</script>");
        }
    }else{
        
    ?>
        <img src="images/like.jpg" border="0" />
        <?php
    }

    ?> 
    </body>
    </html>    
    OK! Vậy là về căn bản bạn có thể lấy dữ liệu, thao tác với dữ liệu từ FaceBook rồi. Tới đây bạn có thể viết một ứng dụng đơn giản. Những vấn đề nâng cao như post dữ liệu lên FaceBook, post lên wall của người dùng, đăng ảnh ... đang đợi bạn nghiên cứu thêm :love:

    Chúc các bạn thành công.
     
  2. JB.Nguyen

    JB.Nguyen Đang làm quen

    Tham gia ngày:
    9/1/12
    Bài viết:
    69
    Đã được thích:
    0
    Điểm thành tích:
    6
    Thanks bác Nhân ... anh em chuẩn bị xuất bản App thôi nào !! :)
     
  3. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Một số phần nữa cũng khá hay như việc đăng ảnh lên FaceBook, tag người dùng, post lên wall người dùng... cũng khá hay và cần tuy nhiên chắc mình không viết vì viết sâu quá chẳng còn gì để nghiên cứu và sẽ xảy ra tình trạng app tràn lan trên FB gây khó chịu cho người dùng. Nên thôi mọi người cứ tự tìm hiểu nhá :D

    Có câu hỏi gì thì vui lòng post lên :D
     
  4. nguyenhminh84

    nguyenhminh84 Lính mới

    Tham gia ngày:
    13/10/12
    Bài viết:
    4
    Đã được thích:
    0
    Điểm thành tích:
    1
    Thanks đã chia sẻ
     
  5. 8xdesign

    8xdesign Cảnh sát thôn - Spam cẩn thận =_+

    Tham gia ngày:
    16/11/09
    Bài viết:
    517
    Đã được thích:
    0
    Điểm thành tích:
    16
    Nơi ở:
    Tiệm cây xanh - Xanhdecor.com
    App dạo này ra đời như nấm sau mưa. Mục đích cao cả là câu like và bán like :-ss
     
  6. traidatvuong

    traidatvuong Đang làm quen

    Tham gia ngày:
    24/10/12
    Bài viết:
    36
    Đã được thích:
    0
    Điểm thành tích:
    6
    thanks bác...cái này rất có ích
     
  7. vo_danh_7411

    vo_danh_7411 Đang làm quen

    Tham gia ngày:
    26/9/12
    Bài viết:
    45
    Đã được thích:
    0
    Điểm thành tích:
    6
    Hôm nay phải bắt tay làm thử thôi. chưa học php bao giờ nên chắc cũng gian nan đây
     
  8. nguyendattai

    nguyendattai Đang làm quen

    Tham gia ngày:
    2/11/12
    Bài viết:
    37
    Đã được thích:
    0
    Điểm thành tích:
    6
    Sao không viết tiếp đi bác nhỉ?
     
  9. thang28101993

    thang28101993 Lính mới

    Tham gia ngày:
    6/11/12
    Bài viết:
    3
    Đã được thích:
    0
    Điểm thành tích:
    1
    bác ơi, cho em xin full code được không.thanks bác
     
  10. thanhluan710

    thanhluan710 Lính mới

    Tham gia ngày:
    22/10/10
    Bài viết:
    26
    Đã được thích:
    0
    Điểm thành tích:
    1
    Cũng phải cày cuốc thêm chút PHP thôi. Bỏ lâu quên hết rồi.
     
  11. bombo.com.vn

    bombo.com.vn Lính mới

    Tham gia ngày:
    20/11/12
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    @ babyinternet: khi viết xong ứng dụng rồi làm thế nào để test ứng dụng vậy bạn?
     
  12. Denis

    Denis Đang làm quen

    Tham gia ngày:
    2/11/12
    Bài viết:
    91
    Đã được thích:
    0
    Điểm thành tích:
    6
    Nơi ở:
    probiker
    Đem lên chạy thử như một ứng dụng hoàn chỉnh và test bằng tài khoản của mình hoặc dùng clone ấy bác !
     
  13. duclong_qb

    duclong_qb Lính mới

    Tham gia ngày:
    30/11/12
    Bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    1
    anh babyinternet đã kiểm tra được like hay chưa rồi, nhưng mà nếu chưa like thì phải làm tiếp như thế nào nữa để xuất hiện nút like cho facebook page của app mình viết? code ở trên chỉ xuất ra cái image like.jpg ko à? Mong anh chỉ rõ hơn tí tí. :D
     
  14. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Button like FaceBook đã có sẵn rồi, bạn chỉ cần thay vì hiện image like.jpg như ở trên chúng ta sẽ thay thành button like là được mà.
     
  15. duclong_qb

    duclong_qb Lính mới

    Tham gia ngày:
    30/11/12
    Bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    1
    anh @babyinternet oi, em đã thử tạo button like theo developers.facebook.com/docs/reference/plugins/like, nhưng mà like xong nó cũng kiểm tra like = false, ko biết cái like đó có đúng hay không?, hơn nữa em muốn button like fanpage như apps này facebook.com/vinadesign.com.vn/app_488730644480692, anh baby chỉ dùm em làm button like giống apps này với :gach: ^^, thks anh nhiều
     
  16. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Quay lại bài tut, cái ở bài tut chính là cái của VinaDesign đang làm :)
     
  17. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Viết tới đó thôi, muốn viết gì nữa giờ bạn :D
    Cái gì uỵch tẹc hết nó cũng mất hay, đã có đủ thôngtinrn rồi, phát triển thế nào là tùy ở bạn.
     
  18. LuuQuangICT

    LuuQuangICT Lính mới

    Tham gia ngày:
    26/12/12
    Bài viết:
    3
    Đã được thích:
    0
    Điểm thành tích:
    1
    Hic! tình hình là em cũng mới nghịch về App Fb. E cũng đã học qua PHP rồi, hiểu tương đối về code bác viết gì nhưng thực sự thì e chưa hiểu về nó hoạt động như thế nào lắm. Ý em là cấu trúc của 1 ứng dụng trên facebook ấy???

    Em có nghịch cái của heroku nhưng đến lúc muốn dùng cái của bác thì e lại chẳng biết dùng như thế nào cả. hic
    Nếu em dùng heroku thì có dùng được cái của bác không? cái phần cấu hình ấy??? Cái của bác là dùng cho host nào vậy??? em chưa hiểu mấy cái này lắm

    Bác có thể nói qua cho em hiểu được không ạ :( e cảm ơn bác nhiều !!!
     
  19. LuuQuangICT

    LuuQuangICT Lính mới

    Tham gia ngày:
    26/12/12
    Bài viết:
    3
    Đã được thích:
    0
    Điểm thành tích:
    1
    Hic! em đã làm được phần nếu chưa like thì hiện ra cái like.jpg còn không thì chuyển qua 1 trang.php khác. Nhưng e add cái code của bác vào thì lại chẳng hiện ra được tên user hay avatar, ngày sinh gì cả :((
     
  20. babyinternet

    babyinternet Administrator

    Tham gia ngày:
    4/7/08
    Bài viết:
    4,655
    Đã được thích:
    1,583
    Điểm thành tích:
    113
    Nơi ở:
    [}{]e[][]
    Mình cũng không hiểu là bác chưa hiểu chỗ nào luôn :p
     
Đang tải...

Chia sẻ trang này