[php]代码库<?php

namespace Common\Api;

class QQConnect{

/**

* 获取QQconnect Login 跳转到的地址值

* @return array 返回包含code state

*

**/

public function login($app_id, $callback, $scope){

$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection

$login_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="

.$app_id. "&redirect_uri=" . urlencode($callback)

. "&state=" . $_SESSION['state']

. "&scope=".urlencode($scope);

//显示出登录地址

header('Location:'.$login_url);

}

/**

* 获取access_token值

* @return array 返回包含access_token,过期时间的数组

* */

private function get_token($app_id,$app_key,$code,$callback,$state){

if($state !== $_SESSION['state']){

return false;

exit();

}

$url = "https://graph.qq.com/oauth2.0/token";

$param = array(

"grant_type" => "authorization_code",

"client_id" => $app_id,

"client_secret" => $app_key,

"code" => $code,

"state" => $state,

"redirect_uri" => $callback

);

$response = $this->get_url($url, $param);

if($response == false) {

return false;

}

$params = array();

parse_str($response, $params);

return $params["access_token"];

}

/**

* 获取client_id 和 openid

* @param $access_token access_token验证码

* @return array 返回包含 openid的数组

* */

private function get_openid($access_token) {

$url = "https://graph.qq.com/oauth2.0/me";

$param = array(

"access_token" => $access_token

);

$response = $this->get_url($url, $param);

if($response == false) {

return false;

}

if (strpos($response, "callback") !== false) {

$lpos = strpos($response, "(");

$rpos = strrpos($response, ")");

$response = substr($response, $lpos + 1, $rpos - $lpos -1);

}

$user = json_decode($response);

if (isset($user->error) || $user->openid == "") {

return false;

}

return $user->openid;

}

/**

* 获取用户信息

* @param $client_id

* @param $access_token

* @param $openid

* @return array 用户的信息数组

* */

public function get_user_info($app_id,$token,$openid){

$url = 'https://graph.qq.com/user/get_user_info?oauth_consumer_key='.$app_id.'&access_token='.$token.'&openid='.$openid.'&format=json';

$str = $this->get_url($url);

if($str == false) {

return false;

}

$arr = json_decode($str,true);

return $arr;

}

/**

* 请求URL地址,返回callback得到返回字符串

* @param $url qq提供的api接口地址

* */

public function callback($app_id, $app_key, $callback) {

$code = $_GET['code'];

$state = $_GET['state'];

$token = $this->get_token($app_id,$app_key,$code,$callback,$state);

$openid = $this->get_openid($token);

if(!$token || !$openid) {

return false;

exit();

}

return array('openid' => $openid, 'token' => $token);

}

/*

* HTTP GET Request

*/

private function get_url($url, $param = null) {

if($param != null) {

$query = http_build_query($param);

$url = $url . '?' . $query;

}

$ch = curl_init();

if(stripos($url, "https://") !== false){

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

}

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );

$content = curl_exec($ch);

$status = curl_getinfo($ch);

curl_close($ch);

if(intval($status["http_code"]) == 200) {

return $content;

}else{

echo $status["http_code"];

return false;

}

}

/*

* HTTP POST Request

*/

private function post_url($url, $params) {

$ch = curl_init();

if(stripos($url, "https://") !== false) {

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

}

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

$content = curl_exec($ch);

$status = curl_getinfo($ch);

curl_close($ch);

if(intval($status["http_code"]) == 200) {

return $content;

} else {

return false;

}

}

}

