通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下
此方法是通过模拟登录微信公共平台的方法来实现的。
代码如下:
一、登录接口部分代码//登录private function login(){$url = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN";$this->send_data = array("username" => $this->_account,"pwd" => md5($this->_password),"f" => "json");$this->referer = "https://mp.weixin.qq.com/";$this->getHeader = 1;$result = explode("
",$this->curlPost($url));foreach ($result as $key => $value) {$value = trim($value);if(preg_match("/"ErrCode": (.*)/i", $value,$match)){//获取tokenswitch ($match[1]) {case -1:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"系统错误")));case -2:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"帐号或密码错误")));case -3:die(urldecode(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>urlencode("密码错误")))));case -4:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"不存在该帐户")));case -5:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"访问受限")));case -6:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"需要输入验证码")));case -7:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"此帐号已绑定私人微信号,不可用于公众平台登录")));case -8:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"邮箱已存在")));case -32:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"验证码输入错误")));case -200:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"因频繁提交虚假资料,该帐号被拒绝登录")));case -94:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"请使用邮箱登陆")));case 10:die(json_encode(array("status"=>1,"errCode"=>$match[1],"msg"=>"该公众会议号已经过期,无法再登录使用")));case 0:$this->userFakeid = $this->getUserFakeid();break;}}if(preg_match("/^set-cookie:[s]+([^=]+)=([^;]+)/i", $value,$match)){//获取cookie$this->cookie .=$match[1]."=".$match[2]."; ";}if(preg_match("/"ErrMsg"/i", $value,$match)){//获取token$this->token = rtrim(substr($value,strrpos($value,"=")+1),"",");}}}二、信息发送部分代码
//单发消息private function send($fakeid,$content){$url = "https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN";$this->send_data = array("type" => 1,"content" => $content,"error" => "false","tofakeid" => $fakeid,"token" => $this->token,"ajax" => 1,);$this->referer = "https://mp.weixin.qq.com/cgi-bin/singlemsgpage?token=".$this->token."&fromfakeid=".$fakeid."&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN";return $this->curlPost($url);}三、群发信息代码
//群发消息public function sendMessage($content="",$userId="") {if(is_array($userId) && !empty($userId)){foreach($userId as $v){$json = json_decode($this->send($v,$content));if($json->ret!=0){$errUser[] = $v;}}}else{foreach($this->userFakeid as $v){$json = json_decode($this->send($v["fakeid"],$content));if($json->ret!=0){$errUser[] = $v["fakeid"];}}}//共发送用户数$count = count($this->userFakeid);//发送失败用户数$errCount = count($errUser);//发送成功用户数$succeCount = $count-$errCount;$data = array("status"=>0,"count"=>$count,"succeCount"=>$succeCount,"errCount"=>$errCount,"errUser"=>$errUser );return json_encode($data);}四、获取所有用户信息代码片段
//获取所有用户信息public function getAllUserInfo(){foreach($this->userFakeid as $v){$info[] = $this->getUserInfo($v["groupid"],$v["fakeid"]);}return $info;}//获取用户信息public function getUserInfo($groupId,$fakeId){$url = "https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid={$fakeId}";$this->getHeader = 0;$this->referer = "https://mp.weixin.qq.com/cgi-bin/contactmanagepage?token=".$this->token."&t=wxm-friend&lang=zh_CN&pagesize=".$this->pageSize."&pageidx=0&type=0&groupid=".$groupId;$this->send_data = array("token"=>$this->token,"ajax"=>1);$message_opt = $this->curlPost($url);return $message_opt;}//获取所有用户fakeidprivate function getUserFakeid(){ini_set("max_execution_time",600);$pageSize = 1000000;$this->referer = "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$_SESSION["token"]}";$url = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize={$pageSize}&pageidx=0&type=0&groupid=0&token={$this->token}&lang=zh_CN";$user = $this->vget($url);$preg = "/"id":(d+),"name"/";preg_match_all($preg,$user,$b);$i = 0;foreach($b[1] as $v){$url = "https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=".$pageSize."&pageidx=0&type=0&groupid=".$v."&token=".$this->token."&lang=zh_CN";$user = $this->vget($url);$preg = "/"id":(d+),"nick_name"/";preg_match_all($preg,$user,$a);foreach($a[1] as $vv){$arr[$i]["fakeid"] = $vv;$arr[$i]["groupid"] = $v;$i++;}}return $arr;}希望本文所述对大家学习php程序设计有所帮助。