微信公众号--获取用户列表

之前其实写过一次微信号的简单开发,包括菜单自动回复拉取用户信息等简单的微信公众号的开发,今天又用到了,然后发现自己还是忘记了,看来记录下来是真的有必要的。我今天主要是写了拉取用户信息,所以我这比写的也就是拉取用户信息。

这里使用的还是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

微信公众号--获取用户列表_第1张图片

代码:

/****
获取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当中。

微信公众号--获取用户列表_第2张图片

这边设置好之后可以再控制器中

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

利用这两行代码打印测试一下是不是可以大英出token 要是可以的话就是成功获取token。

3.拉取用户列表

  1)拉取用户信息首先要获取用户的openid

  微信公众号--获取用户列表_第3张图片

代码:

//获取用户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)获取用户列表

微信公众号--获取用户列表_第4张图片

代码:

//获取用户列表
    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),或者直接在微信公众平台的开发者手册中


这个里面也详细的写了每个字段的意思和有哪些字段。


以上应该就是拉取公众号关注的用户的全部内容。

你可能感兴趣的:(微信公众号--获取用户列表)