1. 程式人生 > >[微信公眾號]php版模擬登入,向指定使用者推送訊息目前

[微信公眾號]php版模擬登入,向指定使用者推送訊息目前

<?php /* 呼叫方式簡單說明: $arr = array( 'account' => '公眾平臺帳號', 'password' => '密碼' ); $postMsg = new postMsg($arr); $postMsg->getAllUserInfo();//獲取所有使用者資訊 $postMsg->getUserInfo($groupid, $fakeid);//獲取所有使用者資訊,如果預設分組,則$groupid傳0 $postMsg->sendMessage('群發內容'); //群發給所有使用者 $postMsg->sendMessage('群發內容',$userId); //群發給特定使用者,這裡的$userId就是使用者的fakeid,陣列方式傳遞 */
class postMsg { public $userFakeid;//所有粉絲的fakeid private $_account;//使用者名稱 private $_password;//密碼 private $url;//請求的網址 private $send_data;//提交的資料 private $getHeader = 0;//是否顯示Header資訊 private $token;//公共帳號TOKEN private $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)); echo '</br>result'; echo $result; 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'=>"系統錯誤"))); 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); } //群發訊息 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']; } } } //共傳送使用者數 $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; } //獲取所有使用者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); var_dump($user); $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); //設定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); //自動設定Referer curl_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); //關閉curl return $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); // 自動設定Referer curl_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模擬登入指定使用者訊息目前

<?php /* 呼叫方式簡單說明: $arr = array( 'account' => '公眾平臺帳號', 'password' => '密碼' ); $postMsg = new postMsg($arr); $postMsg->getAllUserInfo()

公眾php模擬登入指定使用者訊息

模擬登入程式碼: <?php /* 呼叫方式簡單說明: $arr = array( 'account' => '公眾平臺帳號', 'password' => '密碼' ); $postMsg = new postMsg($arr); $p

公眾開發整理(六)--自定義選單事件

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("doPost");req.setCharacter

在電腦使用公眾或wap掃碼登陸解決方案

介紹: 在微信端或手機瀏覽器端,使用微信或手機的登陸狀態,掃碼登陸電腦版。 實現: 1、電腦端登陸頁面顯示二維碼,二維碼內容為以當前時間的加密token作為引數的URL,並把這串加密token儲存到資料庫。 2、在手機端掃碼後進入頁面拉取手機端的登陸狀態資訊,並綁定當前token儲存

公眾 基於PHP 拼團活動開發一 模板搭建

已測試號為例;使用者發起拼團活動(為團長),回覆給他帶有活動id與其openid的二維碼圖片,轉發給他人,已關注的掃碼之後儲存其openid,未關注的在關注之後儲存openid(防止重複參與)(團員),然後自動回覆團員自己活動資訊的二維碼。 1.微信公眾號後臺配置好 伺服器

支付V3公眾支付PHP教程(thinkPHP5公眾支付)/JSSDK的使用

掃二維碼關注,獲取更多技術分享 本文承接之前釋出的部落格《 微信支付V3微信公眾號支付PHP教程/thinkPHP5公眾號支付》必須閱讀上篇文章後才可以閱讀這篇文章。由於最近一段時間工作比較忙,部落格更新比較慢。如果有任何問題大家可以關注以上公眾

支付V3公眾支付PHP教程/thinkPHP5公眾支付

本篇文章是微信支付最新介面V3版本的PHP實踐教程,在該教程中主要使用的框架是thinkPHP5框架,如果你對thinkPHP5框架下的開發還不是很熟悉可以檢視相關的教程,當然在我的部落格中也有thinkPHP5的教程大家可以檢視。在本篇文章中我的主要目標

支付開發(二)----支付開發之公眾支付JAVA

一、開通微信公眾號 1.1公眾平臺帳號型別 微信公眾平臺分為服務號、企業號、訂閱號。 1、訂閱號:主要偏於為使用者傳達資訊(類似報紙雜誌),認證前後都是每天只可以群發一條訊息; 2、服務號:主要

公眾開發-java 騰訊課堂(消息收發 +圖靈聊天機器人)

請求 微信公眾 www. 包裝類 jsonarray 公眾號 cli robot lan 圖靈機器人 (第三方接口) 使用httpclientUtils工具類請求 #圖靈機器人 請求接口json數據 { "reqType":0, "perc

公眾開發-java 騰訊課堂(自定義菜單 菜單點擊事件)

文字 bubuko pid json格式 實體類 第三方接口 推送 sos 標題 接口調用請求說明 http請求方式:POST(請使用https協議) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=A

哪個公眾客服系統好用都有什麼功能?

現在越來越多的企業都投入微信營銷的大軍中,而創立微信公眾號成為大家的首選,但是想要輕鬆玩轉公眾號也不是那麼容易的,除了我們常遇到的吸粉難、粉絲轉化率低等問題,還跟微信服務號的客服功能比較薄弱有關,那麼要怎麼改善這種情況呢? 在這裡給大家推薦一款第三方客服系統-魚

java 公眾支付demo 企業支付到個人使用者、公眾企業付款到個人零錢提現到零錢

微信提現到零錢(微信內部交易,不需要手續費)價格格式錯誤:可能是價格經過計算後.doubleValue了一下 最後價格是 200.00 企業付款簽名錯誤:和支付的時候簽名的引數有出入(搞了半天,最後到看了一段php程式碼後做了一下調整。OK了) 參考PHP部落格:http:

公眾對接淘寶客系統淘口令解析

現在大家做淘寶客公眾號的比較多,最近也是開發了淘寶客系統,解析淘口令也算是比較煩心的一件事了。直接上思路+程式碼,不囉嗦。 首先我們判斷,使用者傳送的訊息中是否含有https://m.tb.cn,一般淘口令複製出來都是這個連結 if( Content.indexOf("https://m

公眾文章怎麽精準群發給指定用戶?

分享圖片 有時 導航 老板 log 展現 頁面 term 之前 微信公眾號文章一般默認是全體群發狀態,但如果想要把內容只展現給一部分用戶呢?其實很簡單,只需要根據之前設定好的標簽來群發就可以了,不過當然是你的標簽分類要簡潔合理,具體操作如下: 1、進入微信公眾平臺,左邊導航

玩玩公眾Java之二:接收、處理及返回消息

log med iou set arch weixin b- rom data- 前面已經配置了微信服務器,那麽先開始最簡單的接收微信消息吧~ 可以用我們的微信號來直接進行測試,下面先看測試效果圖: 這是最基本的文本消息的接收、處理及返回,來看看是怎麽實現的

php公眾支付接口開發demo

targe param pre space secret 修改 pen host field 本支付接口使用Yii2框架,所以控制器的格式都是該框架的,不過放到其他框架都差不多,根據對應的規則修改一下控制器的方法名字就行了,親測有效,比較簡單,沒有封裝,想了解微信支付實現

php公眾開發三公牛牛房卡平臺搭建使用php7要註意的地方

mar shadow 公眾號開發 jpg oss 文檔 微信公眾號開發 dem proc 開啟微信公眾號開發三公牛牛房卡平臺搭建網站(h5.fanshubbs.com聯系Q1687054422),從微信開發文檔中下載demo 如下載php示例代碼 示例代碼中是使用“$GL

PHP 公眾開發 - 消息

function mic req ade appid encode enc pub cnblogs 項目微信公眾號開發,需要做用戶消息推送,記錄下來以便日後使用 1,接上一篇文章,可以查看如何獲取用戶openid   PHP 微信公眾號開發 - 獲取用戶信息 2,添加模板消

PHP實現發模板消息到公眾

模板消息 red 這一 技術 template 公眾 rem out 開發 簡述:在這裏會具體講述到如何實現:如何通過後臺的代碼來實現發送模板消息到已經關註了“心想”公眾號的用戶。   (本人新手,目前實習中,我的所有文檔都是在自己開發過程中的記錄,有些言語跟我的項目有關請

php篇二 之公眾開發

mps timestamp brush ack article time curl lB -m 博主提示玩微信公眾號必須要有自己的服務器,其次有自己的微信公眾平臺,將自己的token保存在開發者模式中,將代碼上傳到服務器中,並且保存在開發者模式中。代碼類似如下 <?