PHP点击跳转QQ,thinkphp3.2 获取QQconnect Login 跳转到的地址值
[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 跳转到的地址值相关推荐
- 跳转QQ群android代码,android 怎么跳转直接到qq群
/**************** * * 发起添加群流程.群号:联想日历(249838803) 的 key 为: Flhq8yhgJojPD*****_xxxx * 调用 joinQQGroup(F ...
- 公众号、网页点击链接,跳转qq添加好友、跳转外部链接代码教程
一.网页版本点击跳转到添加好友界面:(直接用下面的链接地址,将QQ号改成自己的即可) http://wpa.qq.com/msgrd?v=3&uin=26198573&site=qq& ...
- 网页中点击弹出qq聊天框/加群
测试:点击与我聊天 有时候会看到网页中能够点击直接打开qq聊天框,如何设置?方法如下 在QQ推广中心 切换到推广工具,登陆之后下面会生成代码,里面的href就是跳转对话框,uin=后面的就是点击按 ...
- html href点击无效,href跳转无效 js阻止a标签href跳转
IE 9+location.href="#id"此方式跳转失效,其他浏IE9+location.href="#id"此方式跳转失效,其他浏览器都正常.有大神知道 ...
- 手机QQ和微信打开网址 自动跳转到浏览器打开的代码
手机QQ和微信打开网址 自动跳转到浏览器打开的代码 <script src="https://open.mobile.qq.com/sdk/qqapi.js?_bid=152″> ...
- iapp跳转QQ名片代码
iapp跳转QQ名片代码! iapp代码如下: s qq=这里填写你的QQ号 ss("mqqapi://card/show_pslcard?src_type=internal&sou ...
- uniapp 跳转 QQ客服
QQ推广 跳转之后登录客服 QQ 或者直接复制这条链接加上客服的QQ就可以了 http://wpa.qq.com/msgrd?v=3&uin=${客服QQ号}&site=qq& ...
- 手机端qq客服代码点击弹出qq聊天窗http://www.51xuediannao.com/jiqiao/1026.html
手机端qq客服代码点击弹出qq聊天窗 来源:web前端开发 作者: 懒人建站 日期:2016-12-02 人气:5256 在手机端qq客服代码点击弹出qq聊天窗怎么实现那?其实和web端qq客服代码一 ...
- DrawerLayout和actionBar实现网易新闻标题,包含点击图标登录qq
DrawerLayout和antionBar实现网易新闻标题,包含点击图标登录qq 1.首先在res下建一个文件夹menu,写一个xml 这里就叫actionbar <?xml version ...
最新文章
- 递归和循环:跳台阶和变态跳台阶和矩形覆盖
- 全面分析再动手的习惯:链表的反转问题(递归和非递归方式)
- linux php7扩展查看,linux安装PHP7以及扩展
- 使用Flink时遇到的问题(不断更新中)
- cuda9.1 tensorflow1.6
- DevExpress的TreeList怎样设置数据源,从实例入手
- “约见”面试官系列之常见面试题之第九十六篇之active-class是谁的属性(建议收藏)
- double free or corruption 错误解决办法
- (转)51单片机C中关于.c文件和.h文件
- spark基础之spark streaming的checkpoint机制
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断
- linux中sh和bash的区别
- 软件设计师教程 第5版 下载
- 使用广告终结者屏蔽页面的任意部分
- 计算机无法上网修复工具,lsp怎么修复解决上不了网问题汇总
- domain adaptation 领域自适应
- 计算机无法打开压缩包,压缩包损坏或压缩格式未知且无法打开
- html怎么引用网页链接,浅谈网页中各种链接引用方法
- Android APP启动白屏的解决办法
- codeforce 3B. Lorry(贪心)