【原创】 QQ互联流程[详细版]
栏目:PHP  作者:隆航  阅读:(2384)

上次的一篇QQ互联很多朋友看到后觉得说的不够仔细,加上自己因为博客改版的缘故重新整理了一下QQ互联的一些资料,需要这方面资料的朋友可以点进来看下详细步骤。这篇相对来说说的比较多,需要耐心才能看完哦。

首先是上一篇文章的地址:

http://loveteemo.com/article-74.html

这里需要补充的几点是在使用的过程中经常碰到的问题。

今天要说的只是针对QQ互联的操作,其他的互联请参考相关网站。

第一步:上一篇文章说了的需要申请API接口的两码

这里我就不详细的唠叨了,请自己去申请。

第二步:互联开始

首先假设我的网站有一个登陆按钮,那么这个按钮指向哪里呢?

所以第一个就是我们需要找的登陆,这里的话我是放在common控制器下的loginqq方法,所以我的按钮写的是:

<a href="{:U('Common/loginqq',array("type"=>"qq"))}" class="from" >QQ访问</a>

需要注意的是:你网站第一次申请的时候,请用QQ的图标来代替文字,不然申请不通过的

对应的函数代码:

//QQ登陆
public function loginqq($type = null) {
        empty($type) && $this->error('参数错误');
        import('Org.ThinkSDK.ThinkOauth');
        $sns = ThinkOauth::getInstance($type);
        redirect($sns->getRequestCodeURL());
    }

因为需要第三方类库,所以在头部需要use一下 use ThinkOauth;

第三方类库请到上一篇文章或者下载区找。

第三步:设置配置参数

因为你的参数需要传递给服务器,这样才能远程获取返回的token,用openid和token才能拿到用户的信息。

<?php
/**
* 等三方登陆插件配置
* @date: 2015年10月17日
* @author: Administrator
* @return:
*/
$SITE_URL = "http://loveteemo.com/";
define('URL_CALLBACK', "" . $SITE_URL . "Home/Common/callback?type=");
return array(    
    #腾讯QQ登录配置
    'THINK_SDK_QQ' => array(
        'APP_KEY' => '101232670', # APP ID
        'APP_SECRET' => '47d496c5cab11fad38b140e19084977f', # KEY
        'CALLBACK' => URL_CALLBACK . 'qq',
    ),
 ),
);

所以这个配置是需要自己在网站添加的,我的做法是单独的sdk.php,然后再config.php中 'LOAD_EXT_CONFIG'  加载进来的

需要注意的是:

1.你的网站要填写正确的回调地址,保证要和QQ互联上填写的一样,修改其中一个之后,另一个也要及时修改。否则很难找到这个原因

2.填写在QQ互联的地址是不需要填写参数的,所以这里后面的 ?type=qq 在QQ互联的后台是没有的

3.在传递参数的时候是不允许 loveteemo.com/Home/Common/callback/type/qq 这样的写法是错的,需要用 ? 来实现

到这里之后,我们可以在类库中打印出来查看我们的信息是否填写正确,在 ThinkPHP/Library/Org/ThinkSDK/ThinkOauth.class.php 的169行添加:

dump($params);die;

来打印自己的参数是否传递进去,实际上可以不用操作,直接看是不是报错就可以了。

第四步:增加回调函数

在上面我们写的回调地址对应的写上回调方法:common/callback

//QQ登陆回调
public function callback($type = null, $code = null) {
            //防止乱码
        header("Content-type: text/html; charset=utf-8");
        (empty($type) || empty($code)) && $this->error('参数错误');
        import('Org.ThinkSDK.ThinkOauth');
        $sns = ThinkOauth::getInstance($type);
        $extend = null;
        //腾讯微博
        if ($type == 'tencent') {
            $extend = array('openid' => $this->_get('openid'), 'openkey' => $this->_get('openkey'));
        }
        $tokenArr = $sns->getAccessToken($code, $extend);
            /**
             * $tokenArr 返回的参数
             * array(4) {
             *  ["access_token"] => string(32) "EF689CF1CEC547B2C3EA7F1367A3D1E8"
             *  ["expires_in"] => string(7) "7776000"
             *  ["refresh_token"] => string(32) "1DA94062299F40B1B7686EDB18D3CCE5"
             *  ["openid"] => string(32) "7C8F797F30B08554A6E39A537F9A324B" 用户唯一识别标志
             *}
             */
        $openid = $tokenArr['openid'];
        $token = $tokenArr['access_token'];
        if ($openid) {
            $field = strtolower($type);
            $data = $sns->call('user/get_user_info');
            //dump($data);die;
            /**
           * $data 返回参数
                 * array(18) {
                 *  ["ret"] => int(0)
                 *  ["msg"] => string(0) ""
                 *  ["is_lost"] => int(0)
                 *  ["nickname"] => string(21) "那年,烟雨重楼"  昵称
                 *  ["gender"] => string(3) "男" 性别
                 *  ["province"] => string(0) ""
                 *  ["city"] => string(0) ""
                 *  ["year"] => string(4) "1993" 出生年
                 *  ["figureurl"] => string(73) "http://qzapp.qlogo.cn/qzapp/101232670/7C8F797F30B08554A6E39A537F9A324B/30" 空间头像
                 *  ["figureurl_1"] => string(73) "http://qzapp.qlogo.cn/qzapp/101232670/7C8F797F30B08554A6E39A537F9A324B/50"
                 *  ["figureurl_2"] => string(74) "http://qzapp.qlogo.cn/qzapp/101232670/7C8F797F30B08554A6E39A537F9A324B/100"
                 *  ["figureurl_qq_1"] => string(69) "http://q.qlogo.cn/qqapp/101232670/7C8F797F30B08554A6E39A537F9A324B/40" QQ头像
                 *  ["figureurl_qq_2"] => string(70) "http://q.qlogo.cn/qqapp/101232670/7C8F797F30B08554A6E39A537F9A324B/100"
                 *  ["is_yellow_vip"] => string(1) "0"
                 *  ["vip"] => string(1) "0"
                 *  ["yellow_vip_level"] => string(1) "0"
                 *  ["level"] => string(1) "0"
                 *  ["is_yellow_year_vip"] => string(1) "0"
                 *}
                 */
                $num = M('qq')->where(array("q_img"=>$data["figureurl_qq_2"]))->getField("q_num");
                if($num){
                $txt = array(
                "q_name"=>$data['nickname'],
                "q_img"=>$data["figureurl_qq_2"],
                "q_ip"=>get_client_ip(),
                "q_time"=>time(),
                "q_num"=>1,
                );
                M('qq')->add($data);
                }else{
                M('qq')->where(array("q_img"=>$data["figureurl_qq_2"]))->setInc("q_num");
                }
            session("nickname",$data["nickname"]);
                  session("nickimg",$data["figureurl_qq_2"]);
                  $this->redirect('Index/index');
        } else {
            echo "<script>alert('系统出错;请稍后再试!');document.location.href='" . __APP__ . "';</script>";
        }
    }

在回调的时候我们可以写更多的操作和验证,这里我就简单的判断用户是不是在数据库中,在就访问次数+1,不在就存入数据库。大致上就是这些了,我觉得这次说的比较清楚了,还有不懂的可以留言问我,谢谢。



zhouxiansheng
#178

   zhouxiansheng     2016-07-01 18:54    Win 10      北京

求可执行源码,改好久了!!!

admin

   admin     07-01 19:47    回复 @zhouxiansheng 中说到:

复制粘贴是可用的

米粒博客
#134

   米粒博客     2016-02-24 21:06    Win 10      广东省东莞市

这个好 谢谢分享

admin

   admin     02-24 21:06    回复 @米粒博客 中说到:

谢谢支持,能帮到大家才是分享的宗旨

仇鹏
#125

   仇鹏     2016-01-07 22:49    Win 7      北京

谢谢博主!!!!!

admin

   admin     01-08 14:32    回复 @仇鹏 中说到:

谢谢支持~

昵称
邮箱
域名
  记住 通知博主
验证码

  程序相关

站点版本:青春博客-V 2.1.0

开源版本:青春博客-Beta v2.0

 下载  在线支付  在线工具  在线音乐

  随机文章