/** Get提交获取数据
* @desc 获取access_token
* @return String access_token
*/
function
getAccessToken(){
$AppId
=
'1232assad13213123'
;
$AppSecret
=
'2312312321adss3123213'
;
$getUrl
=
'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='
.
$AppId
.
'&secret='
.
$AppSecret
;
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_URL,
$getUrl
);
curl_setopt(
$ch
, CURLOPT_HEADER, 0);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURL_SSLVERSION_SSL, 2);
curl_setopt(
$ch
, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$ch
, CURLOPT_SSL_VERIFYHOST, FALSE);
$data
= curl_exec(
$ch
);
$response
= json_decode(
$data
);
return
$response
->access_token;
}
/** Post提交获取数据
* @desc 实现天气内容回复
*/
public
function
testWeixin(){
$access_token
=
$this
->getAccessToken();
$customMessageSendUrl
=
'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='
.
$access_token
;
$description
=
'今天天气的详细信息(从第三方获取)。'
;
$url
=
'http://weather.com/'
;
$picurl
=
'http://weather.com/'
;
$postDataArr
=
array
(
'touser'
=>
'OPENID'
,
'msgtype'
=>
'news'
,
'news'
=>
array
(
'articles'
=>
array
(
'title'
=>
'当天天气'
,
'description'
=>
$description
,
'url'
=>
$url
,
'picurl'
=>
$picurl
,
),
),
);
$postJosnData
= json_encode(
$postDataArr
);
$ch
= curl_init(
$customMessageSendUrl
);
curl_setopt(
$ch
, CURLOPT_HEADER, 0);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURLOPT_POST, 1);
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$postJosnData
);
curl_setopt(
$ch
, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$ch
, CURLOPT_SSL_VERIFYHOST, FALSE);
$data
= curl_exec(
$ch
);
var_dump(
$data
);
}
/**
* @description: 封装CURL扩展
* @date: 2014-07-28 16:04
*/
/**
* @编码规范
* @class 类名首字母大写,类名为多个单词, 每个大字首字母大写 eg: class Curl , class CurlPage
* @variable 变量名小写, 变量名为多个单词, 每个单词小写,使用下划线_分割 eg: $curl_result
* @function 函数名与类名规则相同 eg: function SendRequest
* @params 函数形参规则与变量名相同
* @class-variable 成员变量,以下划线结尾,多个单词使用下划线分隔. eg: private $host_name_
*/
/**
* @要求
*
*/
class
Curl{
/**
* @请求的host
*/
private
$host_
;
/**
* @curl 句柄
*/
private
$ch_
;
/**
* @超时限制时间
*/
const
time_=5;
/**
* @请求的设置
*/
private
$options_
;
/**
* @保存请求头信息
*/
private
$request_header_
;
/**
* @保存响应头信息
*/
private
$response_header_
;
/**
* @body_ 用于保存curl请求返回的结果
*/
private
$body_
;
/**
* @读取cookie
*/
private
$cookie_file_
;
/**
* @写入cookie
*/
private
$cookie_jar_
;
/**
* @todo proxy
* @构造函数,初始化CURL回话
*/
public
function
Start(
$url
){
$this
->ch_ = curl_init(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_HEADER, 1);
curl_setopt(
$this
->ch_, CURLOPT_RETURNTRANSFER , 1 );
}
/**
* @返回响应头
*/
public
function
ResponseHeader(
$url
){
if
(!function_exists(
'http_parse_headers'
)) {
function
http_parse_headers (
$raw_headers
){
$headers
=
array
();
foreach
(
explode
(
"\n"
,
$raw_headers
)
as
$i
=>
$h
) {
$h
=
explode
(
':'
,
$h
, 2);
if
(isset(
$h
[1])) {
if
(!isset(
$headers
[
$h
[0]])) {
$headers
[
$h
[0]] = trim(
$h
[1]);
}
else
if
(
is_array
(
$headers
[
$h
[0]])) {
$tmp
=
array_merge
(
$headers
[
$h
[0]],
array
(trim(
$h
[1])));
$headers
[
$h
[0]] =
$tmp
;
}
else
{
$tmp
=
array_merge
(
array
(
$headers
[
$h
[0]]),
array
(trim(
$h
[1])));
$headers
[
$h
[0]] =
$tmp
;
}
}
}
return
$headers
;
}
}
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_TIMEOUT, Curl::time_);
$this
->body_=
$this
->Execx();
$header_size
= curl_getinfo(
$this
->ch_, CURLINFO_HEADER_SIZE);
$this
->response_header_ =
substr
(
$this
->body_,
$start
= 0,
$offset
=
$header_size
);
$this
->response_header_ = http_parse_headers(
$this
->response_header_);
print_r(
$this
->response_header_);
return
$this
->Close(
$this
->body_);
}
/**
* @读取cookie
*/
public
function
LoadCookie(
$url
,
$cookie_file
){
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_COOKIE, 1);
curl_setopt(
$this
->ch_, CURLOPT_COOKIEFILE ,
$cookie_file
);
$this
->body_=
$this
->Execx();
return
$this
->Close(
$this
->body_);
}
/**
* @写入cookie
*/
public
function
SaveCookie(
$url
){
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_COOKIE, 1);
curl_setopt(
$this
->ch_, CURLOPT_COOKIEFILE ,
'cookie.txt'
);
curl_setopt(
$this
->ch_, CURLOPT_COOKIEJAR ,
'cookie.txt'
);
$this
->body_=
$this
->Execx();
return
$this
->Close(
$this
->body_);
}
/**
* @设置HEADER
*/
public
function
SetHeader(
$headers
= null){
if
(
is_array
(
$headers
) &&
count
(
$headers
) > 0) {
curl_setopt(
$this
->ch_, CURLOPT_HTTPHEADER,
$headers
);
}
}
/**
* @GET请求
*/
public
function
Get(
$url
,
array
$params
=
array
()) {
if
(
$params
) {
if
(
strpos
(
$url
,
'?'
)) {
$url
.=
"&"
.http_build_query(
$params
);
}
else
{
$url
.=
"?"
.http_build_query(
$params
);
}
}
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_TIMEOUT, Curl::time_);
if
(
strpos
(
$url
,
'https'
) === 0) {
curl_setopt(
$this
->ch_, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt(
$this
->ch_, CURLOPT_SSL_VERIFYPEER, 0);
}
$this
->body_=
$this
->Execx();
return
$this
->Close(
$this
->body_);
}
/**
* @POST请求
*/
public
function
Post(
$url
,
array
$params
=
array
()) {
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt(
$this
->ch_, CURLOPT_HTTPHEADER,
array
(
"Content-Type: application/x-www-form-urlencoded"
));
curl_setopt(
$this
->ch_, CURLOPT_POST, true);
curl_setopt(
$this
->ch_, CURLOPT_TIMEOUT, Curl::time_);
if
(
$params
) {
curl_setopt(
$this
->ch_, CURLOPT_POSTFIELDS, http_build_query(
$params
));
}
$this
->body_=
$this
->Execx();
return
$this
->Close(
$this
->body_);
}
/**
* @tips: google http head 方法
*/
public
function
Head(
$url
,
array
$params
=
array
()) {
$this
->Start(
$url
);
curl_setopt(
$this
->ch_, CURLOPT_TIMEOUT, Curl::time_);
curl_setopt(
$this
->ch_, CURLOPT_RETURNTRANSFER , 0);
curl_setOpt(
$this
->ch_,CURLOPT_NOBODY, true);
$this
->body_=
$this
->Execx();
return
$this
->Close(
$this
->body_);
}
/**
* @执行CURL会话
*/
public
function
Execx(){
return
curl_exec(
$this
->ch_);
}
/**
* @关闭CURL句柄
*/
public
function
Close(
$body_
){
if
(
$body_
=== false) {
echo
"CURL Error: "
. curl_error(
$body_
);
return
false;
}
curl_close(
$this
->ch_);
return
$body_
;
}
}