


The simple version of php implements WeChat official account to actively push messages
Nov 08, 2016 pm 05:33 PMSimulate logging into the WeChat public platform to realize active message sending;
Breaking through the restriction that subscription accounts can only send one message a day.
Use encoding UTF-8
Code address: https://github.com/itziy/wechat
Usage method:
$arr = array( 'account' => 'Public platform account', 'password' => ' Password' );
$w = new Weixin($arr);
//$w->getAllUserInfo();//Get all user information
$w->getUserInfo($groupid, $fakeid);// Get the information of a single user. If it is the default group, then $groupid is 0
$w->sendMessage('Group content'); //Group message to all users
$w->sendMessage('Group content',$ userId); //Group sent to a specific user, the userId here is fakeid
This example is for reference only, and I am not responsible for the legal risks caused by it. Thanks.
<?php /* 調(diào)用方式簡單說明: $arr = array( 'account' => '公眾平臺帳號', 'password' => '密碼' ); $w = new Weixin($arr); $w->getAllUserInfo();//獲取所有用戶信息 $w->getUserInfo($groupid, $fakeid);//獲取所有用戶信息,如果默認(rèn)分組,則$groupid傳0 $w->sendMessage('群發(fā)內(nèi)容'); //群發(fā)給所有用戶 $w->sendMessage('群發(fā)內(nèi)容',$userId); //群發(fā)給特定用戶,這里的$userId就是用戶的fakeid,數(shù)組方式傳遞 */ class Weixin { public $userFakeid;//所有粉絲的fakeid private $_account;//用戶名 private $_password;//密碼 private $url;//請求的網(wǎng)址 private $send_data;//提交的數(shù)據(jù) private $getHeader = 0;//是否顯示Header信息 private $token;//公共帳號TOKEN private $host = 'mp.weixin.qq.com';//主機(jī) private $origin = 'https://mp.weixin.qq.com'; private $referer;//引用地址 private $cookie; private $pageSize = 100000;//每頁用戶數(shù)(用于讀取所有用戶) 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)); 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)){//獲取token switch ($match[1]) { case -1: die(json_encode(array('status'=>1,'errCode'=>$match[1],'msg'=>"系統(tǒng)錯誤"))); 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'=>"需要輸入驗(yàn)證碼"))); 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'=>"驗(yàn)證碼輸入錯誤"))); 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'=>"該公眾會議號已經(jīng)過期,無法再登錄使用"))); case 0: $this->userFakeid = $this->getUserFakeid(); break; } } if(preg_match('/^set-cookie:[\s]+([^=]+)=([^;]+)/i', $value,$match)){//獲取cookie $this->cookie .=$match[1].'='.$match[2].'; '; } } } //單發(fā)消息 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); } //群發(fā)消息 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']; } } } //共發(fā)送用戶數(shù) $count = count($this->userFakeid); //發(fā)送失敗用戶數(shù) $errCount = count($errUser); //發(fā)送成功用戶數(shù) $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; } //獲取所有用戶fakeid private 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={$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); $preg = "/\"id\":(\d+),\"nick_name\"/"; preg_match_all($preg,$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); //設(shè)置HTTP頭字段的數(shù)組 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //對認(rèn)證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); //從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $this->useragent); //模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //使用自動跳轉(zhuǎn) curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自動設(shè)置Referer curl_setopt($curl, CURLOPT_POST, 1); //發(fā)送一個常規(guī)的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $this->send_data); //Post提交的數(shù)據(jù)包 curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); //讀取儲存的Cookie信息 curl_setopt($curl, CURLOPT_TIMEOUT, 30); //設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); //顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //獲取的信息以文件流的形式返回 $result = curl_exec($curl); //執(zhí)行一個curl會話 curl_close($curl); //關(guān)閉curl return $result; } private function vget($url){ // 模擬獲取內(nèi)容函數(shù) $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); //設(shè)置HTTP頭字段的數(shù)組 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認(rèn)證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模擬用戶使用的瀏覽器 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉(zhuǎn) curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設(shè)置Referer curl_setopt($curl, CURLOPT_HTTPGET, 1); // 發(fā)送一個常規(guī)的GET請求 curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); // 讀取上面所儲存的Cookie信息 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設(shè)置超時(shí)限制防止死循環(huán) curl_setopt($curl, CURLOPT_HEADER, $this->getHeader); // 顯示返回的Header區(qū)域內(nèi)容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回 $tmpInfo = curl_exec($curl); // 執(zhí)行操作 if (curl_errno($curl)) { // echo 'Errno'.curl_error($curl); } curl_close($curl); // 關(guān)閉CURL會話 return $tmpInfo; // 返回?cái)?shù)據(jù) } }

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
