<?php
/**
* tmhOAuth
*
* An OAuth 1.0A library written in PHP.
* The library supports file uploading using multipart/form as well as general
* REST requests. OAuth authentication is sent using the an Authorization Header.
*
* @author themattharris
* @version 0.7.4
*
* 19 February 2013
*/
class tmhOAuth {
const VERSION = '0.7.4';
var $response = array();
/**
* Creates a new tmhOAuth object
*
* @param string $config, the configuration to use for this request
* @return void
*/
public function __construct($config=array()) {
$this->params = array();
$this->headers = array();
$this->auto_fixed_time = false;
$this->buffer = null;
// default configuration options
$this->config = array_merge(
array(
// leave 'user_agent' blank for default, otherwise set this to
// something that clearly identifies your app
'user_agent' => '',
// default timezone for requests
'timezone' => 'UTC',
'use_ssl' => true,
'host' => 'api.twitter.com',
'consumer_key' => '',
'consumer_secret' => '',
'user_token' => '',
'user_secret' => '',
'force_nonce' => false,
'nonce' => false, // used for checking signatures. leave as false for auto
'force_timestamp' => false,
'timestamp' => false, // used for checking signatures. leave as false for auto
// oauth signing variables that are not dynamic
'oauth_version' => '1.0',
'oauth_signature_method' => 'HMAC-SHA1',
// you probably don't want to change any of these curl values
'curl_connecttimeout' => 30,
'curl_timeout' => 10,
// for security this should always be set to 2.
'curl_ssl_verifyhost' => 2,
// for security this should always be set to true.
'curl_ssl_verifypeer' => true,
// you can get the latest cacert.pem from here http://curl.haxx.se/ca/cacert.pem
'curl_cainfo' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem',
'curl_capath' => dirname(__FILE__),
'curl_followlocation' => false, // whether to follow redirects or not
// support for proxy servers
'curl_proxy' => false, // really you don't want to use this if you are using streaming
'curl_proxyuserpwd' => false, // format username:password for proxy, if required
'curl_encoding' => '', // leave blank for all supported formats, else use gzip, deflate, identity
// streaming API
'is_streaming' => false,
'streaming_eol' => "\r\n",
'streaming_metrics_interval' => 60,
// header or querystring. You should always use header!
// this is just to help me debug other developers implementations
'as_header' => true,
'debug' => false,
),
$config
);
$this->set_user_agent();
date_default_timezone_set($this->config['timezone']);
}
/**
* Sets the useragent for PHP to use
* If '$this->config['user_agent']' already has a value it is used instead of one
* being generated.
*
* @return void value is stored to the config array class variable
*/
private function set_user_agent() {
if (!empty($this->config['user_agent']))
return;
if ($this->config['curl_ssl_verifyhost'] && $this->config['curl_ssl_verifypeer']) {
$ssl = '+SSL';
} else {
$ssl = '-SSL';
}
$ua = 'tmhOAuth ' . self::VERSION . $ssl . ' - //github.com/themattharris/tmhOAuth';
$this->config['user_agent'] = $ua;
}
/**
* Generates a random OAuth nonce.
* If 'force_nonce' is true a nonce is not generated and the value in the configuration will be retained.
*
* @param string $length how many characters the nonce should be before MD5 hashing. default 12
* @param string $include_time whether to include time at the beginning of the nonce. default true
* @return void value is stored to the config array class variable
*/
private function create_nonce($length=12, $include_time=true) {
if ($this->config['force_nonce'] == false) {
$sequence = array_merge(range(0,9), range('A','Z'), range('a','z'));
$length = $length > count($sequence) ? count($sequence) : $length;
shuffle($sequence);
$prefix = $include_time ? microtime() : '';
$this->config['nonce'] = md5(substr($prefix . implode('', $sequence), 0, $length));
}
}
/**
* Generates a timestamp.
* If 'force_timestamp' is true a nonce is not generated and the value in the configuration will be retained.
*
* @return void value is stored to the config array class variable
*/
private function create_timestamp() {
$this->config['timestamp'] = ($this->config['force_timestamp'] == false ? time() : $this->config['timestamp']);
}
/**
* Encodes the string or array passed in a way compatible with OAuth.
* If an array is passed each array value will will be encoded.
*
* @param mixed $data the scalar or array to encode
* @return $data encoded in a way compatible with OAuth
*/
private function safe_encode($data) {
if (is_array($data)) {
return array_map(array($this, 'safe_encode'), $data);
} else if (is_scalar($data)) {
return str_ireplace(
array('+', '%7E'),
array(' ', '~'),
rawurlencode($data)
);
} else {
return '';
}
}
/**
* Decodes the string or array from it's URL encoded form
* If an array is passed each array value will will be decoded.
*
* @param mixed $data the scalar or array to decode
* @return string $data decoded from the URL encoded form
*/
private function safe_decode($data) {
if (is_array($data)) {
return array_map(array($this, 'safe_decode'), $data);
} else if (is_scalar($data)) {
return rawurldecode($data);
} else {
return '';
}
}
/**
* Returns an array of the standard OAuth parameters.
*
* @return array all required OAuth parameters, safely encoded
*/
private function get_defaults() {
$defaults = array(
'oauth_version' => $this->config['oauth_version'],
'oauth_nonce' => $this->config['nonce'],
'oauth_timestamp' => $this->config['timestamp'],
'oauth_consumer_key' => $this->config['consumer_key'],
'oauth_signature_method' => $this->config['oauth_signature_method'],
);
// include the user token if it exists
if ( $this->config['user_token'] )
$defaults['oauth_token'] = $this->config['user_token'];
// safely encode
foreach ($defaults as $k => $v) {
$_defaults[$this->safe_encode($k)] = $this->safe_encode($v);
}
return $_defaults;
}
/**
* Extracts and decodes OAuth parameters from the passed string
*
* @param string $body the response body from an OAuth flow method
* @return array the response body safely decoded to an array of key => values
*/
public function extract_params($body) {
$kvs = explode('&', $body);
$decoded = array();
foreach ($kvs as $kv) {
$kv = explode('=', $kv, 2);
$kv[0] = $this->safe_decode($kv[0]);
$kv[1] = $this->safe_decode($kv[1]);
$decoded[$kv[0]] = $kv[1];
}
return $decoded;
}
/**
* Prepares the HTTP method for use in the base string by converting it to
* uppercase.
*
* @param string $method an HTTP method such as GET or POST
* @return void value is stored to the class variable 'method'
*/
private function prepare_method($method) {
$this->method = strtoupper($method
没有合适的资源?快使用搜索试试~ 我知道了~
Flatastic响应式鲜花礼品商务整站模板_html5 bootstrap 响应式模板UI前端源码.rar
共407个文件
jpg:178个
png:136个
html:36个
0 下载量 185 浏览量
2023-08-01
14:03:51
上传
评论
收藏 2.42MB RAR 举报
温馨提示
Flatastic响应式鲜花礼品商务整站模板_html5 bootstrap 响应式模板UI前端源码.rar
资源推荐
资源详情
资源评论
收起资源包目录
Flatastic响应式鲜花礼品商务整站模板_html5 bootstrap 响应式模板UI前端源码.rar (407个子文件)
style.css 88KB
settings.css 36KB
camera.css 28KB
font-awesome.min.css 17KB
jackbox.min.css 16KB
bootstrap.min.css 12KB
jquery.fancybox-1.3.4.css 9KB
owl.transitions.css 4KB
flexslider.css 4KB
jquery.custom-scrollbar.css 4KB
colorpicker.css 3KB
owl.carousel.css 1KB
styleswitcher.css 1KB
fontawesome-webfont.eot 37KB
preloader@2x.gif 19KB
ie_preloader.gif 11KB
preloader.gif 10KB
loader_2.gif 4KB
loader.gif 2KB
colorpicker_indic.gif 86B
custom_indic.gif 86B
colorpicker_select.gif 78B
blank.gif 49B
blank.gif 43B
features_shortcodes.html 136KB
index_layout_wide.html 89KB
index_layout_2.html 83KB
category_grid.html 82KB
product_page_sidebar.html 79KB
category_list.html 78KB
checkout.html 76KB
full_width_product_page.html 71KB
index.html 70KB
index_corporate.html 65KB
blog.html 55KB
order_details.html 55KB
blog_post.html 51KB
wishlist.html 50KB
portfolio_four_columns.html 46KB
contact.html 45KB
portfolio_three_columns.html 43KB
compare_products.html 43KB
portfolio_masonry.html 41KB
portfolio_two_columns.html 40KB
portfolio_single_2.html 40KB
portfolio_single_1.html 39KB
manufacturers.html 39KB
orders_list.html 37KB
manufacturer_details.html 37KB
category_no_products.html 36KB
features_typography.html 36KB
header_4.html 17KB
header_2.html 17KB
header_1.html 16KB
header_3.html 16KB
footer_5.html 9KB
footer_4.html 8KB
footer_2.html 6KB
footer_3.html 6KB
footer_1.html 6KB
fav.ico 1KB
image_bg_2.jpg 240KB
image_bg_1.jpg 172KB
preview_zoom_5.jpg 37KB
preview_zoom_4.jpg 37KB
preview_zoom_6.jpg 37KB
category_img_1.jpg 28KB
preview_zoom_1.jpg 25KB
preview_zoom_3.jpg 25KB
preview_zoom_2.jpg 25KB
banner_img_6.jpg 24KB
big.jpg 22KB
slide_08.jpg 22KB
portfolio_img_42.jpg 22KB
portfolio_img_41.jpg 22KB
slide_07.jpg 22KB
portfolio_img_40.jpg 22KB
slide_09.jpg 22KB
fw_slide_03.jpg 22KB
fw_slide_01.jpg 22KB
fw_slide_02.jpg 22KB
blog_img_4.jpg 21KB
banner_img_7.jpg 20KB
banner_img_8.jpg 20KB
slide_01.jpg 18KB
slide_03.jpg 18KB
slide_02.jpg 18KB
quick_view_img_8.jpg 17KB
quick_view_img_17.jpg 17KB
quick_view_img_18.jpg 17KB
quick_view_img_16.jpg 17KB
quick_view_img_7.jpg 17KB
quick_view_img_9.jpg 17KB
slide_06.jpg 15KB
slide_04.jpg 15KB
slide_05.jpg 15KB
s.jpg 15KB
portfolio_img_38.jpg 13KB
quick_view_img_3.jpg 13KB
quick_view_img_1.jpg 13KB
共 407 条
- 1
- 2
- 3
- 4
- 5
资源评论
76725413
- 粉丝: 15
- 资源: 6951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功