方维o2o生活服务系统新浪微博登录设置方法

  • PHP二次开发网
  • 2013-11-11 09:08
  • PHP二次开发网
  • 阅读(7077)
  • 评论(0)
  • 摘要: 1.首先申请新浪微博登录的 APP_KEY与 APP_SECRET,申请地址:http://open.weibo.com/,创建一个网站接入,详细方法不多说,网上有很多例子。 2.配置网站后台的APP_KEY与 APP_SECRET,如图: ... ...
    1.首先申请新浪微博登录的 APP_KEY与 APP_SECRET,申请地址:http://open.weibo.com/,创建一个网站接入,详细方法不多说,网上有很多例子。

    2.配置网站后台的APP_KEY与 APP_SECRET,如图:



    APP_KEY与 APP_SECRET的配置,在第一步完成之后,就能看到对应的信息,填入即可。这里主要说下回调地址。

    根据新浪提供的源码包,回调地址指向一个文件:callback.php

    而在本站系统中,理论上来说,直接指向网站域名即可。结果配置了好久,就是无法实现登陆的操作,也没有错误的弹出,一开始还以为是程序的问题,排查了很久,没有发现问题。于是分析其源码。

    找到文件:system/api_login/Sina_api.php

    在里面能够找到这样一个函数:

    [代码]php代码:

    public function callback()
         {
              require_once APP_ROOT_PATH.'system/api_login/sina/saetv2.ex.class.php';
              es_session::start();
              //$sina_keys = es_session::get("sina_keys");
              $o = new SaeTOAuthV2($this->api['config']['app_key'],$this->api['config']['app_secret']);
              if (isset($_REQUEST['code'])) {
                   $keys = array();
                   $keys['code'] = $_REQUEST['code'];
                   if($this->api['config']['app_url']=="")
                   {
                        $app_url = get_domain().APP_ROOT."/api_callback.php?c=Sina";
                   }
                   else
                   {
                        $app_url = $this->api['config']['app_url'];
                   }
                   $keys['redirect_uri'] = $app_url;
                   try {
                        $token = $o->getAccessToken( 'code', $keys ) ;
                   } catch (OAuthException $e) {
                        print_r($e);exit;
                   }
              }
             
             
              $c = new SaeTClientV2($this->api['config']['app_key'],$this->api['config']['app_secret'] ,$token['access_token'] );
              $ms  = $c->home_timeline(); // done
              $uid_get = $c->get_uid();
              $uid = $uid_get['uid'];
              $msg = $c->show_user_by_id( $uid);//根据ID获取用户等基本信息
             
             
              $msg['field'] = 'sina_id';
              $msg['sina_token'] = $token['access_token'];
              es_session::set("api_user_info",$msg);
             
              if(!$msg['name'])
              {
                 app_redirect(url("index"));
                 exit();
              }
              //print_r($msg);die();
              $user_data = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where sina_id = ".$msg['id']." and sina_id <> 0");    
             
              if($user_data)
              {
                        $user_current_group = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user_group where id = ".intval($user_data['group_id']));
                        $user_group = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user_group where score <=".intval($user_data['score'])." order by score desc");
                        if($user_current_group['score']<$user_group['score'])
                        {
                             $user_data['group_id'] = intval($user_group['id']);
                        }                   
                        $GLOBALS['db']->query("update ".DB_PREFIX."user set sina_token = '".$token['access_token']."',login_ip = '".get_client_ip()."',login_time= ".get_gmtime().",group_id=".intval($user_data['group_id'])." where id =".$user_data['id']);                   
                        $GLOBALS['db']->query("update ".DB_PREFIX."deal_cart set user_id = ".intval($user_data['id'])." where session_id = '".es_session::id()."'");
                        es_session::delete("api_user_info");
                        $is_bind = intval(es_session::get("is_bind"));                   
                        if($is_bind)
                        {
                             if(intval($user_data['id'])!=intval($GLOBALS['user_info']['id']))
                             {
                                  showErr("该帐号已经被别的会员绑定过,请直接用帐号登录",0,url("shop","uc_center#setweibo"));
                             }
                             else
                             {
                                  es_session::set("user_info",$user_data);
                                  app_redirect(url("shop","uc_center#setweibo"));
                             }
                        }
                        else
                        {
                             require_once APP_ROOT_PATH."system/libs/user.php";
                             auto_do_login_user($user_data['user_name'],$user_data['user_pwd'],$from_cookie = false);
                             app_recirect_preview();
                        }
              }
              elseif($is_bind==1&&$GLOBALS['user_info'])
              {
                  
                   //当有用户身份且要求绑定时
                   $GLOBALS['db']->query("update ".DB_PREFIX."user set sina_id= '".intval($msg['id'])."', sina_token ='".$token['access_token']."' where id =".$GLOBALS['user_info']['id']);                             
                   app_redirect(url("shop","uc_center#setweibo"));
              }
              else{
              $this->create_user();
                   app_redirect(url("shop","user#stepone"));
              }
             
             
         }


    这个即是调用毁掉地址的函数。


    然后找到根目录下的文件:api_callback.php

    看到里面有如下代码:

    [代码]php代码:

    require './system/common.php';
    require './app/Lib/tuan_init.php';
    
    $api_class = trim(addslashes($_REQUEST['c']));
    if(file_exists(APP_ROOT_PATH.'system/api_login/'.$api_class.'_api.php'))
    {
         $api = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."api_login where class_name='".$api_class."'");
         require_once APP_ROOT_PATH.'system/api_login/'.$api_class.'_api.php';
         $api_class = $api['class_name']."_api";
         $api_obj = new $api_class($api);
         $api_obj->callback();
    }


    可以知道,这里需要获取这个参数:$api_class = trim(addslashes($_REQUEST['c']));


    其实根据设计的原理,在毁掉地址的函数里面,应该有这么一个参数:c=Sina,然后以便于找到对应的回调api。

    在api_callback.php里面,打印获取到的$api_class这个参数,为空。

    于是便想,如果回调地址里面手工加入这个参数看看会如何。于是回调地址填写:http://www.XXXX.com/api_callback.php?c=Sina (请把XXXX替换成你的域名),也就是在这里把这个c的参数传过去。

    经试验,成功。


    注意:本源码是在淘宝购买的破解版,可能是原来破解不是很成功导致的;也可能是官方就需要这样的配置。就不得而知了,反正我没有用正版。嘘。。。。请不要外传哦,自己知道就行了。



    PHP技术交流QQ群:422137578

    除非注明,文章均为 PHP二次开发 原创,转载请注明本文地址:http://www.php2.cc/article-928-1.html

    相关阅读

    最新评论

    用户名:  *

    邮 箱:  *

    网 址: 注意加上“http://”哦!