.tqq.php
<?php
/**
* PHP Library for t.qq.com
*
* @author
*/
class tqqPHP
{
function __construct($client_id, $client_secret, $access_token=NULL, $openid=NULL){
$this->client_id=$client_id;
$this->client_secret=$client_secret;
$this->access_token=$access_token;
$this->openid=$openid;
} function login_url($callback_url){
$params=array(
'response_type'=>'code',
'client_id'=>$this->client_id,
'redirect_uri'=>$callback_url
);
return 'https://open.t.qq.com/cgi-bin/oauth2/authorize?'.http_build_query($params);
} function access_token($callback_url, $code){
$params=array(
'grant_type'=>'authorization_code',
'code'=>$code,
'client_id'=>$this->client_id,
'client_secret'=>$this->client_secret,
'redirect_uri'=>$callback_url
);
$url='https://open.t.qq.com/cgi-bin/oauth2/access_token?'.http_build_query($params);
$result_str=$this->http($url);
$json_r=array();
if($result_str!='')parse_str($result_str, $json_r);
return $json_r;
} function access_token_refresh($refresh_token){
$params=array(
'grant_type'=>'refresh_token',
'refresh_token'=>$refresh_token,
'client_id'=>$this->client_id
);
$url='https://open.t.qq.com/cgi-bin/oauth2/access_token?'.http_build_query($params);
$result_str=$this->http($url);
$json_r=array();
if($result_str!='')parse_str($result_str, $json_r);
return $json_r;
} function me(){
$params=array();
$url='https://open.t.qq.com/api/user/info';
return $this->api($url, $params);
} function getMyTweet($reqnum=10, $pageflag=0){
$params=array(
'pageflag'=>$pageflag,
'reqnum'=>$reqnum
);
$url='https://open.t.qq.com/api/statuses/broadcast_timeline';
return $this->api($url, $params);
} function getRecount($ids){
$params=array(
'ids'=>$ids,
'flag'=>2
);
$url='https://open.t.qq.com/api/t/re_count';
return $this->api($url, $params);
} function getReplay($id, $flag=0, $f=0, $n=10){
$params=array(
'rootid'=>$id,
'pageflag'=>$f,
'reqnum'=>$n,
'flag'=>$flag
);
$url='https://open.t.qq.com/api/t/re_list';
return $this->api($url, $params);
} function postOne($img_c, $pic=''){
$params=array(
'content'=>$img_c
);
if($pic!='' && is_array($pic)){
$url='https://open.t.qq.com/api/t/add_pic';
$params['pic']=$pic;
}else{
$url='https://open.t.qq.com/api/t/add';
}
return $this->api($url, $params, 'POST');
} function api($url, $params, $method='GET'){
$params['oauth_consumer_key']=$this->client_id;
$params['access_token']=$this->access_token;
$params['openid']=$this->openid;
$params['clientip']=$this->getIP();
$params['oauth_version']='2.a';
$params['format']='json';
$params['scope']='all';
if($method=='GET'){
$result_str=$this->http($url.'?'.http_build_query($params));
}else{
if(isset($params['pic'])){
uksort($params, 'strcmp');
$str_b=uniqid('------------------');
$str_m='--'.$str_b;
$str_e=$str_m. '--';
$body='';
foreach($params as $k=>$v){
if($k=='pic'){
if(is_array($v)){
$img_c=$v[2];
$img_n=$v[1];
}elseif($v{0}=='@'){
$url=ltrim($v, '@');
$img_c=file_get_contents($url);
$url_a=explode('?', basename($url));
$img_n=$url_a[0];
}
$body.=$str_m."\r\n";
$body.='Content-Disposition: form-data; name="'.$k.'"; filename="'.$img_n.'"'."\r\n";
$body.="Content-Type: image/unknown\r\n\r\n";
$body.=$img_c."\r\n";
}else{
$body.=$str_m."\r\n";
$body.='Content-Disposition: form-data; name="'.$k."\"\r\n\r\n";
$body.=$v."\r\n";
}
}
$body.=$str_e;
$headers[]="Content-Type: multipart/form-data; boundary=".$str_b;
$result_str=$this->http($url, $body, 'POST', $headers);
}else{
$result_str=$this->http($url, http_build_query($params), 'POST');
}
}
$json_r=array();
if($result_str!='')$json_r=json_decode($result_str, true);
return $json_r;
} function getIP(){
if(isset($_ENV['HTTP_CLIENT_IP'])){
$ip=$_ENV['HTTP_CLIENT_IP'];
}elseif(isset($_ENV['HTTP_X_FORWARDED_FOR'])){
$ip=$_ENV['HTTP_X_FORWARDED_FOR'];
}elseif(isset($_ENV['REMOTE_ADDR'])){
$ip=$_ENV['REMOTE_ADDR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
if(strstr($ip, ':')){
$ipa=explode(':', $ip);
foreach($ipa as $v){
if(strlen($v)>7)$ip=$v;
}
}
if(strlen($ip)<7)$ip='0.0.0.0';
return $ip;
} function http($url, $postfields='', $method='GET', $headers=array()){
$ci=curl_init();
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
if($method=='POST'){
curl_setopt($ci, CURLOPT_POST, TRUE);
if($postfields!='')curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
}
$headers[]="User-Agent: tqqPHP(piscdong.com)";
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLOPT_URL, $url);
$response=curl_exec($ci);
curl_close($ci);
return $response;
}
} 
.config.php
<?php
//配置文件
header('Content-Type: text/html; charset=UTF-8'); $tqq_k=''; //腾讯微博应用App Key
$tqq_s=''; //腾讯微博应用App Secret
$callback_url='http://yoururl/callback.php'; //授权回调网址
?> 
.index.php
<?php
session_start();
require_once('config.php');
require_once('tqq.php'); function getimgp($u){
//图片处理
$c=@file_get_contents($u);
$name=md5($u).'.jpg';
$mime='image/unknown';
return array($mime, $name, $c);
} $tqq_t=isset($_SESSION['tqq_t'])?$_SESSION['tqq_t']:'';
$tqq_id=isset($_SESSION['tqq_id'])?$_SESSION['tqq_id']:''; //检查是否已登录
if($tqq_t!='' && $tqq_id!=''){
$tqq=new tqqPHP($tqq_k, $tqq_s, $tqq_t, $tqq_id); //获取登录用户信息
$result=$tqq->me();
var_dump($result); /**
//access token到期后使用refresh token刷新access token
$result=$tqq->access_token_refresh($_SESSION['tqq_r']);
var_dump($result);
**/ /**
//发布微博
$img='http://www.baidu.com/img/baidu_sylogo1.gif';
$img_a=getimgp($img);
if($img_a[2]!=''){
$p_img=$img_a;
}else{
$p_img='';
}
$result=$tqq->postOne('微博内容', $p_img);
var_dump($result);
**/ /**
//微博列表
$result=$tqq->getMyTweet();
var_dump($result);
**/ }else{
//生成登录链接
$tqq=new tqqPHP($tqq_k, $tqq_s);
$login_url=$tqq->login_url($callback_url);
echo '<a href="',$login_url,'">点击进入授权页面</a>';
}
?> 
 .callback.php
<?php
//授权回调页面,即配置文件中的$callback_url
session_start();
require_once('config.php');
require_once('tqq.php'); if(isset($_GET['code']) && $_GET['code']!=''){
$tqq=new tqqPHP($tqq_k, $tqq_s);
$result=$tqq->access_token($callback_url, $_GET['code']);
}
if(isset($result['access_token']) && $result['access_token']!='' && isset($_GET['openid']) && $_GET['openid']!=''){
echo '授权完成,请记录<br/>access token:<input size="50" value="',$result['access_token'],'"><br/>openid:<input size="50" value="',$_GET['openid'],'"><br/>refresh token:<input size="50" value="',$result['refresh_token'],'">'; //保存登录信息,此示例中使用session保存
$_SESSION['tqq_t']=$result['access_token']; //access token
$_SESSION['tqq_id']=$_GET['openid']; //openid
$_SESSION['tqq_r']=$result['refresh_token']; //refresh token
}else{
echo '授权失败';
}
echo '<br/><a href="./">返回</a>';
?>

最新文章