PHP点击跳转QQ,thinkphp3.2 获取QQconnect Login 跳转到的地址值相关推荐

  1. 跳转QQ群android代码,android 怎么跳转直接到qq群

    /**************** * * 发起添加群流程.群号:联想日历(249838803) 的 key 为: Flhq8yhgJojPD*****_xxxx * 调用 joinQQGroup(F ...

  2. 公众号、网页点击链接,跳转qq添加好友、跳转外部链接代码教程

    一.网页版本点击跳转到添加好友界面:(直接用下面的链接地址,将QQ号改成自己的即可) http://wpa.qq.com/msgrd?v=3&uin=26198573&site=qq& ...

  3. 网页中点击弹出qq聊天框/加群

    测试:点击与我聊天 有时候会看到网页中能够点击直接打开qq聊天框,如何设置?方法如下 在QQ推广中心   切换到推广工具,登陆之后下面会生成代码,里面的href就是跳转对话框,uin=后面的就是点击按 ...

  4. html href点击无效,href跳转无效 js阻止a标签href跳转

    IE 9+location.href="#id"此方式跳转失效,其他浏IE9+location.href="#id"此方式跳转失效,其他浏览器都正常.有大神知道 ...

  5. 手机QQ和微信打开网址 自动跳转到浏览器打开的代码

    手机QQ和微信打开网址 自动跳转到浏览器打开的代码 <script src="https://open.mobile.qq.com/sdk/qqapi.js?_bid=152″> ...

  6. iapp跳转QQ名片代码

    iapp跳转QQ名片代码! iapp代码如下: s qq=这里填写你的QQ号 ss("mqqapi://card/show_pslcard?src_type=internal&sou ...

  7. uniapp 跳转 QQ客服

    QQ推广 跳转之后登录客服 QQ 或者直接复制这条链接加上客服的QQ就可以了 http://wpa.qq.com/msgrd?v=3&uin=${客服QQ号}&site=qq& ...

  8. 手机端qq客服代码点击弹出qq聊天窗http://www.51xuediannao.com/jiqiao/1026.html

    手机端qq客服代码点击弹出qq聊天窗 来源:web前端开发 作者: 懒人建站 日期:2016-12-02 人气:5256 在手机端qq客服代码点击弹出qq聊天窗怎么实现那?其实和web端qq客服代码一 ...

  9. DrawerLayout和actionBar实现网易新闻标题,包含点击图标登录qq

    DrawerLayout和antionBar实现网易新闻标题,包含点击图标登录qq 1.首先在res下建一个文件夹menu,写一个xml  这里就叫actionbar <?xml version ...

最新文章

  1. 递归和循环:跳台阶和变态跳台阶和矩形覆盖
  2. 全面分析再动手的习惯:链表的反转问题(递归和非递归方式)
  3. linux php7扩展查看,linux安装PHP7以及扩展
  4. 使用Flink时遇到的问题(不断更新中)
  5. cuda9.1 tensorflow1.6
  6. DevExpress的TreeList怎样设置数据源,从实例入手
  7. “约见”面试官系列之常见面试题之第九十六篇之active-class是谁的属性(建议收藏)
  8. double free or corruption 错误解决办法
  9. (转)51单片机C中关于.c文件和.h文件
  10. spark基础之spark streaming的checkpoint机制
  11. 【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断
  12. linux中sh和bash的区别
  13. 软件设计师教程 第5版 下载
  14. 使用广告终结者屏蔽页面的任意部分
  15. 计算机无法上网修复工具,lsp怎么修复解决上不了网问题汇总
  16. domain adaptation 领域自适应
  17. 计算机无法打开压缩包,压缩包损坏或压缩格式未知且无法打开
  18. html怎么引用网页链接,浅谈网页中各种链接引用方法
  19. Android APP启动白屏的解决办法
  20. codeforce 3B. Lorry(贪心)

热门文章

  1. 文件复制函数的效率比较
  2. scikit-learn学习笔记(四)Ridge Regression ( 岭回归 )
  3. jquery ajax的例子
  4. 详解分布式协调服务 ZooKeeper
  5. 漫谈 Windows Server 管理工具
  6. 阿里云云效功能升级,支持快速创建多个应用的独立测试环境
  7. 微服务的正确理解方式
  8. mac安全与隐私只有两个选项,少了一个任何来源
  9. IOS学习之数据库(6)--SQLite常用的函数
  10. 基础概念总结(spring security、Quartz、JUnit测试)