<?php
/*
原作者:https://github.com/itziy/wechat
修改:Server  getUserFakeid函数 获取fakeid的正则匹配公式
调用方式简单说明:$arr = array('account' => '公众平台帐号','password' => '密码'
);
$w = new Weixin($arr);
$w->getAllUserInfo();//获取所有用户信息
$w->getUserInfo($groupid, $fakeid);//获取所有用户信息,如果默认分组,则$groupid传0
$w->sendMessage('群发内容'); //群发给所有用户
$w->sendMessage('群发内容',$userId); //群发给特定用户,这里的$userId就是用户的fakeid,数组方式传递
*/
$w = new Weixin(array('account'=>'771948524@qq.com','password'=>'1259012345'));
$w->sendMessage('hello', 'oXLujjp9y1311QldQKht7iyq83RM');
exit;class Weixin {public $userFakeid;//所有粉丝的fakeidprivate $_account;//用户名private $_password;//密码private $url;//请求的网址private $send_data;//提交的数据private $getHeader = 0;//是否显示Header信息private $token;//公共帐号TOKENprivate $host = 'mp.weixin.qq.com';//主机private $origin = 'https://mp.weixin.qq.com';private $referer;//引用地址private $cookie;private $pageSize = 100000;//每页用户数(用于读取所有用户)private $userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';public function __construct($options){$this->_account = isset($options['account'])?$options['account']:'';$this->_password = isset($options['password'])?$options['password']:'';$this->login();}//登录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("\n",$this->curlPost($url));//print_r($result);exit;foreach ($result as $key => $value) {$value = trim($value);if (preg_match('/token=(\d+)/i', $value,$match)){//获取token$this->token = trim($match[1]);}if (preg_match('/"ret":(.*)/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].'; ';}}}//单发消息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,'f' => 'json','action' => 'sync','content' => $content,'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);}//单发消息private function sendimg($fakeid,$mediaid){$url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN';$this->send_data = array('type' => 2,'f' => 'json','action' => 'sync','tofakeid' => $fakeid,'token' => $this->token,'ajax' => 1,'file_id'=>$mediaid,'fileid'=>$mediaid,);$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(!empty($userId)){$json = json_decode($this->sendimg($userId,'304019426'));/*if($json->ret!=0){$errUser[] = $v;}*//*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 = 100;$this->referer = "https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token={$this->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);//print_r($user);exit;//$preg = "/"id":(\d+),"nick_name"/";//preg_match_all($preg,$user,$b);$user = str_replace(array(" "," ","\t","\n","\r"), '', $user);preg_match_all('%id:"(.*?)",%si', $user, $b);$i = 0;foreach($b[1] as $v){$arr[$i]['fakeid'] = $v;$arr[$i]['groupid'] = 0;$i++;}return $arr;}/*** curl模拟登录的post方法* @param $url request地址* @param $header 模拟headre头信息* @return json*/private function curlPost($url) {$header = array('Accept:*/*','Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3','Accept-Encoding:gzip,deflate,sdch','Accept-Language:zh-CN,zh;q=0.8','Connection:keep-alive','Host:'.$this->host,'Origin:'.$this->origin,'Referer:'.$this->referer,'X-Requested-With:XMLHttpRequest');$curl = curl_init(); //启动一个curl会话curl_setopt($curl, CURLOPT_URL, $url); //要访问的地址curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置HTTP头字段的数组curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //对认证证书来源的检查curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //从证书中检查SSL加密算法是否存在curl_setopt($curl, CURLOPT_USERAGENT, $this->userAgent); //模拟用户使用的浏览器curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //使用自动跳转curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自动设置Referercurl_setopt($curl, CURLOPT_POST, 1); //发送一个常规的Post请求curl_setopt($curl, CURLOPT_POSTFIELDS, $this->send_data); //Post提交的数据包curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); //读取储存的Cookie信息curl_setopt($curl, CURLOPT_TIMEOUT, 30); //设置超时限制防止死循环curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); //显示返回的Header区域内容curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //获取的信息以文件流的形式返回$result = curl_exec($curl); //执行一个curl会话curl_close($curl); //关闭curlreturn $result;}private function vget($url){ // 模拟获取内容函数$header = array('Accept: */*','Connection: keep-alive','Host: mp.weixin.qq.com','Referer: '.$this->referer,'X-Requested-With: XMLHttpRequest');$useragent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0';$curl = curl_init(); // 启动一个CURL会话curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置HTTP头字段的数组curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模拟用户使用的浏览器curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referercurl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的GET请求curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); // 读取上面所储存的Cookie信息curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); // 显示返回的Header区域内容curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回$tmpInfo = curl_exec($curl); // 执行操作if (curl_errno($curl)) {// echo 'Errno'.curl_error($curl);}curl_close($curl); // 关闭CURL会话return $tmpInfo; // 返回数据}
}

