|
|
@ -1,18 +1,16 @@
|
|
|
|
<?php
|
|
|
|
<?php
|
|
|
|
namespace LaneWeChat\Core;
|
|
|
|
namespace LaneWeChat\Core; // 定义命名空间为 LaneWeChat\Core,表示该类属于 LaneWeChat 模块的核心部分
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* CURL工具类,用于简化HTTP请求操作。
|
|
|
|
* CURL工具类,用于简化HTTP请求操作。
|
|
|
|
* Class Curl
|
|
|
|
*
|
|
|
|
* Created by Lane.
|
|
|
|
* 该类提供了一系列方法来执行HTTP请求,包括GET、POST、PUT、DELETE和HEAD请求。
|
|
|
|
* @Author: lane
|
|
|
|
*
|
|
|
|
* @Mail: lixuan868686@163.com
|
|
|
|
* @author Lane
|
|
|
|
* @Date: 2014-01-10
|
|
|
|
* @email lixuan868686@163.com
|
|
|
|
* @Time: 下午4:22
|
|
|
|
* @website http://www.lanecn.com
|
|
|
|
* Website: http://www.lanecn.com
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
class Curl
|
|
|
|
class Curl {
|
|
|
|
{
|
|
|
|
|
|
|
|
// 私有静态变量,用于存储CURL会话句柄、头部、主体等信息
|
|
|
|
// 私有静态变量,用于存储CURL会话句柄、头部、主体等信息
|
|
|
|
private static $_ch;
|
|
|
|
private static $_ch;
|
|
|
|
private static $_header;
|
|
|
|
private static $_header;
|
|
|
@ -26,15 +24,15 @@ class Curl
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 调用外部URL,支持GET和POST请求。
|
|
|
|
* 调用外部URL,支持GET和POST请求。
|
|
|
|
|
|
|
|
*
|
|
|
|
* @param string $queryUrl 请求的URL
|
|
|
|
* @param string $queryUrl 请求的URL
|
|
|
|
* @param array|string $param 参数
|
|
|
|
* @param array|string $param 参数
|
|
|
|
* @param string $method 请求方法,默认为'get'
|
|
|
|
* @param string $method 请求方法,默认为'get'
|
|
|
|
* @param bool $is_json 是否将返回结果解析为JSON
|
|
|
|
* @param bool $is_json 是否将返回结果解析为JSON,默认为true
|
|
|
|
* @param bool $is_urlcode 是否对参数进行URL编码
|
|
|
|
* @param bool $is_urlcode 是否对参数进行URL编码,默认为true
|
|
|
|
* @return bool|mixed 返回请求结果或false
|
|
|
|
* @return bool|mixed 返回请求结果或false
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static function callWebServer($queryUrl, $param = '', $method = 'get', $is_json = true, $is_urlcode = true)
|
|
|
|
public static function callWebServer($queryUrl, $param = '', $method = 'get', $is_json = true, $is_urlcode = true) {
|
|
|
|
{
|
|
|
|
|
|
|
|
// 检查URL是否为空
|
|
|
|
// 检查URL是否为空
|
|
|
|
if (empty($queryUrl)) {
|
|
|
|
if (empty($queryUrl)) {
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
@ -66,8 +64,7 @@ class Curl
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 初始化CURL会话
|
|
|
|
* 初始化CURL会话
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private static function _init()
|
|
|
|
private static function _init() {
|
|
|
|
{
|
|
|
|
|
|
|
|
self::$_ch = curl_init();
|
|
|
|
self::$_ch = curl_init();
|
|
|
|
// 设置CURL选项
|
|
|
|
// 设置CURL选项
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_HEADER, true);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_HEADER, true);
|
|
|
@ -76,10 +73,10 @@ class Curl
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 设置CURL选项
|
|
|
|
* 设置CURL选项
|
|
|
|
|
|
|
|
*
|
|
|
|
* @param array $optArray 选项数组
|
|
|
|
* @param array $optArray 选项数组
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public static function setOption($optArray = array())
|
|
|
|
public static function setOption($optArray = array()) {
|
|
|
|
{
|
|
|
|
|
|
|
|
foreach ($optArray as $opt) {
|
|
|
|
foreach ($optArray as $opt) {
|
|
|
|
curl_setopt(self::$_ch, $opt['key'], $opt['value']);
|
|
|
|
curl_setopt(self::$_ch, $opt['key'], $opt['value']);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -87,10 +84,10 @@ class Curl
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 关闭CURL会话
|
|
|
|
* 关闭CURL会话
|
|
|
|
|
|
|
|
*
|
|
|
|
* @return bool
|
|
|
|
* @return bool
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private static function _close()
|
|
|
|
private static function _close() {
|
|
|
|
{
|
|
|
|
|
|
|
|
if (is_resource(self::$_ch)) {
|
|
|
|
if (is_resource(self::$_ch)) {
|
|
|
|
curl_close(self::$_ch);
|
|
|
|
curl_close(self::$_ch);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -99,12 +96,12 @@ class Curl
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 发送GET请求
|
|
|
|
* 发送GET请求
|
|
|
|
|
|
|
|
*
|
|
|
|
* @param string $url 请求URL
|
|
|
|
* @param string $url 请求URL
|
|
|
|
* @param array $query 查询参数
|
|
|
|
* @param array $query 查询参数
|
|
|
|
* @return mixed 请求结果
|
|
|
|
* @return mixed 请求结果
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private static function _httpGet($url, $query = array())
|
|
|
|
private static function _httpGet($url, $query = array()) {
|
|
|
|
{
|
|
|
|
|
|
|
|
// 构建查询字符串
|
|
|
|
// 构建查询字符串
|
|
|
|
if (!empty($query)) {
|
|
|
|
if (!empty($query)) {
|
|
|
|
$url .= (strpos($url, '?') === false) ? '?' : '&';
|
|
|
|
$url .= (strpos($url, '?') === false) ? '?' : '&';
|
|
|
@ -114,132 +111,4 @@ class Curl
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_URL, $url);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_URL, $url);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_HEADER, 0);
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_HEADER, 0);
|
|
|
|
// 禁用SSL证书验证
|
|
|
|
// 禁用
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSLVERSION, 1);
|
|
|
|
|
|
|
|
// 执行请求并返回结果
|
|
|
|
|
|
|
|
$ret = self::_execute();
|
|
|
|
|
|
|
|
self::_close();
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 发送POST请求
|
|
|
|
|
|
|
|
* @param string $url 请求URL
|
|
|
|
|
|
|
|
* @param array $query 查询参数
|
|
|
|
|
|
|
|
* @param bool $is_urlcode 是否进行URL编码
|
|
|
|
|
|
|
|
* @return mixed 请求结果
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static function _httpPost($url, $query = array(), $is_urlcode = true)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
// 对参数进行URL编码
|
|
|
|
|
|
|
|
if (is_array($query)) {
|
|
|
|
|
|
|
|
foreach ($query as $key => $val) {
|
|
|
|
|
|
|
|
if ($is_urlcode) {
|
|
|
|
|
|
|
|
$encode_key = urlencode($key);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$encode_key = $key;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($encode_key != $key) {
|
|
|
|
|
|
|
|
unset($query[$key]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($is_urlcode) {
|
|
|
|
|
|
|
|
$query[$encode_key] = urlencode($val);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$query[$encode_key] = $val;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 设置CURL选项
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_URL, $url);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_RETURNTRANSFER, 1);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_HEADER, 0);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_POST, true);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_POSTFIELDS, $query);
|
|
|
|
|
|
|
|
// 禁用SSL证书验证
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYPEER, false);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSL_VERIFYHOST, false);
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_SSLVERSION, 1);
|
|
|
|
|
|
|
|
// 执行请求并返回结果
|
|
|
|
|
|
|
|
$ret = self::_execute();
|
|
|
|
|
|
|
|
self::_close();
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 发送PUT请求
|
|
|
|
|
|
|
|
* @param string $url 请求URL
|
|
|
|
|
|
|
|
* @param array $query 查询参数
|
|
|
|
|
|
|
|
* @return mixed 请求结果
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static function _put($url, $query = array())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'PUT');
|
|
|
|
|
|
|
|
return self::_httpPost($url, $query);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 发送DELETE请求
|
|
|
|
|
|
|
|
* @param string $url 请求URL
|
|
|
|
|
|
|
|
* @param array $query 查询参数
|
|
|
|
|
|
|
|
* @return mixed 请求结果
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static function _delete($url, $query = array())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
|
|
|
|
|
|
|
|
return self::_httpPost($url, $query);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 发送HEAD请求
|
|
|
|
|
|
|
|
* @param string $url 请求URL
|
|
|
|
|
|
|
|
* @param array $query 查询参数
|
|
|
|
|
|
|
|
* @return mixed 请求结果
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static function _head($url, $query = array())
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curl_setopt(self::$_ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
|
|
|
|
|
|
|
|
return self::_httpPost($url, $query);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 执行CURL请求
|
|
|
|
|
|
|
|
* @return mixed 请求结果
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
private static function _execute()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$response = curl_exec(self::$_ch);
|
|
|
|
|
|
|
|
$errno = curl_errno(self::$_ch);
|
|
|
|
|
|
|
|
// 如果发生错误,抛出异常
|
|
|
|
|
|
|
|
if ($errno > 0) {
|
|
|
|
|
|
|
|
throw new \Exception(curl_error(self::$_ch), $errno);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return $response;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器命名空间声明:namespace LaneWeChat\Core; 定义了类的命名空间,表明这个类属于LaneWeChat模块的核心部分。
|
|
|
|
|
|
|
|
类定义:class Menu 定义了一个用于管理微信自定义菜单的类。
|
|
|
|
|
|
|
|
setMenu方法:用于创建自定义菜单。处理菜单数据,将一维数组转换为树形结构,支持子菜单,并发送POST请求到微信服务器。
|
|
|
|
|
|
|
|
getMenu方法:用于获取当前公众号的自定义菜单信息。发送GET请求到微信服务器。
|
|
|
|
|
|
|
|
delMenu方法:用于删除当前公众号的自定义菜单。发送GET请求到微信服务器
|
|
|
|
|