先把源码类发出来

<?php
/**自己封装 微信 开发api
*/
header('Content-type: text/html; charset=utf-8');#设置头信息
class zhphpWeixinApi{//定义属性private $userPostData; #微信反馈给平台的数据集private $fromUserName; #发微信用户姓名private $toUserName; #接受微信用户姓名private $keyword; #接受用户发的微信信息private $createTime; #创建时间private $requestId;#获取接收消息编号private $msgType; #用户发的微信的类型public $token; #api tokenprivate $appid;#开发者 idprivate $appSecret;# 开发者的应用密钥private $access_token;#微信平台返回的access_tokenprivate $expires_in=0;#权限的期限public  $weixinConfig=array();#微信全局配置public  $debug=false;private $saveFilePath; //缓存文件保存路径public  $oauthAccessToken; ##第三方网页授权accecctokenpublic  $oauthOpenId;##授权后的用户id/**$wx_msgType为数组,可以依据账号的权限补充*/private  $wx_msgType=array('text',#文本消息内容类型'image',#图片消息内容类型'voice',#语音消息内容类型'video',#视频消息内容类型'link',#链接消息内容类型'location',#本地地理位置消息内容类型'event',#事件消息内容类型'subscribe',#是否为普通关注事件'unsubscribe',#是否为取消关注事件'music',#音乐消息内容类型'news',#新闻消息内容
        );/**配置文件$config=array('token'=>'','appid'=>'开发者 id ','appSecret'=>'应用密钥')*/public function setConfig($config){if( ! empty( $config ) ){$this->weixinConfig=$config;}elseif( empty($config) && ! empty($this->weixinConfig) ){$config=$this->weixinConfig;}#配置参数属性,这里使用 isset进行了判断,目的是为后续程序判断提供数据$this->token=isset($config['token'])?$config['token']:null;$this->appid=isset($config['appid'])?$config['appid']:null;$this->appSecret=isset($config['appSecret'])?$config['appSecret']:null;}/**获取config*/public function getConfig(){return $this->weixinConfig;}/**检验 token*/public function  validToken(){if(empty($this->token)){  //如果 不存在 token  就抛出异常return false;}else{if($this->checkSignature()){//检查签名,签名通过之后,就需要处理用户请求的数据return  true;}else{return  false;}}}/**检查签名*/private function checkSignature(){try{ # try{.....}catch{.....} 捕捉语句异常$signature = isset($_GET["signature"])?$_GET["signature"]:null;//判断腾讯微信返回的参数 是否存在 $timestamp = isset($_GET["timestamp"])?$_GET["timestamp"]:null;//如果存在 就返回 否则 就 返回 null$nonce = isset($_GET["nonce"])?$_GET["nonce"]:null;######下面的代码是--微信官方提供代码$tmpArr = array($this->token, $timestamp, $nonce);sort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}######上面的代码是--微信官方提供代码  }catch(Exception $e){echo $e->getMessage();exit();}}/**处理用户的请求*/private function handleUserRequest(){if(isset($_GET['echostr'])){ //腾讯微信官方返回的字符串  如果是存在 echostr 变量 就表明 是微信的返回 我们直接输出就可以了$echoStr = $_GET["echostr"];echo $echoStr;exit;}else{//否则 就是用户自己回复 的$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//用户所有的回复,腾讯微信都是放在这个变量的if (!empty($postStr)){libxml_disable_entity_loader(true); //由于微信返回的数据 都是以xml 的格式,所以需要将xml 格式数据转换成 对象操作$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$this->fromUserName=$postObj->FromUserName; //得到发送者 姓名  一般为微信人的账号$this->toUserName=$postObj->ToUserName;//得到 接受者的 姓名  获取请求中的收信人OpenId,一般为公众账号自身$this->msgType=trim($postObj->MsgType); //得到 用户发的数据的类型$this->keyword=addslashes(trim($postObj->Content));//得到 发送者 发送的内容$this->createTime=date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']);//当前的时间,我们这里是服务器的时间$this->requestId=$postObj->MsgId;//MsgId  获取接收消息编号$this->userPostData=$postObj;//$this->responseMessage('text','返回:'.$this->msgType);
            }}}/**获取用户的数据对象集*/public function getUserPostData(){return $this->userPostData;}/**检查类型 方法依据不同的数据类型调用不同的模板判断一下 微信反馈回来的数据类型 是否存在于 wx_msgType 数组中*/private function isWeixinMsgType(){if(in_array($this->msgType,$this->wx_msgType)){return true;}else{return false;}}/**文本会话*/private function textMessage($callData){if(is_null($callData)){return 'null';}$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>5</FuncFlag></xml>";if(is_string($callData)){$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'text',$callData);            }else if(is_array($callData)){$content='';foreach($callData as $key => $value){$content.=$value;}$resultStr= sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'text',$content);}return $resultStr;}/**图片会话*/private function imageMessage($callData){if(is_null($callData)){return 'null';}$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'image', $callData); return $resultStr;}/**语音会话*/private function voiceMessage($callData){if(is_null($callData)){return 'null';}$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Voice><MediaId><![CDATA[%s]]></MediaId></Voice></xml>";$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'voice',$callData['MediaId']);return $resultStr;}/**视频会话*/private function videoMessage($callData){if(is_null($callData)){return 'null';}$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Video><MediaId><![CDATA[%s]]></MediaId><ThumbMediaId><![CDATA[%s]]></ThumbMediaId><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description></Video></xml>";$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'video',$callData['MediaId'],$callData['ThumbMediaId'],$callData['Title'],$callData['Description']);return $resultStr;}/**音乐会话*/private function musicMessage($callData){ //依据文本 直接调用if(is_null($callData)){return 'null';}$textTpl = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl></Music></xml>';$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'music',$callData['Title'],$callData['Description'],$callData['MusicUrl'],$callData['HQMusicUrl']);return $resultStr;}/**回复图文消息$items 必须是数组 必须是二维数组$items=array(array('Title'=>'','Description'=>'','PicUrl'=>'','Url'=>''))*/private function newsMessage($items){if(is_null($items)){return 'null';}//##公共部分 图文公共部分$textTpl = '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount>%d</ArticleCount><Articles>%s</Articles></xml>';//##新闻列表部分模板$itemTpl = '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>';$articles = '';$count=0;if(is_array($items)){$level=$this->arrayLevel($items);//判断数组的维度if($level == 1){ //是一维数组的情况下$articles= sprintf($itemTpl, $items['Title'], $items['Description'], $items['PicUrl'], $items['Url']); $count=1;}else{foreach($items as $key=>$item){if(is_array($item)){$articles.= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);}}}$count=count($items);}$resultStr = sprintf($textTpl,$this->fromUserName,$this->toUserName,$this->createTime,'news',$count, $articles);return $resultStr;}/**debug调试*/public function debug($data){echo '<pre>';print_r($data);echo '</pre>';}/**得到数组的维度*/private function arrayLevel($vDim){if(!is_array($vDim)){return 0; }else{ $max1 = 0; foreach($vDim as $item1){ $t1 = $this->arrayLevel($item1); if( $t1 > $max1) {$max1 = $t1; }} return $max1 + 1; } }/**订阅号需要初始化*/public function  weixinBaseApiMessage($args=array()){$this->setConfig($args);//检查配置文件if(empty($this->weixinConfig)){return false;}$this->handleUserRequest(); //处理用户 请求return true;}public function weixinHighApiMessage($args=array()){$this->setConfig($args);//检查配置文件if(empty($this->weixinConfig)){return false;}return true;}/**通过同的类型调用不同的微信模板回复微信内容信息$wxmsgType 参数是 数据类型 微信规定的类型$callData  参数是  数据库查询出来的数据或者指定数据小机器人 被动回复 */public function responseMessage($wxmsgType,$callData=''){// if($this->isWeixinMsgType()){$method=$wxmsgType.'Message';//类型方法组装$CallResultData=$this->$method($callData);//把程序的数据传递给模板,并返回数据格式if (!headers_sent()){//判断是否有发送过头信息,如果没有就发送,并输出内容header('Content-Type: application/xml; charset=utf-8');echo $CallResultData;exit;} //}
     }/**事件消息内容类型*/public function responseEventMessage($message=''){$content = "";$event=$this->userPostData->Event;if($event == 'subscribe'){return  $content = $message;}elseif($event == 'unsubscribe'){return  $content = "取消关注";}elseif($event == 'scan' || $event=='SCAN'){return $this->getUserEventScanRequest();}elseif($event == 'click' || $event == 'CLICK'){switch ($this->userPostData->EventKey){case "company":$content =$message.'为你提供服务!';break;default:$content =$this->getUsertEventClickRequest();//返回点击的字符串break;}return $content;}elseif($event == 'location' || $event=='LOCATION'){return $this->getUserLocationRequest();//本地地理位置分享后 返回x 、y坐标,并返回经度和维度}elseif($event == 'view' || $event == 'VIEW'){return $this->userPostData->EventKey; //返回跳转的链接}elseif($event == 'masssendjobfinish' || $event == 'MASSSENDJOBFINISH'){return $this->getUserMessageInfo();//返回会话的所有信息}else{return "receive a new event: ".$$this->userPostData->Event;  }return false;}/**获取微信端 返回的数据类型*/public function  getUserMsgType(){return strval($this->msgType);}/**获取用户发送信息的时间*/public function getUserSendTime(){return $this->createTime;}/**获取用户的微信id*/public function getUserWxId(){return  strval($this->fromUserName);}/**获取到平台的微信id*/public function getPlatformId(){return strval($this->toUserName);}/**获取用户在客户端返回的数据,文本数据*/public function getUserTextRequest(){return  empty($this->keyword)?null:strval($this->keyword);}/**获取接收消息编号,微信平台接收的第几条信息*/public  function getUserRequestId(){return strval($this->requestId);}/**获取图片信息的内容*/public function getUserImageRequest(){$image = array(); $image['PicUrl'] = strval($this->userPostData->PicUrl);//图片url地址$image['MediaId'] = strval($this->userPostData->MediaId);//图片在微信公众平台下的id号return $image; }/**获取语音信息的内容*/public function getUserVoiceRequest(){$voice = array();$voice['MediaId'] = $this->userPostData->MediaId;//语音ID$voice['Format'] = $this->userPostData->Format;//语音格式$voice['MsgId']=$this->userPostData->MsgId;//idif (isset($this->userPostData->Recognition) && !empty($this->userPostData->Recognition)){$voice['Recognition'] = $this->userPostData->Recognition;//语音的内容;;你刚才说的是: xxxxxxxx
        }return $voice;}/**获取视频信息的内容*/public function getUserVideoRequest(){$video = array();$video['MediaId'] =$this->userPostData->MediaId;$video['ThumbMediaId'] = $this->userPostData->ThumbMediaId;return $video;}/**获取音乐消息内容*/public function getUserMusicRequest(){$music=array();$music['Title'] =$this->userPostData->Title;//标题$music['Description']=$this->userPostData->Description;//简介$music['MusicUrl']=$this->userPostData->MusicUrl;//音乐地址$music['HQMusicUrl']=$this->userPostData->HQMusicUrl;//高品质音乐地址return $music;}/**获取本地地理位置信息内容*/public function getUserLocationRequest(){$location = array();$location['Location_X'] = strval($this->userPostData->Location_X);//本地地理位置 x坐标$location['Location_Y'] = strval($this->userPostData->Location_Y);//本地地理位置 Y 坐标$location['Scale'] = strval($this->userPostData->Scale);//缩放级别为$location['Label'] = strval($this->userPostData->Label);//位置为$location['Latitude']=$this->userPostData->Latitude;//维度$location['Longitude']=$this->userPostData->Longitude;//经度return $location;  }/**获取链接信息的内容*/public function getUserLinkRequest(){ //数据以文本方式返回 在程序调用端 调用 text格式输出$link = array();$link['Title'] = strval($this->userPostData->Title);//标题$link['Description'] = strval($this->userPostData->Description);//简介$link['Url'] = strval($this->userPostData->Url);//链接地址return $link;  }/**二维码扫描事件内容*/public function getUserEventScanRequest(){$info = array();$info['EventKey'] = $this->userPostData->EventKey;$info['Ticket'] = $this->userPostData->Ticket;    $info['Scene_Id'] = str_replace('qrscene_', '', $this->userPostData->EventKey);return $info;}/**上报地理位置事件内容*/public function getUserEventLocationRequest(){$location = array();$location['Latitude'] = $this->userPostData->Latitude;$location['Longitude'] =$this->userPostData->Longitude;return $location;}/**获取菜单点击事件内容*/public function getUsertEventClickRequest(){return strval($this->userPostData->EventKey);}/**获取微信会话状态info*/public function  getUserMessageInfo(){$info=array();$info['MsgID']=$this->userPostData->MsgID;//消息id$info['Status']=$this->userPostData->Status;//消息结果状态$info['TotalCount']=$this->userPostData->TotalCount;//平台的粉丝数量$info['FilterCount']=$this->userPostData->FilterCount;//过滤$info['SentCount']=$this->userPostData->SentCount;//发送成功信息$info['ErrorCount']=$this->userPostData->ErrorCount;//发送错误信息return $info;}/**向第三方请求数据,并返回结果*/public  function relayPart3($url, $rawData){$headers = array("Content-Type: text/xml; charset=utf-8");$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $rawData);$output = curl_exec($ch);curl_close($ch);return $output;}/**字节转Emoji表情"中国:".$this->bytes_to_emoji(0x1F1E8).$this->bytes_to_emoji(0x1F1F3)."\n仙人掌:".$this->bytes_to_emoji(0x1F335);*/public function bytes_to_emoji($cp){if ($cp > 0x10000){       # 4 bytesreturn chr(0xF0 | (($cp & 0x1C0000) >> 18)).chr(0x80 | (($cp & 0x3F000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));}else if ($cp > 0x800){   # 3 bytesreturn chr(0xE0 | (($cp & 0xF000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));}else if ($cp > 0x80){    # 2 bytesreturn chr(0xC0 | (($cp & 0x7C0) >> 6)).chr(0x80 | ($cp & 0x3F));}else{                    # 1 bytereturn chr($cp);}}#############################################################高级接口################################/**微信api 接口地址*/private  $weixinApiLinks = array('message' => "https://api.weixin.qq.com/cgi-bin/message/custom/send?",##发送客服消息'group_create' => "https://api.weixin.qq.com/cgi-bin/groups/create?",##创建分组'group_get' => "https://api.weixin.qq.com/cgi-bin/groups/get?",##查询分组'group_getid' => "https://api.weixin.qq.com/cgi-bin/groups/getid?",##查询某个用户在某个分组里面'group_rename' => "https://api.weixin.qq.com/cgi-bin/groups/update?",##修改分组名'group_move' => "https://api.weixin.qq.com/cgi-bin/groups/members/update?",## 移动用户分组'user_info' => "https://api.weixin.qq.com/cgi-bin/user/info?",###获取用户基本信息'user_get' => 'https://api.weixin.qq.com/cgi-bin/user/get?',##获取关注者列表'menu_create' => 'https://api.weixin.qq.com/cgi-bin/menu/create?',##自定义菜单创建'menu_get' => 'https://api.weixin.qq.com/cgi-bin/menu/get?',##自定义菜单查询'menu_delete' => 'https://api.weixin.qq.com/cgi-bin/menu/delete?',##自定义菜单删除'qrcode' => 'https://api.weixin.qq.com/cgi-bin/qrcode/create?',##创建二维码ticket'showqrcode' => 'https://mp.weixin.qq.com/cgi-bin/showqrcode?',##通过ticket换取二维码'media_download' => 'http://file.api.weixin.qq.com/cgi-bin/media/get?','media_upload' => 'http://file.api.weixin.qq.com/cgi-bin/media/upload?',##上传媒体接口'oauth_code' => 'https://open.weixin.qq.com/connect/oauth2/authorize?',##微信oauth登陆获取code'oauth_access_token' => 'https://api.weixin.qq.com/sns/oauth2/access_token?',##微信oauth登陆通过code换取网页授权access_token'oauth_refresh' => 'https://api.weixin.qq.com/sns/oauth2/refresh_token?',##微信oauth登陆刷新access_token(如果需要)'oauth_userinfo' => 'https://api.weixin.qq.com/sns/userinfo?',##微信oauth登陆拉取用户信息(需scope为 snsapi_userinfo)'api_prefix'=>'https://api.weixin.qq.com/cgi-bin?',##请求api前缀'message_template'=>'https://api.weixin.qq.com/cgi-bin/message/template/send?',##模板发送消息接口'message_mass'=>'https://api.weixin.qq.com/cgi-bin/message/mass/send?',##群发消息'upload_news'=>'https://api.weixin.qq.com/cgi-bin/media/uploadnews?',##上传图片素材
    );/**curl 数据提交*/public function curl_post_https($url='', $postdata='',$options=FALSE){$curl = curl_init();// 启动一个CURL会话curl_setopt($curl, CURLOPT_URL, $url);//要访问的地址curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);//对认证证书来源的检查curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);//从证书中检查SSL加密算法是否存在curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);//模拟用户使用的浏览器curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);//使用自动跳转curl_setopt($curl, CURLOPT_AUTOREFERER, 1);//自动设置Refererif(!empty($postdata)){curl_setopt($curl, CURLOPT_POST, 1);//发送一个常规的Post请求if(is_array($postdata)){curl_setopt($curl, CURLOPT_POSTFIELDS,json_encode($postdata,JSON_UNESCAPED_UNICODE));//Post提交的数据包  }else{curl_setopt($curl, CURLOPT_POSTFIELDS,$postdata);//Post提交的数据包
             }}//curl_setopt($curl, CURLOPT_COOKIEFILE, './cookie.txt'); //读取上面所储存的Cookie信息// curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时限制防止死循环curl_setopt($curl, CURLOPT_HEADER, $options);//显示返回的Header区域内容  可以是这样的字符串 "Content-Type: text/xml; charset=utf-8"curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//获取的信息以文件流的形式返回$output = curl_exec($curl);//执行操作if(curl_errno($curl)){if($this->debug == true){$errorInfo='Errno'.curl_error($curl);$this->responseMessage('text',$errorInfo);//将错误返回给微信端
              }}curl_close($curl);//关键CURL会话return $output;//返回数据
   }/**本地缓存token*/private function setFileCacheToken($cacheId,$data,$savePath='/'){$cache=array();$cache[$cacheId]=$data;$this->saveFilePath=$_SERVER['DOCUMENT_ROOT'].$savePath.'token.cache';file_exists($this->saveFilePath)?chmod($this->saveFilePath,0775):chmod($this->saveFilePath,0775);//给文件覆权限file_put_contents($this->saveFilePath,serialize($cache));}/**本地读取缓存*/private function getFileCacheToken($cacheId){$fileDataInfo=file_get_contents($_SERVER['DOCUMENT_ROOT'].'/token.cache');$token=unserialize($fileDataInfo);if(isset($token[$cacheId])){return $token[$cacheId];}}/**检查高级接口权限 tokenc*/public  function checkAccessToken(){if($this->appid && $this->appSecret){$access=$this->getFileCacheToken('access');if(isset($access['expires_in'])){$this->expires_in= $access['expires_in'];}if( ( $this->expires_in  - time() ) <  0 ){//表明已经过期$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appSecret}";$access = json_decode($this->curl_post_https($url));if(isset($access->access_token) && isset($access->expires_in)){$this->access_token = $access->access_token;##得到微信平台返回得到token$this->expires_in=time()+$access->expires_in;##得到微信平台返回的过期时间$this->setFileCacheToken('access',array('token'=>$this->access_token,'expires_in'=>$this->expires_in));##加入缓存access_tokenreturn true;}}else{$access=$this->getFileCacheToken('access');$this->access_token=$access['token'];return true;}}return false;}/**获取access_token*/public function getAccessToken(){return strval($this->access_token);}/**得到时间*/public function getExpiresTime(){return $this->expires_in;}/**获取用户列表$next_openid 表示从第几个开始,如果为空 默认从第一个用户开始拉取*/public function getUserList($next_openid=null){$url=$this->weixinApiLinks['user_get']."access_token={$this->access_token}&next_openid={$next_openid}";$resultData=$this->curl_post_https($url);        return json_decode($resultData,true);}/**获取用户的详细信息*/public function getUserInfo($openid){$url=$this->weixinApiLinks['user_info']."access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN";$resultData=$this->curl_post_https($url);return json_decode($resultData,true);}/**创建用户分组*/public function createUsersGroup($groupName){$data = '{"group": {"name": "'.$groupName.'"}}';$url=$this->weixinApiLinks['group_create']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url,$data);return json_decode($resultData,true);}/**移动用户分组*/public function moveUserGroup($toGroupid,$openid){$data = '{"openid":"'.$openid.'","to_groupid":'.$toGroupid.'}';$url=$this->weixinApiLinks['group_move']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url,$data);return json_decode($resultData,true);}/**查询所有分组*/public function getUsersGroups(){$url=$this->weixinApiLinks['group_get']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url);return json_decode($resultData,true);}/**查询用户所在分组*/public function getUserGroup($openid){$data='{"openid":"'.$openid.'"}';$url=$this->weixinApiLinks['group_getid']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url,$data);return json_decode($resultData,true);}/**修改分组名*/public function updateUserGroup($groupId,$groupName){$data='{"group":{"id":'.$groupId.',"name":"'.$groupName.'"}}';$url=$this->weixinApiLinks['group_rename']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url,$data);return json_decode($resultData,true);}/**生成二维码*/public function createQrcode($scene_id=0,$qrcodeType=1,$expire_seconds=1800){$scene_id=($scene_id == 0)?rand(1,9999):$scene_id;if($qrcodeType == 1){$action_name='QR_SCENE';##表示临时二维码$data='{"expire_seconds":'.$expire_seconds.',"action_name": "QR_SCENE","action_info":{"scene":{"scene_id": '.$scene_id.'}}}';}else{$action_name='QR_LIMIT_SCENE';$data='{"action_name": "QR_LIMIT_SCENE", "action_info":{"scene":{"scene_id": '.$scene_id.'}}}';}$url=$this->weixinApiLinks['qrcode']."access_token=".$this->access_token;$resultData=$this->curl_post_https($url,$data);$result=json_decode($resultData,true);return $this->weixinApiLinks['showqrcode']."ticket=".urlencode($result["ticket"]);}/**上传多媒体文件type 分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) */public function uploadMedia($type, $file){$data=array("media"  => "@".dirname(__FILE__).'\\'.$file);$url=$this->weixinApiLinks['media_upload']."access_token=".$this->access_token."&type=".$type;$resultData=$this->curl_post_https($url, $data);return json_decode($resultData, true);}/**创建菜单*/public function createMenu($menuListdata){$url =$this->weixinApiLinks['menu_create']."access_token=".$this->access_token;$resultData = $this->curl_post_https($url, $menuListdata);$callData=json_decode($resultData, true);if($callData['errcode'] > 0){#表示菜单创建失败return $callData;}return true;}/**查询菜单*/public function queryMenu(){$url = $this->weixinApiLinks['menu_get']."access_token=".$this->access_token;$resultData = $this->curl_post_https($url);return json_decode($resultData, true);}/**删除菜单*/public function deleteMenu(){$url = $this->weixinApiLinks['menu_delete']."access_token=".$this->access_token;$resultData = $this->curl_post_https($url);return json_decode($resultData, true);}/**给某个人发送文本内容*/public function sendMessage($touser, $data, $msgType = 'text'){$message = array();$message['touser'] = $touser;$message['msgtype'] = $msgType;switch ($msgType){case 'text':  $message['text']['content']=$data; break;case 'image': $message['image']['media_id']=$data; break;case 'voice': $message['voice']['media_id']=$data; break;case 'video': $message['video']['media_id']=$data['media_id'];$message['video']['thumb_media_id']=$data['thumb_media_id'];break;case 'music':  $message['music']['title'] = $data['title'];// 音乐标题$message['music']['description'] = $data['description'];// 音乐描述$message['music']['musicurl'] = $data['musicurl'];// 音乐链接$message['music']['hqmusicurl'] = $data['hqmusicurl'];// 高品质音乐链接,wifi环境优先使用该链接播放音乐$message['music']['thumb_media_id'] = $data['title'];// 缩略图的媒体IDbreak;case 'news':$message['news']['articles'] = $data; // title、description、url、picurlbreak;}$url=$this->weixinApiLinks['message']."access_token={$this->access_token}";$calldata=json_decode($this->curl_post_https($url,$message),true);if(!$calldata || $calldata['errcode'] > 0){return false;}return true;}/***  群发* */public  function  sendMassMessage($sendType,$touser=array(),$data){$massArrayData=array();switch($sendType){case 'text':##文本$massArrayData=array("touser"=>$touser,"msgtype"=>'text',"text"=>array('content'=>$data),);break;case 'news':##图文$massArrayData=array("touser"=>$touser,"msgtype"=>'mpnews',"mpnews"=>array('media_id'=>$data),);break;case 'voice':##语音$massArrayData=array("touser"=>$touser,"msgtype"=>'voice',"voice"=>array('media_id'=>$data),);break;case 'image':##图片$massArrayData=array("touser"=>$touser,"msgtype"=>'image',"media_id"=>array('media_id'=>$data),);break;case 'wxcard': ##卡卷$massArrayData=array("touser"=>$touser,"msgtype"=>'wxcard',"wxcard"=>array('card_id'=>$data),);break;}$url=$this->weixinApiLinks['message_mass']."access_token={$this->access_token}";$calldata=json_decode($this->curl_post_https($url,$massArrayData),true);return $calldata;}/**发送模板消息*/    public function  sendTemplateMessage($touser,$template_id,$url,$topColor,$data){$templateData=array('touser'=>$touser,'template_id'=>$template_id,'url'=>$url,'topcolor'=>$topColor,'data'=>$data,);$url=$this->weixinApiLinks['message_template']."access_token={$this->access_token}";$calldata=json_decode($this->curl_post_https($url,urldecode(json_encode($templateData))),true);return $calldata;}/*** @param $type* @param $filePath 文件根路径*/public  function  mediaUpload($type,$filePath){$url=$this->weixinApiLinks['media_upload']."access_token={$this->access_token}&type=".$type;$postData=array('media'=>'@'.$filePath);$calldata=json_decode($this->https_request($url,$postData),true);return $calldata;}/*** @param $data* @return mixed*   上传图片资源*/public  function  newsUpload($data){$articles=array( 'articles'=>$data );$url=$this->weixinApiLinks['upload_news']."access_token={$this->access_token}";$calldata=json_decode($this->curl_post_https($url,$articles),true);return $calldata;}/*** 获取微信授权链接** @param string $redirect_uri 跳转地址* @param mixed $state 参数*/public function getOauthorizeUrl($redirect_uri = '', $state = '',$scope='snsapi_userinfo'){$redirect_uri = urlencode($redirect_uri);$state=empty($state)?'1':$state;$url=$this->weixinApiLinks['oauth_code']."appid={$this->appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state={$state}#wechat_redirect";return $url;}/*** 获取授权token** @param string $code 通过get_authorize_url获取到的code*/public function getOauthAccessToken(){$code = isset($_GET['code'])?$_GET['code']:'';if (!$code) return false;$url=$this->weixinApiLinks['oauth_access_token']."appid={$this->appid}&secret={$this->appSecret}&code={$code}&grant_type=authorization_code";$token_data=json_decode($this->curl_post_https($url),true);$this->oauthAccessToken=$token_data['access_token'];return $token_data;}/*** 刷新access token并续期*/public  function  getOauthRefreshToken($refresh_token){$url=$this->weixinApiLinks['oauth_refresh']."appid={$this->appid}&grant_type=refresh_token&refresh_token={$refresh_token}";$token_data=json_decode($this->curl_post_https($url),true);$this->oauthAccessToken=$token_data['access_token'];return $token_data;}/*** 获取授权后的微信用户信息** @param string $access_token* @param string $open_id 用户id*/public function getOauthUserInfo($access_token='', $open_id = ''){$url=$this->weixinApiLinks['oauth_userinfo']."access_token={$access_token}&openid={$open_id}&lang=zh_CN";$info_data=json_decode($this->curl_post_https($url),true);return $info_data;}/*** 登出当前登陆用户*/public function logout($openid='',$uid=''){$url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1';$data=array('uin'=>$uid,'sid'=>$openid);$this->curl_post_https($url,$data);return true;}public  function https_request($url, $data = null){$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS, $data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($curl);curl_close($curl);return $output;}}告知义务:1. api提供订阅号基本服务以及公众号常用服务;2. api如不能满足您的需求,请阅读微信公众平台说明文档使用说明:header('Content-type: text/html; charset=utf-8');#设置头信息require_once('zhphpWeixinApi.class.php');#加载微信接口类文件$zhwx=new zhphpWeixinApi();//实例化
     配置:第一种方式: $zhwx->weixinConfig=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');第二种方式:$configArr=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');$zhwx->setConfig($configArr);第三种方式:$zhwx->weixinBaseApiMessage($configArr); ##订阅号使用 $zhwx->weixinHighApiMessage($configArr);## 服务号使用
             官方建议使用 第二种方式         订阅号基本功能调用$zhwx->weixinBaseApiMessage(); #订阅号接口入口  返回 true  false
       下面是调用案例if($zhwx->weixinBaseApiMessage()){ //基本微信接口会话 必须$keyword=$zhwx->getUserTextRequest();//得到用户发的微信内容, 这里可以写你的业务逻辑$msgtype=$zhwx->getUserMsgType();//得到用户发的微信数据类型, 这里可以写你的业务逻辑$SendTime=$zhwx->getUserSendTime();//得到用户发送的时间$fromUserName=$zhwx->getUserWxId();//用户微信id$pingtaiId=$zhwx->getPlatformId();//平台微信id$requestId=$zhwx->getUserRequestId(); //获取微信公众平台消息ID$userPostData=$zhwx->getUserPostData();//获取用户提交的post 数据对象集if( $msgtype == 'text' ){ //如果是文本类型if($keyword == 'news'){ //新闻类别请求$callData=array(array('Title'=>'第一条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'http://t12.baidu.com/it/u=1040955509,77044968&fm=76','Url'=>'http://wxphptest1.applinzi.com/'),array('Title'=>'第二条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'https://images0.cnblogs.com/blog2015/340216/201505/051316468603876.png','Url'=>'http://wxphptest1.applinzi.com/'),array('Title'=>'第三条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'http://dimgcn2.s-msn.com/imageadapter/w60h60q85/stimgcn3.s-msn.com/msnportal/hp/2016/01/21/3e3ef7f07361b5211e2b155bb66fa6a9.jpg','Url'=>'http://wxphptest1.applinzi.com/'),);$zhwx->responseMessage('news',$callData);}elseif($keyword == 'music'){ //音乐请求$music=array("Title"=>"最炫民族风","Description"=>"歌手:凤凰传奇","MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3","HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");$zhwx->responseMessage('music',$music); }else{$callData='这是zhphp 官方对你的回复:你输入的内容是'.$keyword.'你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'你的微信ID是:'.$fromUserName.'平台的微信Id是:'.$pingtaiId.'zhphp官方接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}}else if($msgtype == 'image'){ //如果是图片类型$image=$zhwx->getUserImageRequest();//如果用户发的是图片信息,就去得到用户的图形 信息$callData=$image['MediaId'];//mediaID 是微信公众平台返回的图片的id,微信公众平台是依据该ID来调用用户所发的图片$zhwx->responseMessage('image',$callData);}else if($msgtype == 'voice'){ //如果是语音消息,用于语音交流$callData=$zhwx->getUserVoiceRequest(); //返回数组$zhwx->responseMessage('voice',$callData);}elseif($msgtype == 'event'){//事件,由系统自动检验类型$content='感谢你关注zhphp官方平台';//给数据为数据库查询出来的$callData=$zhwx->responseEventMessage($content);//把数据放进去,由系统自动检验类型,并返回字符串或者数组的结果$zhwx->responseMessage('text',$callData); //使用数据}else{$callData='这是zhphp 官方对你的回复:你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'zhphp官方接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}}##########################################
    订阅号提供基本接口validToken()       平台与微信公众号握手getAccessToken()   获取accessTokengetExpiresTime()   获取accessToken 过期时间CheckAccessToken()  检查高级接口权限bytes_to_emoji($cp) 字节转表情getUserMessageInfo() 获取用户的所有会话状态信息getUsertEventClickRequest() 获取用户点击菜单信息getUserEventLocationRequest() 上报地理位置事件getUserEventScanRequest()  二维码扫描类容getUserLinkRequest()       获取用户链接信息getUserLocationRequest()   获取用户本地位置信息getUserMusicRequest()      获取音乐内容getUserVideoRequest()      获取视频内容getUserVoiceRequest()      获取语音消息getUserImageRequest()      获取图片消息getUserRequestId()         返回微信平台的当条微信idgetUserTextRequest()       获取用户输入的信息getPlatformId()             获取当前平台的idgetUserWxId()                获取当前用户的idgetUserSendTime()             获取用户发送微信的时间getUserMsgType()              获取当前的会话类型isWeixinMsgType()             检查用户发的微信类型getUserPostData()             获取用户发送信息的数据对象集getConfig()                    获取配置信息responseMessage($wxmsgType,$callData='')  微信平台回复用户信息统一入口#####################################################
    服务号基本功能调用$zhwx->weixinHighApiMessage();  #服务号接口入口  返回 true  false$zhwx->CheckAccessToken();       #检查access权限
      下面是调用案例if($zhwx->weixinHighApiMessage()){// 检查配置统一入口if($zhwx->CheckAccessToken()){  //检查accessToken 为必须$arrayData=$zhwx->getUserList(); ##测试用户列表echo '<pre>';rint_r($arrayData);echo '</pre>';*/}}######################################################服务号提供的接口:getUserList($next_openid=null)  获取用户列表getUserInfo($openid)            获取用户详细信息createUsersGroup($groupName)    创建分组moveUserGroup($toGroupid,$openid) 移动用户到组getUsersGroups()                  获取所有分组getUserGroup($openid)              获取用户所在的组updateUserGroup($groupId,$groupName) 修改组名createQrcode($scene_id,$qrcodeType=1,$expire_seconds=1800) 生成二维码uploadMedia($type, $file)  上传文件createMenu($menuListdata)   创建菜单queryMenu()                 查询菜单deleteMenu()                删除菜单sendMessage($touser, $data, $msgType = 'text') 主动某个用户发送数据newsUpload($data) 上传图文素材 按接口规定 $data 必须是二维数组mediaUpload($type,$filePath)  上传媒体文件 filePath 必须是文件绝对路径sendTemplateMessage($touser,$template_id,$url,$topColor,$data) 发送模板消息 通常为通知接口sendMassMessage($sendType,$touser=array(),$data)  群发消息header('Content-type: text/html; charset=utf-8');#设置头信息
// 微信类 调用
require_once('zhphpWeixinApi.class.php');
echo 'helloword';
exit;
$zhwx=new zhphpWeixinApi();//实例化
$zhwx->weixinConfig=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');//参数配置
/*$configArr=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');$zhwx->setConfig($configArr);
*/#################################应用程序逻辑#  订阅号测试 start #####################################if($zhwx->weixinBaseApiMessage()){ //基本微信接口会话 必须$keyword=$zhwx->getUserTextRequest();//得到用户发的微信内容, 这里可以写你的业务逻辑$msgtype=$zhwx->getUserMsgType();//得到用户发的微信数据类型, 这里可以写你的业务逻辑$SendTime=$zhwx->getUserSendTime();//得到用户发送的时间$fromUserName=$zhwx->getUserWxId();//用户微信id$pingtaiId=$zhwx->getPlatformId();//平台微信id$requestId=$zhwx->getUserRequestId(); //获取微信公众平台消息ID$userPostData=$zhwx->getUserPostData();//获取用户提交的post 数据对象集if( $msgtype == 'text' ){ //如果是文本类型if($keyword == 'news'){ //新闻类别请求$callData=array(array('Title'=>'第一条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'http://t12.baidu.com/it/u=1040955509,77044968&fm=76','Url'=>'http://wxphptest1.applinzi.com/'),array('Title'=>'第二条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'https://images0.cnblogs.com/blog2015/340216/201505/051316468603876.png','Url'=>'http://wxphptest1.applinzi.com/'),array('Title'=>'第三条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'http://dimgcn2.s-msn.com/imageadapter/w60h60q85/stimgcn3.s-msn.com/msnportal/hp/2016/01/21/3e3ef7f07361b5211e2b155bb66fa6a9.jpg','Url'=>'http://wxphptest1.applinzi.com/'),);$zhwx->responseMessage('news',$callData);}elseif($keyword == 'music'){ //音乐请求$music=array("Title"=>"最炫民族风","Description"=>"歌手:凤凰传奇","MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3","HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");$zhwx->responseMessage('music',$music); }else{$callData='这是zhphp 官方对你的回复:你输入的内容是'.$keyword.'你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'你的微信ID是:'.$fromUserName.'平台的微信Id是:'.$pingtaiId.'zhphp官方接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}}else if($msgtype == 'image'){ //如果是图片类型$image=$zhwx->getUserImageRequest();//如果用户发的是图片信息,就去得到用户的图形 信息$callData=$image['MediaId'];//mediaID 是微信公众平台返回的图片的id,微信公众平台是依据该ID来调用用户所发的图片$zhwx->responseMessage('image',$callData);}else if($msgtype == 'voice'){ //如果是语音消息,用于语音交流$callData=$zhwx->getUserVoiceRequest(); //返回数组$zhwx->responseMessage('voice',$callData);}elseif($msgtype == 'video'){//视频请求未测试成功$video=$zhwx->getUserVideoRequest();//得到用户视频内容信息$callData['Title']='这是是视频的标题';//参数为必须$callData['Description']='这是视频的简介';//参数为必须$callData['MediaId']=$video['MediaId'];//得到数组中的其中的一个id$callData['ThumbMediaId']=$video['ThumbMediaId'];//视频的缩略图id$zhwx->responseMessage('video',$callData); //把数据传递到平台接口 api 类 操作并返回数据给微信平台}elseif($msgtype == 'link'){$link=$zhwx->getUserLinkRequest();$callData='这是zhphp 官方对你的回复:你输入的内容是'.$keyword.'你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'zhphp官方接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}elseif($msgtype == 'event'){//事件,由系统自动检验类型$content='感谢你关注zhphp官方平台';//给数据为数据库查询出来的$callData=$zhwx->responseEventMessage($content);//把数据放进去,由系统自动检验类型,并返回字符串或者数组的结果$zhwx->responseMessage('text',$callData); //使用数据}else{$callData='这是zhphp 官方对你的回复:你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'zhphp官方接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}}###################################服务号测试 start ############
/*if($zhwx->weixinHighApiMessage()){// 检查配置统一入口
$zhwx->checkAccessToken();//if($zhwx->checkAccessToken()){  //检查accessToken 为必须//$arrayData=$zhwx->getUserList(); ##测试用户列表/*$openid='oQucos17KaXpwPfwp39FwzfzrfNA'; ###测试获取个人信息$arrayData=$zhwx->getUserInfo($openid);echo '<pre>';print_r($arrayData);echo '</pre>';*/###测试二维码//$qrcodeImgsrc=$zhwx->createQrcode(100);//echo '<img src="'.$qrcodeImgsrc.'">';###创建一个一级菜单  type 点击类型  name 菜单名称  key 菜单说明 /*$menuListData=array('button'=>array(array('type'=>'click','name'=>'投票活动','key'=>'tphd',),array('type'=>'view','name'=>'查看结果','key'=>'ckjg','url'=>''),));$list=$zhwx->createMenu($menuListData);var_dump($list);//}
}*/###############################模板消息################
if($zhwx->weixinBaseApiMessage()){if($msgtype == 'text'){$location=urlencode($keyword);$url='http://api.map.baidu.com/telematics/v3/weather?location='.$location.'&output=json&ak=C845576f91f52f4e62bf8d9153644cb8';$jsonData=$zhwx->curl_post_https($url);$data=json_decode($jsonData,true);$weth=$data['results'][0];/*$content='你查询的是:'.$weth['currentCity'].'的天气情况';$content.='pm2.5='.$weth['pm25'];$content.='今天的天气是:'.$weth['weather_data'][0]['date'];$zhwx->responseMessage('text',$content);*/// $userlist=$zhwx->getUserList();// $zhwx->responseMessage('text',json_encode($userlist));$touser= $fromUserName;$tpl_id='eSYzsYE3rCupK8_boCnfMcayi0cUXwPB6W7Lrz4TrdA';$url='http://www.baidu.com/';$topcolor="#52654D";$wdata=array('first'=>array('value'=>urlencode('欢迎使用天气查询系统'),'color'=>'#12581F'),'city'=>array('value'=>urlencode($weth['currentCity']),'color'=>'#56751F'),'pm'=>array('value'=>urlencode($weth['pm25']),'color'=>'#15751F'),);$zhwx->checkAccessToken();$cc=$zhwx->sendTemplateMessage($touser,$tpl_id,$url,$topcolor,$wdata);}}###########################################新增群发消息
<?php
header('Content-type: text/html; charset=utf-8');#设置头信息
require_once('zhphpWeixinApi.class.php');
$zhwx=new zhphpWeixinApi();//实例化
$configArr=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');$zhwx->setConfig($configArr);$zhwx->checkAccessToken();$userlist=$zhwx->getUserList();if(isset($_POST['sub'])){$touser=$_POST['userOpenId'];//开始群发$content='这是群发的文本';$data= $zhwx->sendMassMessage('text',$touser,$content);echo '<pre>';print_r($data);echo '</pre>';exit;
}
?>
<!DOCTYPE html>
<html>
<head><title>微信群发信息</title><style type="text/css">.userlistBox{width: 1000px;height: 300px;border: 1px solid  red;}td{ text-align: center; border: 1px solid black;}</style>
</head>
<body><?php$userinfos=array();foreach($userlist['data'] as  $key=>$user){foreach($user as $kk=>$list){$userinfos[]=$zhwx->getUserInfo($list);}}?><form action="wx.php?act=send" method="post"><div class="userlistBox"><h2>请选择用户</h2><table ><tr><th style="width: 10%;">编号</th><th style="width: 15%;">关注事件类型</th><th style="width: 15%;">用户姓名</th><th style="width: 10%;">性别</th><th style="width: 15%;">头像</th><th style="width: 15%;">所在地</th><th style="width: 15%;">所在组</th><th style="width: 5%;">操作</th></tr><?phpforeach($userinfos  as $key=>$userinfo){?><tr><td><?php echo $key+1;?></td><td><?phpif($userinfo['subscribe'] == 1){echo '普通关注事件';}?></td><td> <?php echo  $userinfo['nickname'];  ?></td><td> <?php echo  $userinfo['sex']==1?'男':'女';  ?></td><td>  <?phpif(empty($userinfo['headimgurl'])){echo '没有头像';}else{echo '<img width="50px" height="50px" src="'.$userinfo['headimgurl'].'">';}?></td><td><?php  echo $userinfo['country'].'-'.$userinfo['province'].'-'.$userinfo['city']; ?></td><td><?phpif($userinfo['groupid']  == 0){echo '没有分组';}else{echo '还有完善功能';}?></td><td><input type="checkbox" value="<?php echo $userinfo['openid'];?>" name="userOpenId[]" id="m_<?php echo $key+1; ?>" /></td></tr><?php}?></table><input type="submit" name="sub" value="发送" /></div></form>
</body>
</html>
#######################################图文发送案例调用
<?php
header('Content-type: text/html; charset=utf-8');#设置头信息
require_once('dodiWeixinApi.class.php');
$zhwx=new dodiWeixinApi();//实例化
$configArr=array('token'=>'weixintest','appid'=>'wx7b4b6ad5c7bfaae1','appSecret'=>'faaa6a1e840fa40527934a293fabfbd1','myweixinId'=>'gh_746ed5c6a58b');$zhwx->setConfig($configArr);##配置参数$zhwx->checkAccessToken();##检查token$userlist=$zhwx->getUserList();##获取用户列表//var_dump($userlist);//$callData=$zhwx->mediaUpload('image','a.jpg');## 上传图片到微信  得到 media id
//CQKrXGNiJWiKutD17CWhoqlqW_80IByyFpLWa-dnPzhl7jPpQFiBbXhsAQVwId-q$data=array(array("thumb_media_id"=>"CQKrXGNiJWiKutD17CWhoqlqW_80IByyFpLWa-dnPzhl7jPpQFiBbXhsAQVwId-q","author"=>"xxx","title"=>"Happy Day","content_source_url"=>"www.qq.com","content"=>"<div style='width: 100%; height: 50px; background-color: red;'>文章内容</div>","diges"=>"digest"),
);//$aa=$zhwx->newsUpload($data);//上传图文素材[ media_id] => 2n32OjOIdP7jewG0d55bKvuJYcH6XpWTeg8ViHCfzHGgKBZxmE72s3T2LY-3Q8LOif(isset($_POST['sub'])){$touser=$_POST['userOpenId'];//开始群发$content='<div><img src="http://d005151912.0502.dodi.cn/a.jpg" style="width:100%; height:50px;"></div><div> 这是商品说明</div>';$content.='查看详情: <a  href="http://msn.huanqiu.com/china/article/2016-01/8473360.html">国家统计局局长王保安涉嫌严重违纪被免职</a>';// $data= $zhwx->sendMassMessage('text',$touser,$content);$data=$zhwx->sendMassMessage('news',$touser,'2n32OjOIdP7jewG0d55bKvuJYcH6XpWTeg8ViHCfzHGgKBZxmE72s3T2LY-3Q8LO'); ##主动发送图文消息echo '<pre>';print_r($data);echo '</pre>';exit;
}
?>

