模拟登陆微信用户获取用户分组、发送消息
- error_reporting( E_ALL ^ E_NOTICE );
- // 使用说明:
- // 开始要登录
- $param = array();
- $param['username'] = '用户名';
- $param['pwd'] = '密码';
- echo '
- ';<li></li><li>$wx = new Weixin();</li><li>$flag = $wx->login($param);</li><li></li><li>echo "登录:\n";</li><li>var_dump($flag);</li><li></li><li>echo "\n";</li><li>echo "获取分组:\n";</li><li>$group = $wx->getGroup();</li><li>var_dump($group);</li><li></li><li>echo "\n";</li><li>echo "分组成员:\n";</li><li>$group = $wx->getFriendByGroup('0');</li><li>var_dump($group);</li><li></li><li>echo "\n";</li><li>echo "最新消息\n";</li><li>$msg = $wx->newmesg();</li><li>var_dump($msg);</li><li></li><li>echo "\n";</li><li>echo "获取图文:\n";</li><li>$mesg = $wx->getMsg();</li><li>var_dump($mesg);</li><li></li><li>echo "\n";</li><li>echo "发送消息:\n";</li><li></li><li>// 说明:如果$content为文字发送文本消息</li><li>// 说明:如果$content为图文ID则发送图文消息</li><li>//$content = '测试文本'; // 文本</li><li>//$content = '10000023'; // 图文 素材id</li><li>//$mesg = $wx->battchMesgByGroup('101', $content);</li><li>//var_dump($mesg);</li><li>$arr = array(</li><li>'fakeId'=>'985865180',</li><li>"nickName"=>"逄锦涛",</li><li>"remarkName"=>'',</li><li>'content'=>'10000002'</li><li>);</li><li>$s=$wx->sendmesg($arr);</li><li>var_dump($s);</li><li>echo "df";</li><li>/**</li><li> * 微信公众平台操作</li><li> * 基本于PHP-CURL</li><li> * </li><li> * @author phpbin</li><li> *</li><li> */</li><li>class Weixin</li><li>{</li><li>
- </li><li>
- /**</li><li>
- * PHP curl头部分</li><li>
- * </li><li>
- * @var array</li><li>
- */</li><li>
- private $_header;</li><li>
- </li><li>
- /**</li><li>
- * 通讯cookie</li><li>
- * </li><li>
- * @var string</li><li>
- */</li><li>
- private $_cookie;</li><li>
- </li><li>
- /**</li><li>
- * 令牌</li><li>
- * </li><li>
- * @var string</li><li>
- */</li><li>
- private $_token;</li><li>
- </li><li>
- /**</li><li>
- * 初始化,设置header</li><li>
- */</li><li>
- public function __construct()</li><li>
- {</li><li>
- $this->_header = array();</li><li>
- $this->_header[] = "Host:mp.weixin.qq.com";</li><li>
- $this->_header[] = "Referer:https://mp.weixin.qq.com/cgi-bin/getmessage";</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 用户登录</li><li>
- * 结构 $param = array('username'=>'', 'pwd'=>'');</li><li>
- * </li><li>
- * @param array $param</li><li>
- * @return boolean</li><li>
- */</li><li>
- public function login($param)</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN';</li><li>
- $post = 'username='.urlencode($param['username']).'&pwd='.md5($param['pwd']).'&imgcode=&f=json';</li><li>
- $stream = $this->_html($url, $post);</li><li>
- </li><li>
- // 判断是不是登录成功</li><li>
- $html = preg_replace("/^.*\{/is", "{", $stream);</li><li>
- $json = json_decode($html, true);</li><li>
- //获取 token</li><li>
- preg_match("/lang=zh_CN&token=(\d+)/is", $json['ErrMsg'], $match);</li><li>
- $this->_token = $match[1];</li><li>
- </li><li>
- // 获取cookie</li><li>
- $this->_cookie($stream); </li><li>
- return (boolean)$this->_token;</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 获取图文消息</li><li>
- *</li><li>
- * @return array</li><li>
- */</li><li>
- public function getMsg()</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?token='.$this->_token.'&lang=zh_CN&sub=list&type=10&subtype=3&t=wxm-appmsgs-list-new&pagesize=10&pageidx=0&lang=zh_CN';</li><li>
- $stream = $this->_html($url);</li><li>
- </li><li>
- // 分析分组中好友</li><li>
- preg_match_all('/"appId"\:"(\d+)".*?"title"\:"(.*?)".*?/is', $stream, $matches);</li><li>
- if ( !is_array($matches[1])) return false;</li><li>
- </li><li>
- $returns = array();</li><li>
- foreach ( $matches[1] as $key=>$val) {</li><li>
- $temp = array();</li><li>
- $returns[$matches[1][$key]] = $matches[2][$key];</li><li>
- }</li><li>
- return $returns;</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 获取平台分组</li><li>
- * </li><li>
- * @return array</li><li>
- */</li><li>
- public function getGroup()</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid=0&token='.$this->_token.'&lang=zh_CN';</li><li>
- $stream = $this->_html($url);</li><li>
- </li><li>
- // 分组</li><li>
- preg_match('/"groups"\:(.*?)\\}\).groups/is', $stream, $match);</li><li>
- $jsonArr = json_decode($match[1], true);</li><li>
- $returns = array();</li><li>
- foreach ( $jsonArr as $key=>$val) {</li><li>
- $returns[$val['id']] = $val['name'].'('.$val['cnt'].')';
- </li><li>
- }</li><li>
- return $returns;</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 获取分组成员</li><li>
- * </li><li>
- * @param integer $gId</li><li>
- * @return array;</li><li>
- */</li><li>
- public function getFriendByGroup($gId)</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid='.$gId.'&token='.$this->_token.'&lang=zh_CN';</li><li>
- $stream = $this->_html($url);</li><li>
- </li><li>
- // 分析分组中好友</li><li>
- preg_match('/"contacts"\:(.*?)\\}\).contacts/is', $stream, $match);</li><li>
- $jsonArr = json_decode($match[1], true);</li><li>
- </li><li>
- if ( !is_array($jsonArr)) return false;</li><li></li><li>
- $returns = array();</li><li>
- foreach ( $jsonArr as $key=>$val) {</li><li>
- $temp = array();</li><li>
- $temp['fakeId'] = $val['id'];</li><li>
- $temp['nickName'] = $val['nick_name'];</li><li>
- $temp['remarkName'] = $val['remark_name'];</li><li>
- $returns[] = $temp;</li><li>
- }</li><li>
- return $returns;</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 批量按组发送</li><li>
- * </li><li>
- * @param integer $gId 分组ID</li><li>
- * @param string $content</li><li>
- * @return array</li><li>
- */</li><li>
- public function battchMesgByGroup($gId, $content)</li><li>
- {</li><li>
- $mebInfo = $this->getFriendByGroup($gId);</li><li>
- </li><li>
- if ( false == $mebInfo) return false;</li><li>
- </li><li>
- // 循环发送</li><li>
- $returns = array();</li><li>
- foreach ( $mebInfo as $key=>$val)</li><li>
- {</li><li>
- $val['content'] = $content;</li><li>
- $this->sendmesg($val) ? $returns['succ'] ++ : $returns['err']++;</li><li>
- }</li><li>
- return $returns;</li><li>
- }</li><li>
- </li><li>
- </li><li>
- /**</li><li>
- * 发送消息</li><li>
- * </li><li>
- * 结构 $param = array(fakeId, content, msgId);</li><li>
- * @param array $param</li><li>
- * @return boolean</li><li>
- */</li><li>
- public function sendmesg($param)</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response';</li><li>
- </li><li>
- // 分类型进行推送</li><li>
- if ( (int)$param['content']>100000)</li><li>
- {</li><li>
- $post = 'error=false&tofakeid='.$param['fakeId'].'&type=10&fid='.$param['content'].'&appmsgid='.$param['content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax=1';</li><li>
- } else {</li><li>
- $post = 'error=false&tofakeid='.$param['fakeId'].'&type=1&content='.$param['content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax=1';</li><li>
- }</li><li></li><li>
- $this->_header[1] = "Referer:https://mp.weixin.qq.com/cgi-bin/singlemsgpage?msgid=&source=&count=20&t=wxm-singlechat&fromfakeid=".$param['fakeId']."&token=".$this->_token;</li><li>
- $stream = $this->_html($url, $post);</li><li>
- </li><li>
- // 是不是设置成功</li><li>
- $html = preg_replace("/^.*\{/is", "{", $stream);</li><li>
- $json = json_decode($html, true);</li><li>
- return (boolean)$json['msg'] == 'ok';</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 从Stream中提取cookie</li><li>
- * </li><li>
- * @param string $stream</li><li>
- */</li><li>
- private function _cookie($stream)</li><li>
- {</li><li>
- preg_match_all("/Set-Cookie: (.*?);/is", $stream, $matches);
- </li><li>
- $this->_cookie = @implode(";", $matches[1]);</li><li>
- }</li><li>
- </li><li>
- /**</li><li>
- * 获取Stream</li><li>
- * </li><li>
- * @param string $url</li><li>
- * @param string $post</li><li>
- * @return mixed</li><li>
- */</li><li>
- private function _html($url, $post = FALSE)</li><li>
- {</li><li>
- ob_start();</li><li>
- $ch = curl_init($url);</li><li>
- curl_setopt($ch, CURLOPT_HEADER, true);</li><li>
- curl_setopt($ch, CURLOPT_HTTPHEADER, $this->_header);</li><li>
- curl_setopt($ch, CURLOPT_TIMEOUT, 60);</li><li>
- if ( $post){</li><li>
- curl_setopt($ch, CURLOPT_POST, true);</li><li>
- curl_setopt($ch, CURLOPT_POSTFIELDS, $post);</li><li>
- }</li><li>
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);</li><li>
- curl_setopt($ch, CURLOPT_COOKIE, $this->_cookie);</li><li>
- //curl_setopt($ch, CURLOPT_PROXY, 'http://10.100.10.100:3128');</li><li>
- curl_exec($ch);</li><li>
- curl_close($ch);</li><li>
- $_str = ob_get_contents();</li><li>
- $_str = str_replace("script", "", $_str);</li><li>
- </li><li>
- ob_end_clean();</li><li>
- return $_str;</li><li>
- }</li><li>
- /**</li><li>
- * 获取最新消息</li><li>
- * </li><li>
- * 返回结构:id:msgId; fakeId; nickName; content;</li><li>
- * </li><li>
- * @return array</li><li>
- */</li><li>
- public function newmesg()</li><li>
- {</li><li>
- $url = 'https://mp.weixin.qq.com/cgi-bin/message?t=message/list&count=20&day=7&token='.$this->_token;</li><li>
- </li><li>
- $stream = $this->_html($url);</li><li>
- </li><li>
- preg_match('/"msg_item"\:(.*?)\\}\).msg_item/is', $stream, $match);</li><li>
- $jsonArr = json_decode($match[1], true);</li><li>
- </li><li>
- $returns = array();</li><li>
- foreach ( $jsonArr as $val){</li><li>
- if ( isset($val['is_starred_msg'])) continue;</li><li> $returns[] = $val;</li><li>
- }</li><li>
- return $returns;</li><li>
- }</li><li>}</li>
|