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

首頁 php教程 PHP源碼 php簡陋版實作微信公眾號主動推播訊息

php簡陋版實作微信公眾號主動推播訊息

Nov 08, 2016 pm 05:33 PM

模擬登入微信公共平臺,實現(xiàn)主動訊息發(fā)送;

突破訂閱號一天只能發(fā)送一條訊息的限制。

使用編碼UTF-8
代碼位址:https://github.com/itziy/wechat
使用方法:

$arr = array( 'account' => '公眾平臺帳號', 'password' => '密碼' );

$w = new Weixin($arr);

//$w->getAllUserInfo();//取得所有使用者資訊
$w->getUserInfo($groupid, $fakeid);//取得單一使用者的信息,如果是預設群組,則$groupid傳0

$w->sendMessage('群發(fā)內容'); //群發(fā)給所有使用者

$w->sendMessage('群發(fā)內容',$ userId);?//群發(fā)給特定用戶,這裡的userId是fakeid

本實例僅供參考,由此引發(fā)的法律風險,本人概不負責。謝謝。

<?php
/*
調用方式簡單說明:
 $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ā)內容&#39;); //群發(fā)給所有用戶
$w->sendMessage(&#39;群發(fā)內容&#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); //使用自動跳轉
        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ū)域內容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //獲取的信息以文件流的形式返回
        $result = curl_exec($curl); //執(zhí)行一個curl會話
        curl_close($curl); //關閉curl
        return $result;
    }
     
    private function vget($url){ // 模擬獲取內容函數(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); // 使用自動跳轉
        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ū)域內容
        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ù)
    }
}


本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)