国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Home php教程 PHP源碼 The simple version of php implements WeChat official account to actively push messages

The simple version of php implements WeChat official account to actively push messages

Nov 08, 2016 pm 05:33 PM

Simulate 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(
    &#39;account&#39; => &#39;公眾平臺帳號&#39;,
    &#39;password&#39; => &#39;密碼&#39;
);
$w = new Weixin($arr);
$w->getAllUserInfo();//獲取所有用戶信息
$w->getUserInfo($groupid, $fakeid);//獲取所有用戶信息,如果默認分組,則$groupid傳0
$w->sendMessage(&#39;群發(fā)內(nèi)容&#39;); //群發(fā)給所有用戶
$w->sendMessage(&#39;群發(fā)內(nèi)容&#39;,$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 = &#39;mp.weixin.qq.com&#39;;//主機
    private $origin = &#39;https://mp.weixin.qq.com&#39;;
    private $referer;//引用地址
    private $cookie;
    private $pageSize = 100000;//每頁用戶數(shù)(用于讀取所有用戶)
    private $userAgent = &#39;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0&#39;;
     
     
    public function __construct($options){
        $this->_account = isset($options[&#39;account&#39;])?$options[&#39;account&#39;]:&#39;&#39;;
        $this->_password = isset($options[&#39;password&#39;])?$options[&#39;password&#39;]:&#39;&#39;;
        $this->login();
    }
     
    //登錄
    private function login(){
        $url = &#39;https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN&#39;;
        $this->send_data = array(
            &#39;username&#39; => $this->_account,
            &#39;pwd&#39; => md5($this->_password),
            &#39;f&#39; => &#39;json&#39;
        );
        $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(&#39;/token=(\d+)/i&#39;, $value,$match))
            {
                //獲取token
                $this->token = trim($match[1]);
            }
 
            if (preg_match(&#39;/"ret":(.*)/i&#39;, $value,$match)){//獲取token
                switch ($match[1]) {
                    case -1:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"系統(tǒng)錯誤")));
                    case -2:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"帳號或密碼錯誤")));
                    case -3:
                        die(urldecode(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>urlencode("密碼錯誤")))));
                    case -4:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"不存在該帳戶")));
                    case -5:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"訪問受限")));
                    case -6:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"需要輸入驗證碼")));
                    case -7:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"此帳號已綁定私人微信號,不可用于公眾平臺登錄")));
                    case -8:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"郵箱已存在")));
                    case -32:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"驗證碼輸入錯誤")));
                    case -200:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"因頻繁提交虛假資料,該帳號被拒絕登錄")));
                    case -94:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"請使用郵箱登陸")));
                    case 10:
                        die(json_encode(array(&#39;status&#39;=>1,&#39;errCode&#39;=>$match[1],&#39;msg&#39;=>"該公眾會議號已經(jīng)過期,無法再登錄使用")));
                    case 0:
                        $this->userFakeid = $this->getUserFakeid();
                        break;
                }
            }
            if(preg_match(&#39;/^set-cookie:[\s]+([^=]+)=([^;]+)/i&#39;, $value,$match)){//獲取cookie
                $this->cookie .=$match[1].&#39;=&#39;.$match[2].&#39;; &#39;;
            }
             
        }
    }
     
    //單發(fā)消息
    private function send($fakeid,$content){
        $url = &#39;https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN&#39;;
        $this->send_data = array(
                &#39;type&#39; => 1,
                &#39;f&#39; => &#39;json&#39;,
                &#39;action&#39; => &#39;sync&#39;,
                &#39;content&#39; => $content,
                &#39;tofakeid&#39; => $fakeid,
                &#39;token&#39; => $this->token,
                &#39;ajax&#39; => 1,
            );
        $this->referer = &#39;https://mp.weixin.qq.com/cgi-bin/singlemsgpage?token=&#39;.$this->token.&#39;&fromfakeid=&#39;.$fakeid.&#39;&msgid=&source=&count=20&t=wxm-singlechat&lang=zh_CN&#39;;
        return $this->curlPost($url);
    }
     
    //群發(fā)消息
    public function sendMessage($content=&#39;&#39;,$userId=&#39;&#39;) {
        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[&#39;fakeid&#39;],$content));
                if($json->ret!=0){
                    $errUser[] = $v[&#39;fakeid&#39;];
                }
            }
        }
         
        //共發(fā)送用戶數(shù)
        $count = count($this->userFakeid);
        //發(fā)送失敗用戶數(shù)
        $errCount = count($errUser);
        //發(fā)送成功用戶數(shù)
        $succeCount = $count-$errCount;
         
        $data = array(
            &#39;status&#39;=>0,
            &#39;count&#39;=>$count,
            &#39;succeCount&#39;=>$succeCount,
            &#39;errCount&#39;=>$errCount,
            &#39;errUser&#39;=>$errUser
        );
         
        return json_encode($data);
    }
    //獲取所有用戶信息
    public function getAllUserInfo(){
        foreach($this->userFakeid as $v){
            $info[] = $this->getUserInfo($v[&#39;groupid&#39;],$v[&#39;fakeid&#39;]);
        }
         
        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 = &#39;https://mp.weixin.qq.com/cgi-bin/contactmanagepage?token=&#39;.$this->token.&#39;&t=wxm-friend&lang=zh_CN&pagesize=&#39;.$this->pageSize.&#39;&pageidx=0&type=0&groupid=&#39;.$groupId;
        $this->send_data = array(
            &#39;token&#39;=>$this->token,
            &#39;ajax&#39;=>1
        );
        $message_opt = $this->curlPost($url);
        return $message_opt;
    }
     
    //獲取所有用戶fakeid
    private function getUserFakeid(){
        ini_set(&#39;max_execution_time&#39;,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][&#39;fakeid&#39;] = $v;
            $arr[$i][&#39;groupid&#39;] = 0;
            $i++;
        }
        return $arr;
    }
 
    /**
     * curl模擬登錄的post方法
     * @param $url request地址
     * @param $header 模擬headre頭信息
     * @return json
     */
    private function curlPost($url) {
        $header = array(
            &#39;Accept:*/*&#39;,
            &#39;Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3&#39;,
            &#39;Accept-Encoding:gzip,deflate,sdch&#39;,
            &#39;Accept-Language:zh-CN,zh;q=0.8&#39;,
            &#39;Connection:keep-alive&#39;,
            &#39;Host:&#39;.$this->host,
            &#39;Origin:&#39;.$this->origin,
            &#39;Referer:&#39;.$this->referer,
            &#39;X-Requested-With:XMLHttpRequest&#39;
        );
        $curl = curl_init(); //啟動一個curl會話
        curl_setopt($curl, CURLOPT_URL, $url); //要訪問的地址
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //設置HTTP頭字段的數(shù)組
        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); //使用自動跳轉(zhuǎn)
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); //自動設置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); //設置超時限制防止死循環(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); //關閉curl
        return $result;
    }
     
    private function vget($url){ // 模擬獲取內(nèi)容函數(shù)
        $header = array(
                &#39;Accept: */*&#39;,
                &#39;Connection: keep-alive&#39;,
                &#39;Host: mp.weixin.qq.com&#39;,
                &#39;Referer: &#39;.$this->referer,
                &#39;X-Requested-With: XMLHttpRequest&#39;
        );
         
        $useragent = &#39;Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0&#39;;
        $curl = curl_init(); // 啟動一個CURL會話
        curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //設置HTTP頭字段的數(shù)組
        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); // 使用自動跳轉(zhuǎn)
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
        curl_setopt($curl, CURLOPT_HTTPGET, 1); // 發(fā)送一個常規(guī)的GET請求
        curl_setopt($curl, CURLOPT_COOKIE, $this->cookie); // 讀取上面所儲存的Cookie信息
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環(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 &#39;Errno&#39;.curl_error($curl);
        }
        curl_close($curl); // 關閉CURL會話
        return $tmpInfo; // 返回數(shù)據(jù)
    }
}


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)