zoukankan      html  css  js  c++  java
  • Facebook Api 使用(PHP版)

    如果想通过Facebook登录到你的网站,Facebook站外API可以实现你想要的,如下介绍实际使用.

    (我目前没在网上找到中文的更详细的介绍了,呵呵.)

    (提示:Facebook不支持取得朋友的邮件地址,如果需求是这个,别在浪费功夫了)

    注册Facebook Key http://www.facebook.com/developers/apps.php 注册后可以得到

    App ID,API Key,App Secret (如果你想测试,必须要一个域名,申请的时候填上)

    https://github.com/facebook/php-sdk/下载PHP开发包

    进入examples/页面,里面有个示例文件,

    $facebook = new Facebook(array(
      'appId'  => '',//你的App ID
      'secret' => '',//你的App Secret
      'cookie' => true,
    ));

    修改如上

    如果你本地的服务器无法验证FACEBOOK的SSL验证,请修改facebook class 的方法makeRequest

    在curl_init()之后添加:

    $opts[CURLOPT_SSL_VERIFYPEER] = false; 
    $opts[CURLOPT_SSL_VERIFYHOST] = 2; 

    上面的API支持FACEBOOK新旧两种格式,

    通过调用api传不同的参数实现

    1.路径型,如:/me

    还有具体的参数可以参考:http://developers.facebook.com/docs/reference/api/ 页面

    在右边objects下面,每个点击进去之后都有非常多的参数

    2.数组型,如array("method"=>"links.get")

    数组型是为兼容旧的API而保留的,建议用新的.旧的所有功能基本上新的都有,具体参数可以参考:getApiUrl 方法

    如果你使用 /me 你会发现你取不到自己的邮箱地址,是因为你没权限,在http://developers.facebook.com/docs/reference/api/user/

    你会发现有很多东西是要得到用户的授权才可以访问的,以下是具体的授权方式:

    https://graph.facebook.com/oauth/authorize?client_id=171908639493418&redirect_uri=you url address&scope=read_mailbox,email

    你也可以自己来往facebook里添加生成上述地址的方法,这里不介绍了

    可以得到授权,你就可以往facebook推送消息了

    $dat=array(
      "picture"=>"image",
      "subject"=>"你好啊~",
      "message"=>"呵呵,测试FACEBOOKAPI~,这个是测试信息.",
     );

    $f = $facebook->api('/me/friends');
     foreach($f['data'] as $v){
    $f = $facebook->api('/'.$v['id'].'/feed',"POST",$dat);//$f是返回你发送的消息的ID,消息只能发送到公开的版面,比如消息墙
     }

    通过不同的$dat参数来实现不同的消息,具体你就参考上面的API参数解释的地址吧

    还有一个问题,加入一个用户登录了你的网站后立即跑到facebook去把他刚才的授权给取消掉,你去取他的信息的时候就出错误了,

    facebook也为这个情况提供了一个解决办法,请参考:http://developers.facebook.com/docs/reference/api/subscription/

    就是让你的应用程序就订阅用户的状态,但用户使用了你的应用程序之后对你的在facebook上的应用进行有关操作的时候,facebook会发消息提示你

    想使用这个功能,你得先到你的网站建立一个回调验证程序,FACEBOOK也为你提供了,可以在http://github.com/facebook/real-time/blob/master/samples/ 下载得到

    把里面的 callback.php 放到你的站点目录,这个文件用于验证应用程序是你的外还用于得到用户的活动消息,

    下面是如何添加订阅,查询订阅,删除订阅的代码,(更改就是发送添加订阅,存在的话会覆盖掉以前的)

    $acc=file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=you app id&client_secret=you app secret&grant_type=client_credentials");
        $t=explode("=",$acc);
       $dat=array(
         "object"=>"user",
      "fields"=>"feed,friends,activities,interests,music,books,movies,television,likes,checkins",//就支持这些
      "callback_url"=>"",//刚刚那个callback.php 
      "verify_token"=>"abc",//你的callback.php里的那个token,自己看下或自己修改
        "access_token"=>$t[1]
     );
     $f = $facebook->api('/appid/subscriptions',"POST",$dat);//添加
     print_r($f);//啥也没返回
       $dat=array(
        "access_token"=>$t[1]
     );
     $f = $facebook->api('/appid/subscriptions',"GET",$dat);//查询
     print_r($f);//很多关于你订阅的东东
     $param = array('access_token' => $t[1]);
     $subs = $facebook->api('/appid/subscriptions', 'DELETE', $param); //干掉了

     添加后如果别人移除了他使用你的应用程序,会得到一个消息,大约如下:

    Array
    (
        [fb_sig_uninstall] => 1//YOU APP UNINSTALL
        [fb_sig_locale] => en_US
        [fb_sig_in_new_facebook] => 1
        [fb_sig_time] => 1293444384.8939
        [fb_sig_added] => 0
        [fb_sig_user] => 100001008942959
        [fb_sig_country] => us
        [fb_sig_api_key] => appkey
        [fb_sig_app_id] => appid
        [fb_sig] => 383d629e8eeac39022adbc1d158f6065
    )

    新版的API把crt证书移除了,但我这里还有保留,需要的下载

    这样就可以实现facebook ssl 验证了,而不用设置

    $opts[CURLOPT_SSL_VERIFYPEER] = false; 
    $opts[CURLOPT_SSL_VERIFYHOST] = 2; 

    不过要修改:

    public static $CURL_OPTS = array(
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 60,
        CURLOPT_USERAGENT      => 'facebook-php-2.0',
      );

    public static $CURL_OPTS = array(
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 60,
        CURLOPT_USERAGENT      => 'facebook-php-2.0',
       CURLOPT_CAINFO      => '/home/lonely/public_html/fb_ca_chain_bundle.crt',//你的地址
      );

    搞定~

    错误:

    200 The user hasn't authorized the application to perform this action 用户没有权限

    210 User not visible 用户无效
     
    开发完毕,记得进入FACEBOOK的应用程序页面,吧沙盒模式关闭,否则用户没法登陆的~
  • 相关阅读:
    P2617 Dynamic Rankings (动态开点权值线段树 + 树状数组)
    2019HDU多校 Round5
    2019牛客多校 Round6
    2019牛客多校 Round5
    2019HDU多校 Round4
    [转]SQLServer : EXEC和sp_executesql的区别
    无法执行 FunctionImport“entitys.xx”,因为未将它映射到存储函数。EF
    【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
    IE11 Windows7下F12 DOC资源管理器不能用Exception in window.onload: Error: An error has ocurredJSPlugin.3005
    VS2015编译错误:调用的目标发生了异常--->此实现不是Windows平台FLPS验证的加密算法的一部分。
  • 原文地址:https://www.cnblogs.com/liushannet/p/1921369.html
Copyright © 2011-2022 走看看