代码如下:
/* * ******************************************************
* @author Dragoners.Li <[email protected]>
* @link http://mp.weixin.qq.com/wiki/home/index.html
* @version 0.0.1
* @uses $wxApi = new WxApi();
* @package 微信API接口
* ****************************************************** */
header('Content-Type: text/html; charset=utf8');
date_default_timezone_set('Asia/Shanghai');
class Wechat {
CONST API_PREFIX = 'https://api.weixin.qq.com/'; //接口url前缀
private $_appID; //开发者ID
private $_appsecret; //开发者密码
private $_token; // 公众平台请求开发者时需要标记
private $_access_token = 'AccessToken'; //access_token 存放文件
//构造方法
public function __construct($appID, $appsecret, $token) {
$this->_appID = $appID;
$this->_appsecret = $appsecret;
$this->_token = $token;
}
//接收处理消息
public function responseMsg() {
//$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postStr = file_get_contents("php://input");
//调试错误:file_put_contents("log.php",$postStr);//写入文件
if (!empty($postStr)) {
// 解析该xml字符串,利用simpleXML
libxml_disable_entity_loader(true); //禁止xml实体解析,防止xml注入
//把 XML 字符串载入对象中。失败返回 false。
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //从字符串获取simpleXML对象
$MsgType = $postObj->MsgType; //消息类型
//file_put_contents("log.php",'消息类型:'.$MsgType."\n".$postStr."\n",FILE_APPEND);//记录用户发送的消息
switch ($MsgType) {
case 'text'://文本消息(表情也是文本类型消息)
echo $this->responseText($postObj);
break;
case 'image'://图片消息
echo $this->responseImage($postObj);
break;
case 'voice'://语音消息
echo $this->responseVoice($postObj);
break;
case 'video'://视频消息
echo $this->responseVideo($postObj);
break;
case 'shortvideo'://小视频消息
$postObj->MediaId = 'QqEwwmMUL9LbGMDaaR3w1XWX0mNz_tVfsHjc_QZSom8f_TIcQw3DvjdKXuLmEVYV';
$postObj->ThumbMediaId = '4pdOpiLdN7eT9NnX1cOpS7illQtlxpcNdWVLxBDEROugx3Y571U_ssXbn6Sjlw1V';
echo $this->responseShortvideo($postObj);
break;
case 'location'://地理位置消息
echo $this->responseLocation($postObj);
break;
case 'link'://链接消息
echo $this->responseLink($postObj);
break;
case 'event'://接收事件推送
echo $this->responseEvent($postObj);
break;
case 'transfer_customer_service'://消息转发到多客服
$content = 'test';
echo $this->_sendLink($fromUsername, $toUsername, $time, $content, $msgId);
break;
default ://其它类型消息
echo $this->responseText($postObj);
}
} else {
exit('');
}
}
############################################################################################################----私有发送方法start
//接入服务验证
public function valid() {
$echoStr = $_GET["echostr"]; //随机字符串
$signature = $_GET["signature"]; //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
$timestamp = $_GET["timestamp"]; //时间戳
$nonce = $_GET["nonce"]; //随机数
if (!$this->_token) {
throw new Exception('TOKEN没有定义!');
}
$tmpArr = array($this->_token, $timestamp, $nonce); //将token、timestamp、nonce三个参数进行字典序排序
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr); //将三个参数字符串拼接成一个字符串进行sha1加密
echo ($tmpStr == $signature) ? $echoStr : ''; //开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
}
/**
* 回复文本类型消息
* @access private 私有方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $Content 回复文本内容
*/
private function _sendTextMsg($FromUserName, $ToUserName, $Content) {
//回复文本类型消息模板
$TextTpl = "
" . time() . "
";
return sprintf($TextTpl, $FromUserName, $ToUserName, $Content);
}
############################################################################################################----私有发送方法end
############################################################################################################----response
/**
* 回复文本类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $Content 回复文本内容
*/
protected function responseText($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = $postObj->CreateTime; //消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$Content = $postObj->Content; //文本消息内容
switch ($Content) {
case '?':
case '帮助':
case 'help':
$Content = '【菜单】--HELPER帮助手册!' . "\n";
$Content .= '[?]输入(?,帮助,help)获取帮助!' . "\n";
$Content .= '[1]输入(1,新闻,news)获取图文!' . "\n";
$Content .= '[2]输入(2,GET)获取GET参数!' . "\n";
$Content .= '[3]输入(3)获取超链接!' . "\n";
$Content .= '[4]输入(4)获取access_token!' . "\n";
$Content .= '[5]输入(5)获取菜单' . "\n";
$Content .= '[6]输入(6)获取微信ip地址!' . "\n";
$Content .= '[7]输入(7)设置菜单!' . "\n";
$Content .= '[8]输入(8)删除菜单!' . "\n";
$Content .= '[9]输入(9)获取用户列表!' . "\n";
$Content .= '[10]输入(10)长连接转短链接!' . "\n";
$Content .= '[11]输入(11)微信智能接口!' . "\n";
$Content .= '[12]输入(12)单独获取用户!' . "\n";
$Content .= '[13]输入(13)批量获取用户!' . "\n";
$Content .= '[14]输入(14)设置备注名!' . "\n";
$Content .= '[15]输入(15)设置标签,不能重复!' . "\n";
$Content .= '[16]输入(16)获取标签!' . "\n";
$Content .= '[17]输入(17)更新标签!' . "\n";
$Content .= '[18]输入(18)删除标签!' . "\n";
$Content .= '[19]输入(19)获取标签下粉丝!' . "\n";
$Content .= '[20]输入(20)批量为用户打标签!' . "\n";
$Content .= '[21]输入(21)批量为用户去标签!' . "\n";
$Content .= '[22]输入(22)获取用户标签列表!' . "\n";
$Content .= '[23]输入(23)获取公众号黑名单!' . "\n";
$Content .= '[24]输入(24)设置拉黑用户!' . "\n";
$Content .= '[25]输入(25)取消拉黑用户!' . "\n";
$Content .= '[26]输入(26)临时二维码int型!' . "\n";
$Content .= '[27]输入(27)临时二维码string型!' . "\n";
$Content .= '[28]输入(28)永久二维码int型!' . "\n";
$Content .= '[29]输入(29)永久二维码string型!' . "\n";
$Content .= '[30]输入(30)用ticket换取二维码!' . "\n";
$Content .= '[31]输入(31)获取用户增减数据!' . "\n";
$Content .= '[32]输入(32)获取累计用户数据!' . "\n";
$Content .= '[33]输入(33)图文分析数据接口!' . "\n";
$Content .= '[34]输入(34)消息分析数据接口!' . "\n";
$Content .= '[35]输入(35)接口分析数据接口!' . "\n";
$Content .= '[36]输入(36)发送图片!' . "\n";
$Content .= '[37]输入(37)发送语音!' . "\n";
$Content .= '[38]输入(38)发送音乐!' . "\n";
$Content .= '[39]输入(39)发送链接(暂无用)!' . "\n";
$Content .= '[40]输入(40)发送小视频(暂无用)!' . "\n";
$Content .= '[41]输入(41)发送视频(暂无用)!' . "\n";
$Content .= '[42]输入(42)上传文件!' . "\n";
$Content .= '[43]输入(43)获取素材总数!' . "\n";
$Content .= '[44]输入(44)获取素材列表!' . "\n";
$Content .= '[..]发送图片原样返回!' . "\n";
$Content .= '[..]发送语音原样返回!' . "\n";
$Content .= '[..]发送位置会随机返回附近学校,公交站等信息!' . "\n";
$Content .= '[..]输入其它文字则聊天机器人响应给微信用户!' . "\n";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 1:
case 'news':
case '新闻'://图文news
$Articles = array(
array('Title' => '欢迎关注我', 'Description' => 'Dragoners.li 2013.12.23', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '七', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '夕', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '情', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '人', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '节', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '快', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
array('Title' => '乐', 'Description' => '描述一', 'PicUrl' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0', 'Url' => 'http://wx.qlogo.cn/mmopen/Q3auHgzwzM5cbPqO7GLSGhDVYQdUibUu4s1qOsHQPF9hZlN2QLKvPfAgeyAU3iapgjzziaVd0pPhaSCqyeRuEPBrQ/0'),
);
echo $this->responseNews($FromUserName, $ToUserName, $Articles);
break;
case 2:
case 'GET': //获取GET参数
echo $this->_sendTextMsg($FromUserName, $ToUserName, json_encode($_GET));
break;
case 3: //超链接
$Content = "百度一下";
$Content.= " || http://www.baidu.com";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 4: //获取access_token
$Content = $this->getAccessToken();
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 5: //获取菜单
$Content = $this->getMenu();
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 6: //获取微信ip地址
$Content = $this->getWeChatIp();
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 7: //设置菜单
$data = <<setMenu($data);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 8: //删除菜单
$Content = $this->delMenu();
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 9://获取用户列表
$UserList = $this->getUserList();
$Content = json_encode($UserList);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 10: //短链接
$data = array('action' => 'long2short', 'long_url' => 'http://dragonersli.github.io/');
$Content = $this->getShortUrl($data); //返回短链接地址
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 11://微信智能接口
$data['query'] = '杭州到厦门火车票';
$data['city'] = '杭州';
$data['category'] = 'flight,hotel,weather,train';
$data['appid'] = $this->_appID;
$data['uid'] = 'oLjeBuHzd9SWstbNnukN7uv2ES1k';
$Content = $this->sendSemantic($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 12: //单独获取用户
$data = array('openid' => 'oLjeBuHzd9SWstbNnukN7uv2ES1k', 'lang' => 'zh_CN');
$Content = $this->getUserInfo($data); //单独获取
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 13: //批量获取用户
$data = array(
'user_list' => array(
array('openid' => 'oLjeBuCC9qrbqSSQnIaTmzUxJhIE', 'lang' => 'zh_CN'),
array('openid' => 'oLjeBuH1k2aaz3MxdYq8krdTJCqs', 'lang' => 'zh_CN')
)
);
$Content = $this->getUserInfo($data); //批量获取
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 14://设置备注名
$data = array('openid' => 'oLjeBuHzd9SWstbNnukN7uv2ES1k', 'remark' => '李世龙');
$Content = $this->setRemark($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 15://设置标签,不能重复
$data = array('tag' => array('name' => 'test'));
$Content = $this->setTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 16://获取标签
$Content = $this->getTags();
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 17://更新标签
$data = array('tag' => array('id' => 125, 'name' => 'testabc'));
$Content = $this->upTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 18://删除标签
$data = array('tag' => array('id' => 125));
$Content = $this->delTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 19://获取标签下粉丝
$data = array('tagid' => 2, 'next_openid' => '');
$Content = $this->getTagsUser($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 20://批量为用户打标签
$data = array('openid_list' => array('oLjeBuKBI6hNtLGLnQGBeCPxlIIg', 'oLjeBuEy2SfJd3LD4ae3UAkAgBBg'), 'tagid' => 125);
$Content = $this->setUserTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 21://批量为用户去标签
$data = array('openid_list' => array('oLjeBuKBI6hNtLGLnQGBeCPxlIIg', 'oLjeBuEy2SfJd3LD4ae3UAkAgBBg'), 'tagid' => 125);
$Content = $this->delUserTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 22://获取用户身上的标签列表
$data = array('openid' => 'oLjeBuKBI6hNtLGLnQGBeCPxlIIg');
$Content = $this->getUserTags($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 23://获取公众号的黑名单列表
$data = array('begin_openid' => '');
$Content = $this->getBlackList($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 24://设置拉黑用户
$data = array('opened_list' => array('oLjeBuCC9qrbqSSQnIaTmzUxJhIE', 'oLjeBuHzd9SWstbNnukN7uv2ES1k'));
$Content = $this->setBlackList($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 25://取消拉黑用户
$data = array('opened_list' => array('oLjeBuCC9qrbqSSQnIaTmzUxJhIE', 'oLjeBuHzd9SWstbNnukN7uv2ES1k'));
$Content = $this->delBlackList($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 26://临时二维码int
$Content = $this->setQrcode($data = 123, $type = 0, $expire_seconds);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 27://临时二维码str
$Content = $this->setQrcode($data = 'test', $type = 1, $expire_seconds);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 28://永久二维码int
$Content = $this->setQrcode($data = 123, $type = 2);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 29://永久二维码str
$Content = $this->setQrcode($data = 'test', $type = 3);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 30://通过ticket换取二维码
$Content = $this->setQrcode($data = 'test', $type = 3);
//$Content = json_encode($Content);
$file = 'qrcode.jpeg';
$this->getQrcode($Content->ticket, $file);
echo $this->_sendTextMsg($FromUserName, $ToUserName, 'http://quda.septwolves.cn/' . $file);
break;
case 31://获取用户增减数据
$data = array('begin_date' => date('2017-08-21'), 'end_date' => date('2017-08-27'));
$Content = $this->getUserSC($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 32://获取累计用户数据
$data = array('begin_date' => date('2017-08-24'), 'end_date' => date('2017-08-25'));
$Content = $this->getUserSC($data, 0);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 33://图文分析数据接口
$data = array('begin_date' => date('2017-08-18'), 'end_date' => date('2017-08-18'));
$Content = $this->getArticleSC($data, 0);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 34://消息分析数据接口
$data = array('begin_date' => date('2016-08-18'), 'end_date' => date('2016-08-18'));
$Content = $this->getUpStremMsg($data, 0);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 35://接口分析数据接口
$data = array('begin_date' => date('2016-08-18'), 'end_date' => date('2016-08-18'));
$Content = $this->getInterface($data, 1);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 36:////发送图片(MediaId会过期)
$postObj->MediaId = 'ytjjOxXoaI7cTbS__0KJvJUVFVHfkHymr1fLQTyKx6D-QI4yjXUfdCG8BclXavgk'; //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
echo $this->responseImage($postObj);
break;
case 37://语音(MediaId会过期)
$postObj->MediaId = 'lsqKNHUUy1z5lomHmQiqJgk8n_ChKDeAOQAPY7ag8aRKqt3AF3EKeUJLcPnecMlp'; //语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
echo $this->responseVoice($postObj);
break;
case 38://音乐music
case 'music':
case '音乐':
$postObj->ThumbMediaId = '8zEV7SrAvoAmv2WWD7Z3owf14A2LFXmAPVHuUPOjRQnx28Uh9Zr-d0hfXKmqiPbB';
$postObj->Title = "测试音乐发送";
$postObj->Description = "DragonersLi专辑";
$postObj->MusicUrl = "http://so1.111ttt.com:8282/2017/4/05m/10/298101104389.m4a?tflag=1503583813&pin=1f08816f2b7b487ad249dd680cf931aa&ip=115.192.190.0#.mp3";
$postObj->HQMusicUrl = 'http://so1.111ttt.com:8282/2017/4/05m/10/298101104389.m4a?tflag=1503583813&pin=1f08816f2b7b487ad249dd680cf931aa&ip=115.192.190.0#.mp3'; //高质量音乐链接,WIFI环境优先使用该链接播放音乐
echo $this->responseMusic($postObj);
break;
case 39://链接link (暂无用)
echo $this->responseLink($postObj);
break;
case 40://小视频Shortvideo (暂无用)
echo $this->responseShortvideo($postObj);
break;
case 41://视频Video (暂无用)
echo $this->responseVideo($postObj);
break;
case 42://上传文件根据media_id获取上传的文件 (image,video,thumb)
$Content = $this->setUpLoadFile($file = './qrcode.jpeg', $type = 'image'); //上传图片文件
$FileName = $this->getUpLoadImage($Content, $ext = '.jpeg'); //获取上传的图片
echo $this->_sendTextMsg($FromUserName, $ToUserName, 'http://quda.septwolves.cn/' . $FileName);
break;
case 43: //获取素材总数
$Content = $this->getMaterialCount();
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 44: //获取素材列表(image、video、voice、news)
$data = array('type' => 'image', 'offset' => 0, 'count' => 20);
$Content = $this->getMaterialList($data);
$Content = json_encode($Content);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
default://聊天机器人响应给微信用户
$url = 'http://api.douqq.com/?key=dWFQRnZHa2d3cU1lemtRPXZEUT1lTno1QXdvQUFBPT0&msg=' . $Content;
//$Content = '机器人回答不了你的,他爸爸可以回答! ';
$Content = func_send_request($url);
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
}
}
/**
* 回复图片类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $MediaId 回复通过素材管理中的接口上传多媒体文件,得到的id
*/
protected function responseImage($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = time(); //$postObj->CreateTime;//消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$PicUrl = $postObj->PicUrl; //图片链接(由系统生成)
$MediaId = $postObj->MediaId; //图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
if (empty($MediaId)) {
$MediaId_Arr = array(
'ytjjOxXoaI7cTbS__0KJvJUVFVHfkHymr1fLQTyKx6D-QI4yjXUfdCG8BclXavgk',
'ytjjOxXoaI7cTbS__0KJvJUVFVHfkHymr1fLQTyKx6D-QI4yjXUfdCG8BclXavgk',
);
$Rand_Key = mt_rand(0, count($MediaId_Arr) - 1);
$MediaId = $MediaId_Arr[$Rand_Key];
}
//回复图片类型消息模板
$ImageTpl = "
%s
";
return sprintf($ImageTpl, $FromUserName, $ToUserName, $CreateTime, $MediaId);
}
/**
* 回复语音类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $MediaId 回复通过素材管理中的接口上传多媒体文件,得到的id
*/
protected function responseVoice($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = time(); //$postObj->CreateTime;//消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$Format = $postObj->Format; //语音格式,如amr,speex等
$MediaId = $postObj->MediaId; //语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
if (empty($MediaId)) {
$MediaId_Arr = array(
'iEuuFm_y9rADnKs9sncvwF7odJV0RO1qoeXVELwSuOp9dSfjujeTMf0359ycxNry',
'9LKafxeFynf5YKNJ7OZajpf9hBw-tlO5teiMhH8qcgd3SLc3zuSryLJ2T94q_2iI',
);
$Rand_Key = mt_rand(0, count($MediaId_Arr) - 1);
$MediaId = $MediaId_Arr[$Rand_Key];
}
//回复语音类型消息模板
$VoiceTpl = "
%s
";
echo sprintf($VoiceTpl, $FromUserName, $ToUserName, $CreateTime, $MediaId);
}
/**
* 回复视频类型消息 Receive
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $MediaId 回复通过素材管理中的接口上传多媒体文件,得到的id
*/
protected function responseVideo($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = time(); //$postObj->CreateTime;//消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$ThumbMediaId = $postObj->ThumbMediaId; //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
$MediaId = $postObj->MediaId; //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
$Title = "测试视频标题";
$Description = "测试视频描述";
if (empty($MediaId)) {
$MediaId = 'QqEwwmMUL9LbGMDaaR3w1XWX0mNz_tVfsHjc_QZSom8f_TIcQw3DvjdKXuLmEVYV';
$ThumbMediaId = '4pdOpiLdN7eT9NnX1cOpS7illQtlxpcNdWVLxBDEROugx3Y571U_ssXbn6Sjlw1V';
}
//回复视频类型消息模板
$VideoTpl = "
%s
";
return sprintf($VideoTpl, $FromUserName, $ToUserName, $CreateTime, $MediaId, $Title, $Description);
}
/**
* 回复小视频类型消息 Receive
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $MediaId 回复通过素材管理中的接口上传多媒体文件,得到的id
*/
protected function responseShortvideo($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = $postObj->CreateTime; //消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$ThumbMediaId = $postObj->ThumbMediaId; //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
$MediaId = $postObj->MediaId; //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
if (empty($MediaId)) {
$MediaId = 'QqEwwmMUL9LbGMDaaR3w1XWX0mNz_tVfsHjc_QZSom8f_TIcQw3DvjdKXuLmEVYV';
$ThumbMediaId = '4pdOpiLdN7eT9NnX1cOpS7illQtlxpcNdWVLxBDEROugx3Y571U_ssXbn6Sjlw1V';
}
//回复小视频类型消息模板
$ShortvideoTpl = "
%s
%s
";
return sprintf($ShortvideoTpl, $FromUserName, $ToUserName, $CreateTime, $MediaId, $ThumbMediaId, $MsgId);
}
/**
* 回复音乐类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $MediaId 回复通过素材管理中的接口上传多媒体文件,得到的id
*/
protected function responseMusic($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = time(); //$postObj->CreateTime;//消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$ThumbMediaId = $postObj->ThumbMediaId; //视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
$MediaId = $postObj->MediaId; //视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
$Title = $postObj->Title; //
$Description = $postObj->Description; //
$MusicUrl = $postObj->MusicUrl; //
$HQMusicUrl = $postObj->HQMusicUrl; //
if (empty($ThumbMediaId)) {
$Title = "一千个伤心的理由";
$Description = "张学友专辑";
$MusicUrl = "http://so1.111ttt.com:8282/2017/4/05m/10/298101104389.m4a?tflag=1503583813&pin=1f08816f2b7b487ad249dd680cf931aa&ip=115.192.190.0#.mp3";
$HQMusicUrl = 'http://so1.111ttt.com:8282/2017/4/05m/10/298101104389.m4a?tflag=1503583813&pin=1f08816f2b7b487ad249dd680cf931aa&ip=115.192.190.0#.mp3'; //高质量音乐链接,WIFI环境优先使用该链接播放音乐
$ThumbMediaId = '8zEV7SrAvoAmv2WWD7Z3owf14A2LFXmAPVHuUPOjRQnx28Uh9Zr-d0hfXKmqiPbB';
}
//回复音乐类型消息模板
$MusicTpl = "
%s
";
return sprintf($MusicTpl, $FromUserName, $ToUserName, $CreateTime, $Title, $Description, $MusicURL, $HQMusicUrl, $ThumbMediaId);
}
/**
* 根据地理位置回复图文类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @param $Location_X
* @param $Location_Y
* @param $Scale
* @param $Label
* @return
*/
protected function responseLocation($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = $postObj->CreateTime; //消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$Location_X = $postObj->Location_X; //地理位置维度
$Location_Y = $postObj->Location_Y; //地理位置经度
$Scale = $postObj->Scale; //地图缩放大小
$Label = $postObj->Label; //地理位置信息
// 利用位置获取信息
//位置静态图片:
//http://api.map.baidu.com/staticimage?center=120.144787,30.277945&width=80&height=80&zoom=11
//位置跳转url:
//http://api.map.baidu.com/staticimage?width=80&height=80¢er=120.144787,30.277945&zoom=15&markers=120.144787,30.277945&markerStyles=l,
//百度LBS圆形范围查询:
//域名:http://api.map.baidu.com ;服务名:staticimage; 版本号:v2
$url = 'http://api.map.baidu.com/place/v2/search?query=%s&location=%s&radius=%s&output=%s&ak=%s';
$Query_Arr = array('酒店', '医院', '学校', '饭店', '超市', 'KTV', '电影院', '景点', '公交站', '加油站', '便利店', '卫生间');
$Rand_Key = mt_rand(0, count($Query_Arr) - 1);
$query = $Query_Arr[$Rand_Key];
$location = $Location_X . ',' . $Location_Y;
$radius = 2000;
$output = 'json';
$ak = '8ca41b249958ea355cf084a22b5d5e9c'; //用户的访问密钥 //482ff15b50811908fe1abba5977b8d98
$url = sprintf($url, urlencode($query), $location, $radius, $output, $ak);
$res = func_send_request($url);
$obj = json_decode($res);
$list = array();
if (!$obj->status) {//返回信息 message:ok
foreach ($obj->results as $k => $v) {
if ($k < 8) {//以前最多news返回10条记录,现在最多8条,多了,全不返回
$width = $k ? 80 : 640;
$hight = $k ? 80 : 640;
$Articles[$k]['Title'] = $v->name;
$Articles[$k]['Description'] = " 地址:" . $v->address . ( empty($v->telephone) ? '' : " 电话:" . $v->telephone );
$Articles[$k]['PicUrl'] = "http://api.map.baidu.com/staticimage?width=" . $width . "&height=" . $hight . "¢er=" . $v->location->lng . ',' . $v->location->lat . "&zoom=15&markers=" . $v->location->lng . ',' . $v->location->lat . "&markerStyles=l,";
$Articles[$k]['Url'] = "http://api.map.baidu.com/place/detail?uid=" . $v->uid . "&output=html&src=" . $v->name . "&output=html";
}
}
echo $this->responseNews($FromUserName, $ToUserName, $Articles);
} else {
$Content = '获取位置信息失败!\n 你的坐标为:\n 经度:' . $Location_Y . ',纬度:' . $Location_X . "\n" . '你所在的位置为:' . $Label;
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
}
}
/**
* 回复链接消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @return
*/
protected function responseLink() {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = time(); //$postObj->CreateTime;//消息创建时间(整型)
$MsgId = $postObj->MsgId ? $postObj->MsgId : 0; //消息ID(64位整型)(事件类型无此字段)
$Title = '百度'; //消息标题
$Description = '百度一下,你就知道!'; //消息描述
$Url = 'http://www.baidu.com/'; //消息链接
//回复链接消息模板
$LinkTpl = "
%s
%s
";
return sprintf($LinkTpl, $FromUserName, $ToUserName, $CreateTime, $Title, $Description, $Url, $MsgId);
}
/**
* 回复图文类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
*/
protected function responseNews($FromUserName, $ToUserName, $Articles = array()) {
$ArticleCount = count($Articles);
//回复图文类型消息模板
$NewsTpl = "
" . time() . "
%s
";
foreach ($Articles as $k => $v) {
$NewsTpl.= "-
";
}
$NewsTpl.="
";
return sprintf($NewsTpl, $FromUserName, $ToUserName, $ArticleCount);
}
/**
* 回复事件类型消息
* @access protected 受保护方法
* @param $FromUserName 发送者
* @param $ToUserName 接收者
* @return
*/
protected function responseEvent($postObj) {
$FromUserName = $postObj->FromUserName; //发送者账号
$ToUserName = $postObj->ToUserName; //接收者账号
$CreateTime = $postObj->CreateTime; //消息创建时间(整型)
$Event = $postObj->Event; //事件类型
switch ($Event) {
case 'subscribe'://subscribe(订阅)
$Content = "欢迎订阅我!~";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'unsubscribe'://unsubscribe(取消订阅)
$Content = "不要离开我!/(ㄒoㄒ)/~~";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'scancode_push'://扫码推事件
case 'scancode_waitmsg'://扫码带提示
$EventKey = $postObj->EventKey; //由开发者在创建菜单时设定事件KEY值,qrscene_为前缀,后面为二维码的参数值
$ScanCodeInfo = $postObj->ScanCodeInfo; //扫描信息
$ScanType = $postObj->ScanType; // 扫描类型,一般是qrcode
$ScanResult = $postObj->ScanResult; // 扫描结果,即二维码对应的字符串信息
$Content = $Event . "---" . $EventKey . "---" . $ScanCodeInfo . "---" . $ScanType . "---" . $ScanResult . "---scancode_push || scancode_waitmsg";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'pic_sysphoto'://弹出系统拍照发图的事件推送
case 'pic_photo_or_album'://弹出拍照或者相册发图的事件推送
case 'pic_weixin'://弹出微信相册发图器的事件推送
$EventKey = $postObj->EventKey; //事件KEY值,由开发者在创建菜单时设定,qrscene_为前缀,后面为二维码的参数值
$SendPicsInfo = $postObj->SendPicsInfo; // 发送的图片信息
$Count = $postObj->Count; // 发送的图片数量
$PicList = $postObj->PicList; //图片列表
$PicMd5Sum = $postObj->PicMd5Sum; //图片的MD5值,开发者若需要,可用于验证接收到图片
$Content = $Event . "---" . $EventKey . "---" . $SendPicsInfo . "---" . $Count . "---" . $PicList . "---" . $PicMd5Sum . "---pic_sysphoto || pic_photo_or_album || pic_weixin";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'location_select'://弹出地理位置选择器的事件推送
$EventKey = $postObj->EventKey; //事件KEY值,由开发者在创建菜单时设定,qrscene_为前缀,后面为二维码的参数值
if ($EventKey == 'location_1') {//事件,位置
//如果菜单type为location_select,且key为location_1则执行此步骤!
}
$SendLocationInfo = $postObj->SendLocationInfo; // 发送的位置信息
$Location_X = $postObj->Location_X; // X坐标信息
$Location_Y = $postObj->Location_Y; // Y坐标信息
$Scale = $postObj->Scale; //精度,可理解为精度或者比例尺、越精细的话 scale越高
$Label = $postObj->Label; //地理位置的字符串信息
$Poiname = $postObj->Poiname; //朋友圈POI的名字,可能为空
$Content = $Event . "---" . $EventKey . "---" . $SendLocationInfo . "---" . $Location_X . "---" . $Location_Y . "---" . $Scale . "---" . $Label . "---" . $Poiname . "---location_select";
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'qualification_verify_success'://资质认证成功(此时立即获得接口权限)
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'qualification_verify_fail'://资质认证失败
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'naming_verify_success'://名称认证成功(即命名成功)
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'naming_verify_fail'://名称认证失败(这时虽然客户端不打勾,但仍有接口权限)
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'annual_renew'://年审通知
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'verify_expired'://认证过期失效通知
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'SCAN'://扫描带参数二维码事件
$EventKey = $postObj->EventKey; //事件KEY值,qrscene_为前缀,后面为二维码的参数值
$Ticket = $postObj->Ticket; //二维码的ticket,可用来换取二维码图片
$Content = '你点击了菜单,携带的KEY为: ' . $EventKey . "\n Ticket为:" . $Ticket;
$this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'LOCATION'://上报地理位置事件;提供位置信息按钮打开,每次进入客户端都会发送位置给公众账号
$Latitude = $postObj->Latitude; //地理位置纬度
$Longitude = $postObj->Longitude; //地理位置经度
$Precision = $postObj->Precision; //地理位置精度
//location_1
$Content = "\n 你的上报地理位置为: \n 维度:" . $Latitude . "\n 经度:" . $Longitude . "\n 精度:" . $Precision;
//file_put_contents('./location.php',$Content,FILE_APPEND);
if (!file_exists('./location.php')) {//地理位置文件不存在
$Content.= "①点击公众账号资料!\r ②打开提供位置信息,点击确定!\r ③退出然后重新进入就OK啦!~";
}
$this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'CLICK'://自定义菜单事件
$EventKey = $postObj->EventKey; //事件KEY值,qrscene_为前缀,后面为二维码的参数值
switch ($EventKey) {
case 'CLICK_UNBD'://解除绑定
$Content = '解除绑定成功!';
break;
case 'CLICK_1_1':
$Content = "查看我申请的淘宝任务信息,请点击这里
\n查看我申请的新浪任务信息,请点击这里
\n查看我申请的百度任务信息,请点击这里";
break;
default:
$Content = '你点击了菜单,携带的KEY为: ' . $EventKey;
}
echo $this->_sendTextMsg($FromUserName, $ToUserName, $Content);
break;
case 'VIEW'://点击菜单跳转事件
//Event类型为VIEW时,$EventKey为菜单设置的跳转url
$this->_sendTextMsg($FromUserName, $ToUserName, $EventKey);
break;
}
}
############################################################################################################----response
// 创建标签
//标签名(30个字符以内)
public function setTags($data) {
if (!empty($data['tag']['name'])) {//创建标签
$url = 'https://api.weixin.qq.com/cgi-bin/tags/create?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->tag->id ? $obj : $obj->errmsg;
}
}
//更新标签
//标签名(30个字符以内)
public function upTags($data) {
if (!empty($data['tag']['id']) && !empty($data['tag']['name'])) {//更新标签
$url = 'https://api.weixin.qq.com/cgi-bin/tags/update?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '更新失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '更新成功!成功信息为:' . $obj->errmsg;
}
}
//删除标签
//标签名(30个字符以内)
public function delTags($data) {
if (!empty($data['tag']['id'])) {//删除标签
$url = 'https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '删除失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '删除成功!成功信息为:' . $obj->errmsg;
}
}
//获取标签
public function getTags() {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/get?access_token=' . $this->getAccessToken();
$data = func_send_request($url);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj;
}
//获取标签下粉丝列表
public function getTagsUser($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '获取标签下粉丝列表失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : $obj;
}
//批量为用户打标签
public function setUserTags($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '批量为用户打标签失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '批量为用户打标签成功!成功信息为:' . $obj->errmsg;
}
//批量为用户去标签
public function delUserTags($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
// file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '批量为用户去标签失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '批量为用户去标签成功!成功信息为:' . $obj->errmsg;
}
//获取用户身上的标签列表
public function getUserTags($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
// file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '批量为用户去标签失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : $obj->tagid_list;
}
//获取公众号的黑名单列表
public function getBlackList($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/members/getblacklist?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
//file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '获取公众号的黑名单列表失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : $obj;
}
//拉黑用户
public function setBlackList($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchblacklist?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
// file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '拉黑用户失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '拉黑用户成功!成功信息为:' . $obj->errmsg;
}
//取消拉黑用户
public function delBlackList($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/tags/members/batchunblacklist?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$data = func_send_request($url, $data);
// file_put_contents('tags.php',$data);
$obj = json_decode($data);
return $obj->errcode ? '取消拉黑用户失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '取消拉黑用户成功!成功信息为:' . $obj->errmsg;
}
//临时二维码请求说明
//expire_seconds:该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。
//action_name:二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值
//action_info:二维码详细信息
//scene_id:场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
//scene_str:场景值ID(字符串形式的ID),字符串类型,长度限制为1到64
//临时二维码int
//{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
//临时二维码str
// {"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
//永久二维码int
//{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
//永久二维码str
//{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
public function setQrcode($data, $type = 0, $expire_seconds = 604800) {
switch ($type) {
case 0:
default:
$arr['expire_seconds'] = $expire_seconds;
$arr['action_name'] = 'QR_SCENE';
$arr['action_info'] = array('scene' => array('scene_id' => $data));
break;
case 1:
$arr['expire_seconds'] = $expire_seconds;
$arr['action_name'] = 'QR_STR_SCENE';
$arr['action_info'] = array('scene' => array('scene_str' => $data));
break;
case 2:
$arr['action_name'] = 'QR_LIMIT_SCENE';
$arr['action_info'] = array('scene' => array('scene_id' => $data));
break;
case 3:
$arr['action_name'] = 'QR_LIMIT_STR_SCENE';
$arr['action_info'] = array('scene' => array('scene_str' => $data));
break;
}
$url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $this->getAccessToken();
$data = json_encode($arr);
$data = func_send_request($url, $data);
$obj = json_decode($data);
return $obj;
}
/*
* 通过ticket换取二维码
* HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
* 提醒:TICKET记得进行UrlEncode
* @param $content
* @param $file './Public/images/'.time().'.jpg'
* @param $type
* @param $expire
* */
public function getQrcode($ticket, $file = false) {
$url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . urlencode($ticket);
$res = file_get_contents($url);
if ($file) {
file_put_contents($file, $res);
} else {
header('Content-Type: image/jpeg');
echo $res;
}
}
/*
* 获取用户增减数据
* 获取累计用户数据
* @param $begin_date 获取数据的起始日期,begin_date和end_date的差值需小于“最大时间跨度”(比如最大时间跨度为1时,begin_date和end_date的差值只能为0,才能小于1),否则会报错
* @param $end_date 获取数据的结束日期,end_date允许设置的最大值为昨日
最大时间跨度是指一次接口调用时最大可获取数据的时间范围,如最大时间跨度为7是指最多一次性获取7天的数据。access_token的实际值请通过“获取access_token”来获取。
ref_date 数据的日期
user_source 用户的渠道,数值代表的含义如下:
0代表其他合计 1代表公众号搜索 17代表名片分享 30代表扫描二维码 43代表图文页右上角菜单 51代表支付后关注(在支付完成页) 57代表图文页内公众号名称 75代表公众号文章广告 78代表朋友圈广告
new_user 新增的用户数量
cancel_user 取消关注的用户数量,new_user减去cancel_user即为净增用户数量
cumulate_user 总用户量
* return getusersummary getusercumulate
$wechat->getUserSC($type='getusersummary',array('begin_date'=>'','end_date'=>''));
$wechat->getUserSC($type='getusercumulate',array('begin_date'=>'','end_date'=>''));
*/
public function getUserSC($data = array(), $type = 0) {
$type = $type ? 'getusersummary' : 'getusercumulate';
$url = 'https://api.weixin.qq.com/datacube/' . $type . '?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$res = json_decode($res);
return isset($res->errcode) ? $res->errmsg : $res->list;
}
//图文分享数据接口
public function getArticleSC($data = array(), $type = 0) {
switch ($type) {
case 0:
default:
$type = 'getarticlesummary'; //获取图文群发每日数据 1day
break;
case 1:
$type = 'getarticletotal'; //获取图文群发总数据 1day
break;
case 2:
$type = 'getuserread'; //获取图文统计数据 3day
break;
case 3:
$type = 'getuserreadhour'; //获取图文统计分时数据 1day
break;
case 4:
$type = 'getusershare'; //获取图文分享转发数据 7day
break;
case 5:
$type = 'getusersharehour'; //获取图文分享转发分时数据 1day
break;
}
$url = 'https://api.weixin.qq.com/datacube/' . $type . '?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$res = json_decode($res);
return isset($res->errcode) ? $res->errmsg : $res->list;
}
//消息分析数据接口
public function getUpStremMsg($data, $type = 0) {
switch ($type) {
case 0:
default:
$type = 'getupstreammsg'; //获取消息发送概况数据 7day
break;
case 1:
$type = 'getupstreammsghour'; //获取消息分送分时数据 1day
break;
case 2:
$type = 'getupstreammsgweek'; //获取消息发送周数据 30day
break;
case 3:
$type = 'getupstreammsgmonth'; //获取消息发送月数据 30day
break;
case 4:
$type = 'getupstreammsgdist'; //获取消息发送分布数据 15day
break;
case 5:
$type = 'getupstreammsgdistweek'; //获取消息发送分布周数据 30day
break;
case 6:
$type = 'getupstreammsgdistmonth'; //获取消息发送分布月数据 30day
break;
}
$url = 'https://api.weixin.qq.com/datacube/' . $type . '?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$res = json_decode($res);
return isset($res->errcode) ? $res->errmsg : $res->list;
}
//接口分析数据接口
public function getInterface($data, $type = 0) {
switch ($type) {
case 0:
default:
$type = 'getinterfacesummary'; //获取接口分析数据 30day
break;
case 1:
$type = 'getinterfacesummaryhour'; //获取接口分析分时数据 1day
break;
}
$url = 'https://api.weixin.qq.com/datacube/' . $type . '?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$res = json_decode($res);
return isset($res->errcode) ? $res->errmsg : $res->list;
}
/*
* 用户管理,创建分组
* @param $title 创建的分组名称
* @return bool true false
$wechat->setUserGroup($data = array('group'=>array('name'=>'groupname')));
*/
public function setUserGroup($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/create?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$result = $this->_requestData($url, $data, true);
$result = json_decode($result);
return $result->group->id ? true : false;
}
/*
* 用户管理,查询所有分组
* return GET方式获取数据
* groups 公众平台分组信息列表
* id 分组id,由微信分配
* name 分组名字,UTF8编码
* count 分组内用户数量
$wechat->getUserGroup();
*/
public function getUserGroup() {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/get?access_token=' . $this->getAccessToken();
$result = $this->_requestData($url);
$result = json_decode($result);
return empty($result->groups) ? array() : $result->groups;
}
/*
* 查询用户所在分组
* @param $openID 用户OpenID
* return GroupID 用户分组ID
* $wechat->getUserGroupIDbyOpenID($data = array('openid'=>'oLjeBuCC9qrbqSSQnIaTmzUxJhIE'));
*/
public function getUserGroupIDbyOpenID($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/getid?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$result = $this->_requestData($url, $data, true);
$result = json_decode($result);
return $result->groupid;
}
/*
* 修改分组名
* @param $id 分组ID 由微信分配
* @param $name 分组名称(30个字符以内)
* return bool ture false
$wechat->resetUserGroup($data = array('group'=>array('id'=>116,'name'=>'helper')));
*/
public function resetUserGroup($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/update?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$result = $this->_requestData($url, $data, true);
$result = json_decode($result);
return $result->errcode ? false : true;
}
/*
* 移动用户分组
* @param $openid 用户唯一标示
* @param $to_groupid 移到该分组ID
* @param $openid_list 用户唯一标识符openid的列表(size不能超过50)
* @param $to_groupid 移到该分组ID
$wechat->moveUserGroup($data = array('openid'=>'oLjeBuCC9qrbqSSQnIaTmzUxJhIE','to_groupid'=>0));
$wechat->moveUserGroup($data = array('openid_list'=>array('oLjeBuH1k2aaz3MxdYq8krdTJCqs','oLjeBuM1HEGfUsL3mMxOergWhW0U'),'to_groupid'=>0));
*/
public function moveUserGroup($data = array()) {
if (isset($data['openid_list']) && is_array($data['openid_list'])) {//批量移动用户分组
$url = 'https://api.weixin.qq.com/cgi-bin/groups/members/batchupdate?access_token=' . $this->getAccessToken();
} else {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=' . $this->getAccessToken();
}
$data = json_encode($data);
$result = $this->_requestData($url, $data, true);
$result = json_decode($result);
return $result->errcode ? false : true;
}
/*
* 删除分组
* @param $id 分组ID
* return bool ture false
$wechat->delUserGroup($data = array('group'=>array('id'=>116));
*/
public function delUserGroup($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/groups/delete?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$result = $this->_requestData($url, $data, true);
$result = json_decode($result);
return $result->errcode ? false : true;
}
/*
* 设置备注名
* @param $openid 用户标识
* @param $remark 新的备注名,长度必须小于30字符
* return bool ture false
$wechat->setRemark($data = array('openid'=>'oLjeBuCC9qrbqSSQnIaTmzUxJhIE','remark'=>'备注名称'));
*/
public function setRemark($data) {
$url = 'https://api.weixin.qq.com/cgi-bin/user/info/updateremark?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$obj = json_decode($res);
return ($obj->errcode ? '设置备注名失败!失败信息为:' : '设置备注名成功!成功信息为:' ) . $obj->errmsg;
}
/*
* 获取用户列表
* @param $next_openid 第一个拉取的OPENID,不填默认从头开始拉取
* total 关注该公众账号的总用户数
* count 拉取的OPENID个数,最大值为10000
* data 列表数据,OPENID的列表
* next_openid 拉取列表的最后一个用户的OPENID
*/
public function getUserList($next_openid = '') {
$url = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token=' . $this->getAccessToken() . '&next_openid=' . $next_openid;
$res = func_send_request($url);
return json_decode($res);
}
/*
* 获取用户基本信息(包括UnionID机制)
* @param $openid 用户标识
* @param $lang zh_CN返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
* return bool ture false
subscribe 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
openid 用户的标识,对当前公众号唯一
nickname 用户的昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
city 用户所在城市
country 用户所在国家
province 用户所在省份
language 用户的语言,简体中文为zh_CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
subscribe_time 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)
remark 公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
groupid 用户所在的分组ID
* $wechat->getUserInfo($data = array('openid'=>'oLjeBuCC9qrbqSSQnIaTmzUxJhIE','lang'=>'zh_CN'));//单独获取
* $wechat->getUserInfo($data =
array('user_list'=>
array(
array('openid'=>'oLjeBuCC9qrbqSSQnIaTmzUxJhIE','lang'=>'zh_CN'),
array('openid'=>'oLjeBuH1k2aaz3MxdYq8krdTJCqs','lang'=>'zh_CN'))
)
);//批量获取
*/
public function getUserInfo($data) {
if (isset($data['user_list']) && is_array($data['user_list'])) {//批量获取用户
$url = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
} else { //单独获取
$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' . $this->getAccessToken() . '&openid=' . $data['openid'] . '&lang=' . $data['lang'];
$res = func_send_request($url);
}
$obj = json_decode($res);
return $obj;
}
/*
* 长链接转短链接接口
* @param $action 此处填long2short,代表长链接转短链接
* @param $long_url 需要转换的长链接,支持http://、https://、weixin://wxpay 格式的url
* return $short_url or false
* 参数:array('action'=>'long2short','long_url'=>'http://www.baidu.com/');
*/
public function getShortUrl($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/shorturl?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$obj = json_decode($res);
return $obj->errcode ? '转换短链接失败!失败信息为:' . $obj->errmsg : $obj->short_url;
}
//发送语义理解请求
public function sendSemantic($data = array()) {
$url = 'https://api.weixin.qq.com/semantic/semproxy/search?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$obj = json_decode($res);
return $obj->errcode ? $obj->errmsg : $obj;
}
//获取素材总数,调用该接口需https协议
//1.永久素材的总数,也会计算公众平台官网素材管理中的素材
//2.图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000
public function getMaterialCount() {
$url = 'https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=' . $this->getAccessToken();
$res = func_send_request($url);
$obj = json_decode($res);
return $obj->errcode ? $obj->errmsg : $obj;
}
//获取素材列表,调用该接口需https协议
//1、获取永久素材的列表,也包含公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材
//2、临时素材无法通过本接口获取
//type:素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
//offset:从全部素材的该偏移位置开始返回,0表示从第一个素材 返回
//count:返回素材的数量,取值在1到20之间
public function getMaterialList($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=' . $this->getAccessToken();
$data = json_encode($data);
$res = func_send_request($url, $data);
$obj = json_decode($res);
return $obj->errcode ? $obj->errmsg : $obj;
}
/**
* 上传临时素材
* @demo https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
* @access private 私有方法
* @param $file 文件名
* @param $type 类型(图片:image;语音:voice;视频:video;缩略图:thumb)
* @param $media form-data中媒体文件标识,有filename、filelength、content-type等信息
* 图片(image): 128K,支持JPG格式
* 语音(voice):256K,播放长度不超过60s,支持AMR\MP3格式
* 视频(video):1MB,支持MP4格式
* 缩略图(thumb):64KB,支持JPG格式
* 图片等只保存三天,三天后失效
* @param unknown_type $file
* @param unknown_type $type
* @return unknown
* @return {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
*/
public function setUpLoadFile($file, $type) {
if (!in_array($type, array('image', 'voice', 'video', 'thumb')))
return FALSE;
$ch = curl_init();
//加@符号curl就会把它当成是文件上传处理
$data = array('img' => '@' . $file);
curl_setopt($ch, CURLOPT_URL, 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $this->getAccessToken() . '&type=' . $type);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
if (curl_errno($ch)) {
return FALSE;
}
curl_close($ch);
$result = json_decode($result);
if (isset($result->media_id))
return $result->media_id;
return FALSE;
}
//获取上传的图片
public function getUpLoadImage($media_id, $ext = '.jpeg') {
$url = 'https://api.weixin.qq.com/cgi-bin/media/get?access_token=' . $this->getAccessToken() . '&media_id=' . $media_id;
$res = func_send_request($url);
$file_name = $media_id . $ext;
$file = file_put_contents($file_name, $res);
return $file_name;
}
//上传永久素材
public function setUpLoadFiles($file, $type = 'image') {
}
//新增永久图文素材
public function setUpLoadArticles($data = array()) {
$url = 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=' . $this->getAccessToken();
$data = '{
"articles": [{
"title": "hello,world!",
"thumb_media_id": "xxxxxxxx!",
"author": "test",
"digest": "hello,world!",
"show_cover_pic":0,
"content": "hello,world!",
"content_source_url": "https://api.weixin.qq.com/cgi-bin/media/upload?access_token="
},
]
}';
$res = func_send_request($url, $data);
$obj = json_decode($res);
return $obj->media_id;
}
############################################################################################################
############################################################################################################
/**
* 获取access_token
* @access public
* @method GET
* @param $appid 第三方用户唯一凭证
* @param $appsecret 第三方用户唯一凭证密钥
* @return access_token 获取到的凭证
* @$this->_access_token 存储token的临时文件
* @return expires_in 凭证有效时间,单位:秒(7200)
* $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
*/
public function getAccessToken() {
if (file_exists($this->_access_token)) {
$str = file_get_contents($this->_access_token);
$obj = unserialize($str);
if ((time() - filemtime($this->_access_token)) < $obj->expires_in) {
return $obj->access_token;
exit; //存在有效access_token直接返回
}
}
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->_appID}&secret={$this->_appsecret}";
$res = func_send_request($url);
$obj = json_decode($res);
if ($obj->errcode) {
return "获取 access_token 失败,返回错误信息为:" . $obj->errmsg;
} else {
file_put_contents($this->_access_token, serialize($obj));
return $obj->access_token;
}
}
/**
* 获取菜单
* @access public
* @param $access_token
* @return
*/
public function getMenu() {
$url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $this->getAccessToken();
$res = func_send_request($url);
$obj = json_decode($res);
return $obj->errcode ? "获取微信菜单失败,返回错误信息为:" . $obj->errmsg : "获取微信菜单成功,返回成功信息为:" . json_encode($obj->menu);
}
/**
* 创建菜单
* @access public
* @param $access_token
* @return
*/
public function setMenu($data) {
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $this->getAccessToken();
$res = func_send_request($url, $data);
$obj = json_decode($res);
return $obj->errcode ? "设置微信菜单失败,返回错误信息为:" . $obj->errmsg : "设置微信菜单成功,返回成功信息为:" . $obj->errmsg;
}
/*
* 自定义菜单删除接口
* GET方式:https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
* @param $access_token 公众号的access_token
* return {"errcode":0,"errmsg":"ok"}
*/
public function delMenu() {
$url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $this->getAccessToken();
$res = func_send_request($url);
$obj = json_decode($res);
return $obj->errcode ? '删除微信菜单失败!错误代码为:' . $obj->errcode . ',错误信息为:' . $obj->errmsg : '删除微信菜单成功!成功信息为:' . $obj->errmsg;
}
/*
* 获取微信服务器IP地址
* GET方式:https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
* @param $access_token 公众号的access_token
* return ip_list {"ip_list":["127.0.0.1","127.0.0.1"]}
*/
public function getWeChatIp() {
$url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=" . $this->getAccessToken();
$res = func_send_request($url);
$res = json_decode($res);
return $res->ip_list;
}
}
//发送HTTP request请求get or post
function func_send_request($url, $data, $refererUrl = '', $method = 'POST', $contentType = 'application/json', $timeout = 30, $proxy = false) {
$ch = null;
if ('POST' === strtoupper($method)) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if ($refererUrl) {
curl_setopt($ch, CURLOPT_REFERER, $refererUrl);
}
if ($contentType) {
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:' . $contentType));
}
if (is_string($data)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
}
} else if ('GET' === strtoupper($method)) {
if (is_string($data)) {
$real_url = $url . (strpos($url, '?') === false ? '?' : '') . $data;
} else {
$real_url = $url . (strpos($url, '?') === false ? '?' : '') . http_build_query($data);
}
$ch = curl_init($real_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:' . $contentType));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if ($refererUrl) {
curl_setopt($ch, CURLOPT_REFERER, $refererUrl);
}
} else {
$args = func_get_args();
return false;
}
if ($proxy) {
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
$ret = curl_exec($ch);
$info = curl_getinfo($ch);
$contents = array(
'httpInfo' => array(
'send' => $data,
'url' => $url,
'ret' => $ret,
'http' => $info,
)
);
curl_close($ch);
return $ret;
}