php 微信模拟登陆给用户发送消息(文字,图片,图文)相关推荐

  1. php微信 发送信息,PHP微信企业号主动给用户发送消息接口代码

    php微信企业号主动给用户发送消息接口代码 $corpid = "wx690e2a9380e2440dyt"; $secrect = "3g9l6dHy8qjYqYMWX ...

  2. php 向公众号发送消息,微信公众号之主动给用户发送消息功能

    前一段时间项目中遇到一个稍微麻烦一点的问题. 即客户要求,他在后台编辑好文章后要主动给每个用户都发送消息,并可以让用户点击直接进入文章页面. 于是乎,当时脑子一热,想着没什么大的问题,so easy. ...

  3. php微信公众号向指定客服发信息,微信公众号给用户发送一条消息 客服消息

    可以用客服消息接口或模板消息接口实现.但是需要认证公众号才能有权限. 认证服务号可以发送客服接口消息[需要对应openid24小时内有互动]和模板消息,订阅号则没有模板消息权限. 下面是发送客服消息的 ...

  4. java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复

    最近做了一个小程序中间用到了小程序客服功能,主要实现采集用户提问,并且针对关键词自动回复及手动回复.中间踩过很多坑,所也现在记录下来提供给大家. 准备 首先准备一个小程序,配置好域名,左边菜单栏目点击 ...

  5. 【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)

    范例场景描述 活动发起人发起了一场活动,在有人通过微信小程序报名活动时,活动发起人/活动报名审核人员希望可以收到一条报名处理提醒消息. 实现流程 1. 选用订阅模板 登录到小程序后台 找到满足需求的模 ...

  6. 【.net】通过企业微信web api给指定用户发送消息

    前言 在很多业务场景中经常会遇到与微博微信进行通信的需求,今天就和大家一起研究一下如果通过企业微信web api给指定用户发送消息 一.创建应用 1.打开企业微信并登录 https://work.we ...

  7. 微信公众号利用客服接口主动给用户发送消息的方法

    目前微信并没有放出主动给用户发送消息的接口,但是我们可以使用其多客服接口来达到主动给用户发送消息的目的. 当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者 ...

  8. 如何实现消息功能_微信服务号功能助手发送消息模板如何实现

    在公众平台使用模板消息功能,仅支持添加模板和修改所在行业,如果想要发送模板消息,可以通过微号帮平台的模板消息群发功能实现,也可通过公众平台的接口开发实现功能,均能达到微信服务号发送模板消息的效果,模板 ...

  9. linux向用户发送消息,Linux终端中向记录的用户发送消息

    我如何发送消息到Linux服务器上登录用户? 如果你问这个问题,那么这个指南将帮助你学习如何做到这一点. 我们将演示如何在Linux上的终端上向所有或特定的登录用户发送消息. Linux提供了多种方法 ...

最新文章

  1. 机器学习算法独热编码及机器学习英语网站
  2. sqlanyshere转mysql_【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
  3. boost::container模块实现范围分配器适配器
  4. bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
  5. # 普通函数和箭头函数的区别
  6. java 关键字 sizeof_Java 基本数据类型 sizeof 功能
  7. 微服务网关总结之 —— Gateway
  8. matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序
  9. SQL执行insert into后返回主键ID
  10. 同步传输和异步传输_同步和异步传输| 数据通讯
  11. docker安装mosquitto2.0.14问题
  12. 服务器显示doorstall,杀戮空间2服务器插件AdminCmdsV2.0.6设置说明
  13. 金科科技学院计算机系统,金陵科技学院教务管理系统登录入口二本公办院校
  14. 杰理之省电容MIC收敛值【篇】
  15. setBounds()函数设置Java布局
  16. Locating Elements(二)
  17. 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录shen1: 设备上没有空间
  18. 「数据集」深度学习从“数据集”开始
  19. selenium对于白月黑羽selenium的实战技巧补充
  20. OGC:WMS,WFS,WMTS,WCS的区别

热门文章

  1. [CTF从0到1学习] 一、CTF 概述
  2. mac 下使用ssh
  3. bzoj 3728 zarovik 买灯泡
  4. html5开发战棋游戏,个人耗时三月独立开发的无限流战棋游戏求龙友们给些建议。 ......
  5. 数字人民币智慧学生证来了,对于特定群体硬钱包或大有可为
  6. 五子棋AI算法第三篇-Alpha Beta剪枝
  7. PHP抓取百度搜索结果页面的【相关搜索词】并存储
  8. 7 类与对象,方法和函数的定义和使用,返回值,权限修饰符 public default protected private(重点)
  9. 国内十大优质炒白银交易app软件排名(2023精选版)
  10. IP-guard苹果加密软件|苹果系统加密|Mac文档加密软件