QQ互联申请及配置
今天要说的只是针对QQ互联的操作,其他的互联请参考相关网站。
第一步:需要申请API接口的两码
自行登录QQ互联https://connect.qq.com/index.html,然后按照要求申请就OK啦。
过几天你会收到一封审核通过的邮件:
第二步:互联开始
首先假设我的网站有一个登陆按钮,那么这个按钮指向哪里呢?
所以第一个就是我们需要找的登陆,这里的话我是放在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: 2017年12月20日 * @author: yumaster * @return: */ $SITE_URL = "http://yumaster.net/"; define('URL_CALLBACK', "" . $SITE_URL . "Home/Common/callback?type="); return array( #腾讯QQ登录配置'THINK_SDK_QQ' => array('APP_KEY' => '101445751', # APP ID'APP_SECRET' => '85df045b8b38bbad049a9874337ee5b6', # KEY'CALLBACK' => URL_CALLBACK . 'qq',),), );
所以这个配置是需要自己在网站添加的,我的做法是单独的sdk.php,然后再config.php中 'LOAD_EXT_CONFIG' 加载进来的
需要注意的是:
1.你的网站要填写正确的回调地址,保证要和QQ互联上填写的一样,修改其中一个之后,另一个也要及时修改。否则很难找到这个原因
2.填写在QQ互联的地址是不需要填写参数的,所以这里后面的 ?type=qq 在QQ互联的后台是没有的
3.在传递参数的时候是不允许 yumaster.net/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) "A100C2E7A02D9AE2E2AD72442275C34C" 用户唯一识别标志*}*/$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) "1996" 出生年* ["figureurl"] => string(73) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/30" 空间头像* ["figureurl_1"] => string(73) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/50"* ["figureurl_2"] => string(74) "http://qzapp.qlogo.cn/qzapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/100"* ["figureurl_qq_1"] => string(69) "http://q.qlogo.cn/qqapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/40" QQ头像* ["figureurl_qq_2"] => string(70) "http://q.qlogo.cn/qqapp/101445751/A100C2E7A02D9AE2E2AD72442275C34C/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,不在就存入数据库。大致上就是这些了。