<?php
// +----------------------------------------------------------------------
// | Site: [ http://www.yzmcms.com]
// +----------------------------------------------------------------------
// | Copyright: 袁志蒙工作室,并保留所有权利
// +----------------------------------------------------------------------
// | Author: YuanZhiMeng <[email protected]>
// +----------------------------------------------------------------------
// | Explain: 这不是一个自由软件,您只能在不用于商业目的的前提下对程序代码进行修改和使用,不允许对程序代码以任何形式任何目的的再发布!
// +----------------------------------------------------------------------
/**
* If the class OAuthException has not been declared, extend the Exception class.
* This is to allow OAuth without the PECL OAuth library
*
* @ignore
*/
if ( ! class_exists( 'OAuthException')) {
class OAuthException extends Exception {
// pass
}
}
/**
* 新浪微博 OAuth 认证类(OAuth2)
*
* 授权机制说明请大家参考微博开放平台文档:{@link http://open.weibo.com/wiki/Oauth2}
*
* @package sae
* @author Elmer Zhang
* @version 1.0
*/
class SaeTOAuthV2 {
/**
* @ignore
*/
public $client_id;
/**
* @ignore
*/
public $client_secret;
/**
* @ignore
*/
public $access_token;
/**
* @ignore
*/
public $refresh_token;
/**
* Contains the last HTTP status code returned.
*
* @ignore
*/
public $http_code;
/**
* Contains the last API call.
*
* @ignore
*/
public $url;
/**
* Set up the API root URL.
*
* @ignore
*/
public $host = "https://api.weibo.com/2/";
/**
* Set timeout default.
*
* @ignore
*/
public $timeout = 30;
/**
* Set connect timeout.
*
* @ignore
*/
public $connecttimeout = 30;
/**
* Verify SSL Cert.
*
* @ignore
*/
public $ssl_verifypeer = FALSE;
/**
* Respons format.
*
* @ignore
*/
public $format = 'json';
/**
* Decode returned json data.
*
* @ignore
*/
public $decode_json = TRUE;
/**
* Contains the last HTTP headers returned.
*
* @ignore
*/
public $http_info;
/**
* Set the useragnet.
*
* @ignore
*/
public $useragent = 'Sae T OAuth2 v0.1';
/**
* print the debug info
*
* @ignore
*/
public $debug = FALSE;
/**
* boundary of multipart
* @ignore
*/
public static $boundary = '';
public $postdata,$remote_ip,$http_header;
/**
* Set API URLS
*/
/**
* @ignore
*/
function accessTokenURL() { return 'https://api.weibo.com/oauth2/access_token'; }
/**
* @ignore
*/
function authorizeURL() { return 'https://api.weibo.com/oauth2/authorize'; }
/**
* construct WeiboOAuth object
*/
function __construct($client_id, $client_secret, $access_token = NULL, $refresh_token = NULL) {
$this->client_id = $client_id;
$this->client_secret = $client_secret;
$this->access_token = $access_token;
$this->refresh_token = $refresh_token;
}
/**
* authorize接口
*
* 对应API:{@link http://open.weibo.com/wiki/Oauth2/authorize Oauth2/authorize}
*
* @param string $url 授权后的回调地址,站外应用需与回调地址一致,站内应用需要填写canvas page的地址
* @param string $response_type 支持的值包括 code 和token 默认值为code
* @param string $state 用于保持请求和回调的状态。在回调时,会在Query Parameter中回传该参数
* @param string $display 授权页面类型 可选范围:
* - default 默认授权页面
* - mobile 支持html5的手机
* - popup 弹窗授权页
* - wap1.2 wap1.2页面
* - wap2.0 wap2.0页面
* - js js-sdk 专用 授权页面是弹窗,返回结果为js-sdk回掉函数
* - apponweibo 站内应用专用,站内应用不传display参数,并且response_type为token时,默认使用改display.授权后不会返回access_token,只是输出js刷新站内应用父框架
* @return array
*/
function getAuthorizeURL( $url, $response_type = 'code', $state = NULL, $display = NULL ) {
$params = array();
$params['client_id'] = $this->client_id;
$params['redirect_uri'] = $url;
$params['response_type'] = $response_type;
$params['state'] = $state;
$params['display'] = $display;
return $this->authorizeURL() . "?" . http_build_query($params);
}
/**
* access_token接口
*
* 对应API:{@link http://open.weibo.com/wiki/OAuth2/access_token OAuth2/access_token}
*
* @param string $type 请求的类型,可以为:code, password, token
* @param array $keys 其他参数:
* - 当$type为code时: array('code'=>..., 'redirect_uri'=>...)
* - 当$type为password时: array('username'=>..., 'password'=>...)
* - 当$type为token时: array('refresh_token'=>...)
* @return array
*/
function getAccessToken( $type = 'code', $keys = array() ) {
$params = array();
$params['client_id'] = $this->client_id;
$params['client_secret'] = $this->client_secret;
if ( $type === 'token' ) {
$params['grant_type'] = 'refresh_token';
$params['refresh_token'] = $keys['refresh_token'];
} elseif ( $type === 'code' ) {
$params['grant_type'] = 'authorization_code';
$params['code'] = $keys['code'];
$params['redirect_uri'] = $keys['redirect_uri'];
} elseif ( $type === 'password' ) {
$params['grant_type'] = 'password';
$params['username'] = $keys['username'];
$params['password'] = $keys['password'];
} else {
throw new OAuthException("wrong auth type");
}
$response = $this->oAuthRequest($this->accessTokenURL(), 'POST', $params);
$token = json_decode($response, true);
if ( is_array($token) && !isset($token['error']) ) {
$this->access_token = $token['access_token'];
//$this->refresh_token = $token['refresh_token'];
} else {
throw new OAuthException("get access token failed." . $token['error']);
}
return $token;
}
/**
* 解析 signed_request
*
* @param string $signed_request 应用框架在加载iframe时会通过向Canvas URL post的参数signed_request
*
* @return array
*/
function parseSignedRequest($signed_request) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$sig = self::base64decode($encoded_sig) ;
$data = json_decode(self::base64decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') return '-1';
$expected_sig = hash_hmac('sha256', $payload, $this->client_secret, true);
return ($sig !== $expected_sig)? '-2':$data;
}
/**
* @ignore
*/
function base64decode($str) {
return base64_decode(strtr($str.str_repeat('=', (4 - strlen($str) % 4)), '-_', '+/'));
}
/**
* 读取jssdk授权信息,用于和jssdk的同步登录
*
* @return array 成功返回array('access_token'=>'value', 'refresh_token'=>'value'); 失败返回false
*/
function getTokenFromJSSDK() {
$key = "weibojs_" . $this->client_id;
if ( isset($_COOKIE[$key]) && $cookie = $_COOKIE[$key] ) {
parse_str($cookie, $token);
if ( isset($token['access_token']) && isset($token['refresh_token']) ) {
$this->access_token = $token['access_token'];
$this->refresh_token = $token['refresh_token'];
return $token;
} else {
return false;
}
} else {
return false;
}
}
/**
* 从数组中读取access_token和refresh_token
* 常用于从Session或Cookie中读取token,或通过Session/Cookie中是否存有token判断登录状态。
*
* @param array $arr 存有access_token和secret_token的数组
* @return array 成功返回array('access_token'=>'value', 'refresh_token'=>'value'); 失败返回false
*/
function getTokenFromArray( $arr ) {
if (isset($arr['access_token']) && $arr['access_token']) {
$token = array();
$this->access_token = $token['access_token'] = $arr['access_token'];
if (isset($arr['refresh_token']) && $arr['refresh_token']) {
$this->refresh_token = $token['refresh_token'] = $arr['refresh_token'];
}
return $token;
} else {
return false;
}
}
/**
* GET wrappwer for oAuthReq
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目是基于YZMPHP的YzmCMS轻量级开源内容管理系统设计源码,包含874个文件,其中主要包含247个html页面文件,175个png图片文件,168个php源代码文件等。系统采用了YZMPHP技术栈,实现了内容管理的功能,包括文章发布、分类管理、评论系统等。项目结构清晰,代码可读性强,易于理解和维护。
资源推荐
资源详情
资源评论
收起资源包目录
基于YZMPHP的YzmCMS轻量级开源内容管理系统设计源码 (993个子文件)
H-ui.css 157KB
H-ui.min.css 111KB
ueditor.css 45KB
ueditor.min.css 34KB
image.css 19KB
yzm-style.css 16KB
video.css 15KB
attachment.css 15KB
layer.css 14KB
swiper.min.css 14KB
yzm.admin.style.css 13KB
video-js.min.css 11KB
yzm-mobile-category.css 11KB
yzm-member-index.css 10KB
install.css 10KB
iconfont.css 8KB
shCoreDefault.css 7KB
H-ui.admin.css 7KB
laydate.css 6KB
jquery-editable.css 6KB
yzm-common.css 5KB
layer.css 5KB
yzm-member-login.css 5KB
cropper.css 5KB
yzm.admin.login.css 4KB
yzm-mobile-index.css 4KB
scrawl.css 4KB
yzm-member-myhome.css 3KB
laydate.css 3KB
yzm-form.css 3KB
yzm-member-reset.css 3KB
codemirror.css 3KB
H-ui.reset.css 3KB
webuploader.css 3KB
H-ui.ie.css 2KB
background.css 2KB
yzm.admin.home.css 2KB
emotion.css 2KB
dialogbase.css 2KB
skin.css 2KB
skin.css 2KB
skin.css 2KB
skin.css 2KB
skin.css 2KB
music.css 2KB
skin.css 2KB
edittable.css 1KB
webuploader.css 515B
iframe.css 42B
vjs.eot 3KB
wface.gif 49KB
jxface2.gif 40KB
yface.gif 28KB
bface.gif 27KB
icons.gif 20KB
file-icons.gif 20KB
file-icons.gif 20KB
tface.gif 19KB
fface.gif 18KB
34.gif 13KB
38.gif 10KB
cface.gif 8KB
loading.gif 8KB
17.gif 8KB
18.gif 8KB
11.gif 8KB
31.gif 7KB
default.gif 7KB
46.gif 6KB
loading-0.gif 6KB
76.gif 6KB
43.gif 5KB
8.gif 5KB
28.gif 5KB
42.gif 5KB
5.gif 5KB
32.gif 4KB
40.gif 4KB
14.gif 4KB
25.gif 4KB
loading-b.gif 4KB
7.gif 4KB
10.gif 4KB
44.gif 4KB
icons-all.gif 4KB
48.gif 4KB
68.gif 3KB
9.gif 3KB
27.gif 3KB
39.gif 3KB
6.gif 3KB
16.gif 3KB
47.gif 3KB
21.gif 3KB
60.gif 3KB
26.gif 3KB
74.gif 2KB
24.gif 2KB
57.gif 2KB
51.gif 2KB
共 993 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论
沐知全栈开发
- 粉丝: 4774
- 资源: 3423
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功