QQ登录api

  1 <?php
  2 namespace Api\Member;
  3 class QQConnect{
  4      /**
  5      * 获取QQconnect Login 跳转到的地址值
  6      * @return array 返回包含code state
  7      *
  8 **/
  9  public function login($app_id, $callback, $scope){
 10         $_SESSION[‘state‘] = md5(uniqid(rand(), TRUE)); //CSRF protection
 11         $login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
 12             .$app_id. "&redirect_uri=" . urlencode($callback)
 13             . "&state=" . $_SESSION[‘state‘]
 14             . "&scope=".urlencode($scope);
 15 //显示出登录地址
 16          header(‘Location:‘.$login_url);
 17     }
 18     /**
 19      * 获取access_token值
 20      * @return array 返回包含access_token,过期时间的数组
 21      * */
 22 private function get_token($app_id,$app_key,$code,$callback,$state){
 23         if($state !== $_SESSION[‘state‘]){
 24 return false;
 25 exit();
 26         }
 27            $url = "https://graph.qq.com/oauth2.0/token";
 28             $param = array(
 29                 "grant_type"    =>    "authorization_code",
 30                 "client_id"     =>    $app_id,
 31                 "client_secret" =>    $app_key,
 32                 "code"          =>    $code,
 33                 "state"         =>    $state,
 34                 "redirect_uri"  =>    $callback
 35             );
 36             $response = $this->get_url($url, $param);
 37             if($response == false) {
 38                 return false;
 39             }
 40             $params = array();
 41             parse_str($response, $params);
 42             return $params["access_token"];
 43 }
 44
 45     /**
 46      * 获取client_id 和 openid
 47      * @param $access_token access_token验证码
 48      * @return array 返回包含 openid的数组
 49      * */
 50     private  function get_openid($access_token) {
 51         $url = "https://graph.qq.com/oauth2.0/me";
 52         $param = array(
 53             "access_token"    => $access_token
 54         );
 55         $response  = $this->get_url($url, $param);
 56         if($response == false) {
 57             return false;
 58         }
 59         if (strpos($response, "callback") !== false) {
 60             $lpos = strpos($response, "(");
 61             $rpos = strrpos($response, ")");
 62             $response  = substr($response, $lpos + 1, $rpos - $lpos -1);
 63         }
 64         $user = json_decode($response);
 65         if (isset($user->error) || $user->openid == "") {
 66             return false;
 67         }
 68         return $user->openid;
 69     }
 70     /**
 71      * 获取用户信息
 72      * @param $client_id
 73      * @param $access_token
 74      * @param $openid
 75      * @return array 用户的信息数组
 76      * */
 77     public function get_user_info($app_id,$token,$openid){
 78 $url = ‘https://graph.qq.com/user/get_user_info?oauth_consumer_key=‘.$app_id.‘&access_token=‘.$token.‘&openid=‘.$openid.‘&format=json‘;
 79         $str = $this->get_url($url);
 80         if($str == false) {
 81         return false;
 82         }
 83         $arr = json_decode($str,true);
 84         return $arr;
 85 }
 86
 87      /**
 88      * 请求URL地址,返回callback得到返回字符串
 89      * @param $url qq提供的api接口地址
 90      * */
 91
 92     public function callback($app_id, $app_key, $callback) {
 93     $code = $_GET[‘code‘];
 94     $state = $_GET[‘state‘];
 95     $token = $this->get_token($app_id,$app_key,$code,$callback,$state);
 96     $openid = $this->get_openid($token);
 97     if(!$token || !$openid) {
 98     return false;
 99     exit();
100     }
101        return array(‘openid‘ => $openid, ‘token‘ => $token);
102     }
103
104
105     /*
106      * HTTP GET Request
107     */
108     private  function get_url($url, $param = null) {
109     if($param != null) {
110     $query = http_build_query($param);
111     $url = $url . ‘?‘ . $query;
112     }
113     $ch = curl_init();
114     if(stripos($url, "https://") !== false){
115     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
116     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
117     }
118
119     curl_setopt($ch, CURLOPT_URL, $url);
120     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
121     $content = curl_exec($ch);
122     $status = curl_getinfo($ch);
123     curl_close($ch);
124     if(intval($status["http_code"]) == 200) {
125     return $content;
126     }else{
127     echo $status["http_code"];
128     return false;
129     }
130     }
131
132     /*
133      * HTTP POST Request
134     */
135     private  function post_url($url, $params) {
136     $ch = curl_init();
137     if(stripos($url, "https://") !== false) {
138     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
139     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
140     }
141
142     curl_setopt($ch, CURLOPT_URL, $url);
143     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
144     curl_setopt($ch, CURLOPT_POST, true);
145     curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
146     $content = curl_exec($ch);
147     $status = curl_getinfo($ch);
148     curl_close($ch);
149     if(intval($status["http_code"]) == 200) {
150     return $content;
151     } else {
152     return false;
153     }
154     }
155 }
时间: 2024-08-05 00:41:14

