1. 程式人生 > >微信公眾號--獲取使用者列表

微信公眾號--獲取使用者列表

之前其實寫過一次微訊號的簡單開發,包括選單自動回覆拉取使用者資訊等簡單的微信公眾號的開發,今天又用到了,然後發現自己還是忘記了,看來記錄下來是真的有必要的。我今天主要是寫了拉取使用者資訊,所以我這比寫的也就是拉取使用者資訊。

這裡使用的還是TP的框架寫的php程式碼進行開發的。

1.對使用的公眾號進行基本配置



程式碼:

 //微信驗證
    public function checkWechat(){
       // $weixin=M("maiclub_weixin");
       // $res=$weixin->select();
       // foreach($res as $value){
        //    $token=$value["token"];
       // }
        define("TOKEN",'erdangjia');
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        $echoStr = $_GET["echostr"];
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );


        if( $tmpStr == $signature ){
            echo $echoStr;
            responseMsgs();
            return true;
        }else{
            return false;
        }


    }

  這裡主要注意token一樣還有就是地址就可以

2.獲取token


程式碼:

/****
獲取Token
*****/
function getWeChatToken() {
   // $token = S('access_token');
   // $weixin=M("maiclub_weixin");
   // $data=$weixin->select();
   // foreach($data as $value){
    //    $appid=$value["appid"];
       // $appsecret=$value['appsecret'];
    //}
$appid="";
$appsecret=" ";
    if (empty($token)) {
        $res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret);
        $res = json_decode($res, true);
        $token = $res['access_token'];
        // 注意:這裡需要將獲取到的token快取起來(或寫到資料庫中)
        // 不能頻繁的訪問https://api.weixin.qq.com/cgi-bin/token,每日有次數限制
        // 通過此介面返回的token的有效期目前為2小時。令牌失效後,JS-SDK也就不能用了。
        // 因此,這裡將token值快取1小時,比2小時小。快取失效後,再從介面獲取新的token,這樣
        // 就可以避免token失效。
        // S()是ThinkPhp的快取函式,如果使用的是不ThinkPhp框架,可以使用你的快取函式,或使用資料庫來儲存。
        S('access_token', $token, 3000);
    }
    return $token;
}

這裡要填寫的appid和AppSecret 直接從公眾平臺的基本配置中複製出來就可以,關鍵我這邊是已經寫死了,事實上可以從資料庫中調取,我只是為了自己嘗試的時候方便所以才這麼寫的。

還有一點,我將這一段程式碼寫到了 這邊。我最開始第一次的時候是寫到了config當中,然而寫在這個裡面比較的不合適,後來就改到了function當中。

這邊設定好之後可以再控制器中

    public function getWeixinToken(){
        echo getWeChatToken();die();
    }

利用這兩行程式碼列印測試一下是不是可以大英出token 要是可以的話就是成功獲取token。

3.拉取使用者列表

  1)拉取使用者資訊首先要獲取使用者的openid

  

程式碼:

//獲取使用者openid
function getOpenid(){
    define("ACCESS_TOKEN",getWeChatToken());
    $url="https://api.weixin.qq.com/cgi-bin/user/get?access_token=".ACCESS_TOKEN;
    $res = https_request($url);
    $data = json_decode($res,true);
    $openid = $data['data']['openid'];


    return $openid;
}

這段程式碼我依舊是作為方法寫在了function當中的。

2)獲取使用者列表


程式碼:

//獲取使用者列表
    public function getuserLists(){
        if(checkLogin()){
            $assignArr = array(
                "leftWxManager" => 1,//是否選中
                "leftgetuserLists" => 1,//基本資訊是否選中
            );
            $role=I('session.role');
            if($role != 0){
                echo"<script>alert('您沒有許可權')</script>";
                echo "<script>location.href= '../Index/index'</script>";
            }else{
               // dump(getOpenid());die();
                $userModel=M('maiclub_user');
                define("ACCESS_TOKEN",getWeChatToken());
               foreach (getOpenid() as $val){
                   if($userModel->where("openid = '{$val}'")->find()){
                        //echo 1111;
                   }else{
                       $urlInfo="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".ACCESS_TOKEN."&openid=".$val."&lang=zh_CN";
  
                       $resInfo = https_request($urlInfo,true);
                       $userLists=json_decode($resInfo,true);
                       $userModel->add($userLists);
  //dump($userLists);
                   }
                }
//die();
                $records=I('cookie.records');
                $search=I('post.search');
                if($records == ''){
                    $records =10;
                }
                if($search==''){
                $count = $userModel->count();// 查詢滿足要求的總記錄數
                $Page = new  \Think\Page($count,$records);// 例項化分頁類 傳入總記錄數和每頁顯示的記錄數(10)
                $show = $Page->show();// 分頁顯示輸出
                $userModel->create();
                $data3=$userModel->limit($Page->firstRow.','.$Page->listRows)->select();
                }else{
                    $data3=$userModel->where("nickname like '%{$search}%' || city like '%{$search}%' || province like '%{$search}%' || openid like '%{$search}%'")->select();


                }




                $this->assign('userWx',$data3);
                $this->assign('num',$Page->listRows);
                $this->assign('count',$count);
                $this->assign('page',$show);// 賦值分頁輸出
                $this->assign($assignArr);
                $this->display();
            }
        }


    }

這裡就是獲取使用者列表同時還有個入庫的過程,資料庫中欄位只要寫了就可以成功入庫,如果想要知道他具體能獲取到哪些欄位,欄位分別是什麼意思,一個可以列印程式碼中的$userLists(必須沒有入庫之前列印,也就是說,如果你入庫一次了,第二次重新整理列印只會有新關注的人,如果這段時間沒有新的關注這裡就會顯示NULL),或者直接在微信公眾平臺的開發者手冊中


這個裡面也詳細的寫了每個欄位的意思和有哪些欄位。

以上應該就是拉取公眾號關注的使用者的全部內容。