  1. windows下 nvm下载node被墙了解决办法
  2. Android4.0 添加一个新的Android 键值
  3. rabbitMQ+php
  4. 在Xcode 6 beta里编译Cocos2d-x iOS项目时失败
  5. IOS 使用SDWebImage实现仿新浪微博照片浏览器
  6. 串行通讯之UARTLoopback
  7. javascript技巧合集
  8. session进程和服务
  9. 什么是TimeTunnel
  10. maven打包配置
  11. don\'t have permission access on this server听语音
  12. VMware vsphere client报错问题
  13. ycmd for emacs 代码自动补全
  14. Code First 更新数据库 记录
  15. EF实体对象解耦 - 泛型联表查询
  16. 单片机小白学步系列(二十) IO口原理
  17. 基于Django Form源码开发自定义Form组件
  18. pandas学习3(数据处理)
  19. DIV三列同行
  20. mybatis的双数据源创建

热门文章

  1. Extjs使用Ext.function.bind, 给句柄函数传参
  2. Griddle, griddle-react 一个REACT 表格组件
  3. Java多线程Socket在控制台输出的多人聊天室编程
  4. (转)大数据时代下的SQL Server第三方负载均衡方案----Moebius测试
  5. 7.SpringMVC注解优化
  6. AOP理解
  7. 让复杂Json数据和对象自由转换 --- Gson
  8. NEFU 505 超级红与黑 (高斯消元)
  9. Linux内核补丁升级
  10. [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能