View Code

下面是我的写法

1.首先是我的文件结构

2.文件偷偷打开来给你看看

<?php
header('Content-type: text/html; charset=utf-8');#设置头信息
require_once('weixinapi.php');#加载微信接口类文件
$zhwx=new zhphpWeixinApi();//实例化$configArr=array(//自己修改'token'=>'----------------','appid'=>'----------------------','appSecret'=>'--------------------','myweixinId'=>'--------------------'
);
$zhwx->setConfig($configArr);if($zhwx->weixinBaseApiMessage()){ //基本微信接口会话 必须$keyword=$zhwx->getUserTextRequest();//得到用户发的微信内容, 这里可以写你的业务逻辑$msgtype=$zhwx->getUserMsgType();//得到用户发的微信数据类型, 这里可以写你的业务逻辑$SendTime=$zhwx->getUserSendTime();//得到用户发送的时间$fromUserName=$zhwx->getUserWxId();//用户微信id$pingtaiId=$zhwx->getPlatformId();//平台微信id$requestId=$zhwx->getUserRequestId(); //获取微信公众平台消息ID$userPostData=$zhwx->getUserPostData();//获取用户提交的post 数据对象集if( $msgtype == 'text' ){ //如果是文本类型if($keyword == 'news'){ //新闻类别请求$callData=array(array('Title'=>'第一条新闻','Description'=>'第一条新闻的简介','PicUrl'=>'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3246575267,854993829&fm=27&gp=0.jpg','Url'=>'https://mp.weixin.qq.com/s/ay8RRkElw2xUlffeDnhQLw'),array('Title'=>'第二条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'https://images0.cnblogs.com/blog2015/340216/201505/051316468603876.png','Url'=>'http://wxphptest1.applinzi.com/'),array('Title'=>'第三条新闻的标题','Description'=>'第一条新闻的简介','PicUrl'=>'http://dimgcn2.s-msn.com/imageadapter/w60h60q85/stimgcn3.s-msn.com/msnportal/hp/2016/01/21/3e3ef7f07361b5211e2b155bb66fa6a9.jpg','Url'=>'http://wxphptest1.applinzi.com/'),);$zhwx->responseMessage('news',$callData);}elseif($keyword == 'music'){ //音乐请求$music=array("Title"=>"安眠曲","Description"=>"谭嗣同","MusicUrl"=>"https://www.xiami.com/song/xN1kyHa331d?spm=a1z1s.3521865.23309997.51.kf2b5r"// ,"HQMusicUrl"=>"http://www.kugou.com/song/#hash=3339B5F7024EC2ABB8954C0CC4983548&album_id=548709"
        );$zhwx->responseMessage('music',$music); }else{$callData='我轻轻的告诉你~
你输入的内容是:'.$keyword.'
你发数据类型是:'.$msgtype.'
你发的数据时间是:'.$SendTime.'
------------------------------------------'.'
输入 "news" "music"试试吧!';$zhwx->responseMessage('text',$callData);}}else if($msgtype == 'image'){ //如果是图片类型$image=$zhwx->getUserImageRequest();//如果用户发的是图片信息,就去得到用户的图形 信息$callData=$image['MediaId'];//mediaID 是微信公众平台返回的图片的id,微信公众平台是依据该ID来调用用户所发的图片$zhwx->responseMessage('image',$callData);}else if($msgtype == 'voice'){ //如果是语音消息,用于语音交流$callData=$zhwx->getUserVoiceRequest(); //返回数组$zhwx->responseMessage('voice',$callData);}elseif($msgtype == 'event'){//事件,由系统自动检验类型$content='欢迎光临━(*`∀´*)ノ亻'.'随意输入试试吧!';//给数据为数据库查询出来的$callData=$zhwx->responseEventMessage($content);//把数据放进去,由系统自动检验类型,并返回字符串或者数组的结果$zhwx->responseMessage('text',$callData); //使用数据}else{$callData='我听不清你在说什么:你发数据类型是:'.$msgtype.'你发的数据时间是:'.$SendTime.'我接收的ID是:'.$requestId;$zhwx->responseMessage('text',$callData);}}

wei.php

weixinapi.php

源码和weixinapi.php是不一样的,后者删减了部分,自己去对照。。

基本就这样了,可以去公众号上测试

转载于:https://www.cnblogs.com/iampengl/p/9107753.html

PHP微信公众号开发之自动回复相关推荐

  1. java微信自动回复开发,Java微信公众号开发----关键字自动回复消息

    在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有 ...

  2. 微信公众号开发——关键词自动回复

    最近忙国赛的一个项目,我得做一个微信公众号.功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息. 这时就是查询微信公众平台文档了,地址如下: https://mp.we ...

  3. JAVA微信公众号开发之自动回复消息与图片

    首先,应该建立一个消息与图片的实体,看一下微信公众号的文档: 回复文本消息 <xml> <ToUserName><![CDATA[toUser]]></ToU ...

  4. 微信公众号开发之自动回复

    自动回复这块是比较麻烦的 一.后端回复管理 后端没什么说的,根据微信公众平台的自动回复建表,添加数据即可 需要强调的是 规则.关键词.回复内容需要建三个表 规则表中关键词和回复内容拼接id成字符串 存 ...

  5. php 公众号回复天气预报,微信公众号开发天气自动回复

    当用户输入一个地名的时候,回复该地区的当前天气预报.使用的api接口为https://www.sojson.com/open/api/weather/json.shtml?city=北京返回的数据为j ...

  6. 微信公众号开发(总结)

    这一周给大家完整的分享了关于微信公众号开发之自动回复电影的功能实现,这可以说是一个项目了,一个简单的项目,一个用你学到的编程技术所实现的项目,我相信非常多的人刚开始学习编程,都不知道具体它可以怎么样用 ...

  7. 微信公众号自动回复html,[.NET] 简单接入微信公众号开发:实现自动回复

    简单接入微信公众号开发:实现自动回复 一.前提 先申请微信公众号的授权,找到或配置几个关键的信息(开发者ID.开发者密码.IP白名单.令牌和消息加解密密钥等). 二.基本配置信息解读 开发者ID:固定 ...

  8. 微信公众号--开发模式之用户关注后自动回复(Java实现)

    访问我的个人博客 秋码个人博客 微信公众号开发–关注后自动回复(Java记录篇) 最终效果如下:

  9. 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】

    [微信公众号--零基础全面系统教学] [P01-P07]微信公众号 开发详解01[目的.起名.准备工作.注册流程.后台功能] [P08-P12]微信公众号 开发详解02[自动回复.发布文章.自定义菜单 ...

  10. 微信公众号php编程,PHP编程:微信公众号开发之文本消息自动回复php代码

    搜索热词 <微信公众号开发之文本消息自动回复PHP代码>要点: 本文介绍了微信公众号开发之文本消息自动回复PHP代码,希望对您有用.如果有疑问,可以联系我们. 本文实例为大家分享了PHP微 ...

最新文章

  1. iBatis的CRUD操作详细总结
  2. Tomcat(五):Tomcat 参数调优教程
  3. kali linux解密栅栏密码,犯罪大师上帝之眼答案最新
  4. 深度学习数学基础(一)~卷积
  5. 真实序号索引与标签索引的使用
  6. 三招武林绝学带你玩转「强化学习」
  7. 查看Ubuntu系统的版本
  8. 千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)
  9. SimpleITK读取DCM文件
  10. outlook邮件中样式错乱问题
  11. 浅谈股价预测模型:分类树算法
  12. server sql 将出生日期转为年龄_sql server 根据身份证号计算出生日期和年龄的存储过程...
  13. 面向对象系列(三)-抽象类的特点
  14. Postman下载到使用【待更新】
  15. Win10打开软件提示comdlg32.ocx文件丢失?
  16. vscode 插入多个光标,实现同时多行编辑的快捷键
  17. Java珠穆朗玛峰案例
  18. 干货 | 你的 KL 散度 vanish 了吗?
  19. Android手机提示“未安装应用程序”
  20. item_search - 按关键字搜索京东商品

热门文章

  1. clappr:可扩展网页媒体播放器使用
  2. Mac下打印机提示保持以备鉴定无法进行打印
  3. 张宇高数 第二讲 一元函数微分学(思维导图)
  4. 深入PCI与PCIe之一:硬件篇
  5. (2)安装配置开发工具-JsDroid引流脚本混合式开发技术系列教程By飞云脚本学院
  6. python经纬度转换xy坐标公式_Python经纬度坐标转换为距离及角度的实现
  7. 斯坦福大学-大数据与数据挖掘学习资料
  8. linux安装网易云
  9. Asp.net学习资料
  10. 关于电感元件的反电动势