当前位置:首页 > PHP教程 > php应用 > 列表

php实现微信公众号主动推送消息

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-03 20:23:00 浏览: 评论:0 

这篇文章主要介绍了php实现微信公众号主动推送消息的方法,PHP版微信公共平台消息主动推送,突破订阅号一天只能发送一条信息限制,需要的朋友可以参考下

通过学习借鉴朋友的实现方法进行整理,实现了PHP版的微信公共平台消息主动推送,分享给大家供大家参考,具体内容如下

此方法是通过模拟登录微信公共平台的方法来实现的。

代码如下:

一、登录接口部分代码

  1. //登录 
  2. private function login(){ 
  3.   $url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN'
  4.   $this->send_data = array
  5.     'username' => $this->_account, 
  6.     'pwd' => md5($this->_password), 
  7.     'f' => 'json' 
  8.   ); 
  9.   $this->referer = "https://mp.weixin.qq.com/"
  10.   $this->getHeader = 1; 
  11.   $result = explode("\n",$this->curlPost($url)); 
  12.   foreach ($result as $key => $value) { 
  13.     $value = trim($value); 
  14.     if(preg_match('/"ErrCode": (.*)/i'$value,$match)){//获取token 
  15.       switch ($match[1]) { 
  16.         case -1: 
  17.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"系统错误"))); 
  18.         case -2: 
  19.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"帐号或密码错误"))); 
  20.         case -3: 
  21.           die(urldecode(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>urlencode("密码错误"))))); 
  22.         case -4: 
  23.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"不存在该帐户"))); 
  24.         case -5: 
  25.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"访问受限"))); 
  26.         case -6: 
  27.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"需要输入验证码"))); 
  28.         case -7: 
  29.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"此帐号已绑定私人微信号,不可用于公众平台登录"))); 
  30.         case -8: 
  31.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"邮箱已存在"))); 
  32.         case -32: 
  33.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"验证码输入错误"))); 
  34.         case -200: 
  35.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"因频繁提交虚假资料,该帐号被拒绝登录"))); 
  36.         case -94: 
  37.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"请使用邮箱登陆"))); 
  38.         case 10: 
  39.           die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"该公众会议号已经过期,无法再登录使用"))); 
  40.         case 0: 
  41.           $this->userFakeid = $this->getUserFakeid(); 
  42.           break
  43.       } 
  44.     } 
  45.     if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i'$value,$match)){//获取cookie 
  46.       $this->cookie .=$match[1].'='.$match[2].'; '
  47.     } 
  48.     if(preg_match('/"ErrMsg"/i'$value,$match)){//获取token 
  49.       $this->token = rtrim(substr($value,strrpos($value,'=')+1),'",'); 
  50.     } 
  51.   } 

二、信息发送部分代码

  1. //单发消息 
  2. private function send($fakeid,$content){ 
  3.   $url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN'
  4.   $this->send_data = array
  5.       'type' => 1, 
  6.       'content' => $content
  7.       'error' => 'false'
  8.       'tofakeid' => $fakeid
  9.       'token' => $this->token, 
  10.       'ajax' => 1, 
  11.     ); 
  12.   $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'
  13.   return $this->curlPost($url); 

三、群发信息代码

  1. //群发消息 
  2. public function sendMessage($content='',$userId='') { 
  3.   if(is_array($userId) && !emptyempty($userId)){ 
  4.     foreach($userId as $v){ 
  5.       $json = json_decode($this->send($v,$content)); 
  6.       if($json->ret!=0){ 
  7.         $errUser[] = $v
  8.       } 
  9.     } 
  10.   }else
  11.     foreach($this->userFakeid as $v){ 
  12.       $json = json_decode($this->send($v['fakeid'],$content)); 
  13.       if($json->ret!=0){ 
  14.         $errUser[] = $v['fakeid']; 
  15.       } 
  16.     } 
  17.   } 
  18.     
  19.   //共发送用户数 
  20.   $count = count($this->userFakeid); 
  21.   //发送失败用户数 
  22.   $errCount = count($errUser); 
  23.   //发送成功用户数 
  24.   $succeCount = $count-$errCount
  25.     
  26.   $data = array
  27.     'status'=>0, 
  28.     'count'=>$count
  29.     'succeCount'=>$succeCount
  30.     'errCount'=>$errCount
  31.     'errUser'=>$errUser 
  32.   ); 
  33.     
  34.   return json_encode($data); 

四、获取所有用户信息代码片段

  1. //获取所有用户信息 
  2. public function getAllUserInfo(){ 
  3.   foreach($this->userFakeid as $v){ 
  4.     $info[] = $this->getUserInfo($v['groupid'],$v['fakeid']); 
  5.   } 
  6.     
  7.   return $info
  8. } 
  9.  
  10. //获取用户信息 
  11. public function getUserInfo($groupId,$fakeId){ 
  12.   $url = "https://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&lang=zh_CN&fakeid={$fakeId}"
  13.   $this->getHeader = 0; 
  14.   $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
  15.   $this->send_data = array
  16.     'token'=>$this->token, 
  17.     'ajax'=>1 
  18.   ); 
  19.   $message_opt = $this->curlPost($url); 
  20.   return $message_opt
  21.  
  22. //获取所有用户fakeid 
  23. private function getUserFakeid(){ 
  24.   ini_set('max_execution_time',600); 
  25.   $pageSize = 1000000; 
  26.   $this->referer = "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$_SESSION['token']}"
  27.   $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"
  28.   $user = $this->vget($url); 
  29.   $preg = "/\"id\":(\d+),\"name\"/"
  30.   preg_match_all($preg,$user,$b); 
  31.   $i = 0; 
  32.   foreach($b[1] as $v){ 
  33.     $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'
  34.     $user = $this->vget($url); 
  35.     $preg = "/\"id\":(\d+),\"nick_name\"/"
  36.     preg_match_all($preg,$user,$a); 
  37.     foreach($a[1] as $vv){ 
  38.       $arr[$i]['fakeid'] = $vv
  39.       $arr[$i]['groupid'] = $v
  40.       $i++; 
  41.     } 
  42.   } 
  43.   return $arr

希望本文所述对大家学习php程序设计有所帮助。

Tags: php主动推送消息

分享到: