微信开发批量获取用户信息

浏览:5123 发布日期:2016/07/11 分类:功能实现 关键字: 微信开发,批量获取
批量获取用户的信息
我们知道,每个微信用户都有一个openid,只有他关注我们的公众号,我们就可以轻松得拿到他的基本信息。 public  function  synchronous()//同步公众号用户的信息
    {
        set_time_limit(0);//设置超时  
        $token = get_token();//获取公众号的token(以这样开头的gh_xxxxxxx)
        $access_token = get_access_token();//这个方法我就不介绍了,官网上有例子
        $url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token;
        $res = $this->http_get($url);
        $ress = json_decode($res,true);
        $openidLists = $ress['data']['openid'];
        $total = $ress['total'];        
        foreach($openidLists as $r){        
        $url2 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$r."&lang=zh_CN";
        $resa = http_get($url2);
        $res2 = json_decode($resa,true);
            $result = M("ucenter_member")->where(array('token'=>$token,'openid'=>$r))->find();
            if(!$result)//数据库没有存在该用户就添加
            {                                            
                static $_email_int = 0;
                $email = time () . rand ( 01, 99 ) . $_email_int . '@weiphp.cn';
                $nickname = uniqid () . rand ( 01, 99 ) . $_email_int;                
                 $data=array(
                 'username'=>$nickname,
                 'password'=>md5('123456'),
                 'email'=>$email,
                'mobile'=>'',
                'reg_time'=>time(),
                'reg_ip'=>get_client_ip(),
                'last_login_time'=>time(),
                'last_login_ip'=>get_client_ip(),
                'update_time'=>time(),
                'status'=>1,
                'openid'=>$r,
                'token'=>$token
                );                
                $uid=M("ucenter_member")->add($data);
                //第二步,同步follow表数据
                    if($uid > 0){
                        //删除不需要的数据
                        unset($res2['subscribe']);
                        unset($res2['remark']);
                        unset($res2['groupid']);
                        $res2['uid']=$uid;
                        $res2['token']=$token;
                        //M("follow")->where(array('token'=>$token,'openid'=>$r))->save($res2);
                        $rr = M("follow")->where(array('token'=>$token,'openid'=>$r))->find();
                        if(!$rr){
                            M("follow")->add($res2);
                        }else{
                            M("follow")->where(array('token'=>$token,'openid'=>$r))->save($res2);
                        }
                        //第三步,同步member表数据
                    $userinfo = array(
                            'nickname'=>$res2['nickname'],
                            'sex'=>$res2['sex'],
                            'uid'=>$result['id']
                    );
                    $rr2 = M("member")->where(array('uid'=>$result['id']))->find();
                    if(!$rr2){
                         M("member")->add($userinfo);
                    }else{
                        M("member")->where(array('uid'=>$result['id']))->save($userinfo);
                    }
                        
                        
                    }                
            }
            else{//存在才更新一下
                    //删除不需要的数据
                    unset($res2['subscribe']);
                    unset($res2['remark']);
                    unset($res2['groupid']);
                    $res2['uid'] = $result['id'];
                    $res2['token'] = $token;
                    $rr = M("follow")->where(array('token'=>$token,'openid'=>$r))->find();
                    if(!$rr){
                        M("follow")->add($res2);
                    }else{
                        M("follow")->where(array('token'=>$token,'openid'=>$r))->save($res2);
                    }
                    //更新member表
                    $userinfo = array(
                            'nickname'=>$res2['nickname'],
                            'sex'=>$res2['sex'],
                            'uid'=>$result['id']
                    );
                    $rr2 = M("member")->where(array('uid'=>$result['id']))->find();
                    if(!$rr2){
                         M("member")->add($userinfo);
                    }else{
                        M("member")->where(array('uid'=>$result['id']))->save($userinfo);
                    }
                }            
          }
          
          echo json_encode(array('msg'=>"更新成功,本次更新".$total."条用户数据!",'status'=>1));                   
    }
/**
* GET 请求
* @param string $url
*/
 public function http_get($url){
    $oCurl = curl_init();
    if(stripos($url,"https://")!==FALSE){
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
    }
    curl_setopt($oCurl, CURLOPT_URL, $url);
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
    $sContent = curl_exec($oCurl);
    $aStatus = curl_getinfo($oCurl);
    curl_close($oCurl);
    if(intval($aStatus["http_code"])==200){
        return $sContent;
    }else{
        return false;
    }
 }
目前我上面的方法有个弊端就是同步的时候老是卡断,比如公众号有5000以上的用户,就不行了,同步的时候会经常卡断,要多运行几次,才能同步完整,不知道大家有啥好的办法,解决这个问题。欢迎指导!

最后我把数据据给大家加上,方便使用。

另外附上QQ群:515187709

附件 test.rar ( 1.53 KB 下载:50 次 )

评论( 相关
后面还有条评论,点击查看>>