QQ登录api的相关文章

Django_Restful Framework之QQ登录API实现(二)

上篇已经介绍了QQ第三方登录的流程分析和模型类的创建,并且也知道了再整个过程中我们需要提供哪些API为前端提供数据. 一.提供用户登录URL的API实现 在上篇我们已经分析了当用户点击QQ登录按钮时,后端需要为前端提供进行QQ登录的URL,可能许多人会疑惑为什么不直接由前端处理URL,直接是由该URL进行进行如QQ登入界面? 这是由于我们需要根据QQ开发者文档提供相应的地址,和查询字符串等. 而由于第三方登录在其他的项目中,可能也会使用到第三方登录(QQ登录),所以我们需要考虑解耦的性能,这里我

QQ登录集成到自己网站php代码(转载)

我们现在在各大网站论坛都可以看到点击一个QQ图标就可以利用自己的QQ号在网站进行登录了,下面我来告诉你一段QQ登录集成到自己网站php代码,有需要的朋友可参考. 1.打开open.qq.com 添加创建应用:->输入常规的数据,你会看到对应的APP ID和KEY值,这是对你身份证的唯一的验证. 2.打开 http://connect.qq.com/manage/ 点击->添加网站->输入相关信息,这里比较特别注意的是,回调地址那里填上你域名就可以了以上申核需要一到两天时间,耐心等待. 3

网站接入QQ登录

在网站接入QQ登录时遇到很多麻烦,主要是QQ互联和腾讯开放平台的关系比较乱,不知道要从哪个接入. 最终解决方式:在腾讯开放平台注册个人开发者,验证通过后,在QQ互联平台会有腾讯开放平台的注册信息,然后依次点击 个人中心->编辑->提交审核 审核完毕后应该就可以通过分配的ID信息接入了. (在最初QQ互联注册时,个人开发者总是需要提交营业执照,现在换了个qq号注册不需要了,可能是第一次QQ互联注册时JS没切过来的原因吧,应该是可以直接在QQ互联注册个人开发者的,不需要我这样绕路,(-?-;))

第三方登录之QQ登录(一)——QQ互联开放平台新建应用

现在这种第三方登录的应用很广泛也很方便.省得用户进行注册了.今天就来研究一下QQ登录API的使用. 首先说一下,腾讯提供了许多个的开放平台.差不多每个大的产品都提供了开放平台,比如微信.QQ邮箱,财付通等.这里面有2个比较易混的,一个是QQ互联,一个是腾讯开发平台.QQ互联主要是为了给第三方网站或移动应用提供登录信息.而腾讯开发平台,则是为托管型的应用(平台应用和移动应用)提供服务的.不过现在QQ互联正在往腾讯开发平台上迁移. 这是QQ互联官网中关于网站接入流程的wiki:http://wiki

日常API之QQ登录

这次的QQ登录我研究了好久惹,今天终于可以和大家分享啦! 大家都知道,QQ登录有很多方法,例如使用账号密码登录,手机版企鹅扫码登录等等(这些方法只能验证QQ是否成功登录,并没有聊天等功能) 首先就来使用账号密码登录吧(略简单) 一.准备工作 我们需要一只WebBrowser和登录API http://ui.ptlogin2.qq.com/cgi-bin/login?appid=1006102&s_url=http://id.qq.com/index.html&hide_close_icon

java如何在网站中接入qq登录功能

其实接入qq登录还是很简单的,但是你既然要做qq登录肯定你得网站要能够在外网访问的到, 因为qq在对你得网站授权之间会进行人工检查,检查你得图标摆放位置合不合理,网站是否违法等内容. 当你的网站能够在外网访问的时候 我们在qq开发者网站中申请网站的授权 用你的qq登录这个网站 http://connect.qq.com/ 在管理中心创建你的应用 创建应用的时候需要你填写一些网站的基本信息 如访问网址.登录成功后回调地址(也就是你处理登录请求的action) 腾讯会在request中封装qq验证后

【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ———————————————————————————————————————————— 先申请一下 创建一个应用 网站或者移动 注意回调地址(登录的时候会传东西过去) 以网站为例 验证后即可成功,具体看创建时候的提示 记住上面的id 这个是你的api管理页面(更多可以申请) 下面说一下重头戏: 第一步:引入jq<s

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能,期间遇到这种问题,在网上找了很多资料,大多都是官方的搬运,并没有真正的干料,可能是个人能力问题,遇到了各种麻烦,折腾了几天,最终弄好,在这里记录一下和大家分享,希望对大家有所帮助. 由于官方文档已经对如何使用API接口做出了很明确的说明,所以这里我只是记录我在开发过程中一些步骤中遇到的问题和注意的事项,详细步骤请参考官方文档:http://wiki.connect.qq.com/ 开发环境:SpringMVC.QQ登录Java SDK版.Maven.IDEA 应

微博登录、微信登录、qq登录java技术实现

为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生 1.微信 1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了:然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可 申请地址: https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN 2)查看微信提供的接口,写java代码 public void wx()