一个微信公众号可以有多个或是成百上千的粉丝关注,如果我们想要知道哪些人关注我们并展示在我们本地的网页展示出来该如何做呢?
每个用户关注公众号都会生成一个唯一的openID,我们通过openID来获取用户的信息,那么如何先来获取openID呢?我们就需要调用api借口
其中的ACCESS_TOKEN我们需要根据实际情况来进行填写,其后的next_openid=NEXT_OPENID默认情况下从头开始拉取用户列表,若调用成功会出现如下数据
错误时
获取openID成功之后,我们采用批量获取用户的方法即
http请求方式: POST
https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN
提交的post数据如下
{
"user_list": [
{
"openid": "otvxTs4dckWG7imySrJd6jSi0CWE",
"lang": "zh_CN"
},
{
"openid": "otvxTs_JZ6SEiP0imdhpi50fuSZg",
"lang": "zh_CN"
}
]
}
由于我们用的是tp3批量获取用户的方法不太好,于是我们重写了
public static function getUsersInfo($openIds){
//获取ACCESS_TOKEN
$accessToken = getAccess_token();
$queryUrl = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token='.$accessToken;
$json = json_encode(array('user_list'=>$openIds));
return Curl::callWebServer($queryUrl, $json, 'POST');
}
通过调用此方法获取用户的详细信息就出来了
以下是我的详细代码
<?php
namespace Home\Controller;
use Think\Controller;
use LaneWeChat\Core\UserManage;
use LaneWeChat\Core\Curl;
class GetUserInfoController extends Controller{
function index(){
$mp = getCurrentMp(); //获取当前使用的公众号的基本信息
$mp_id = $mp['id'];
M('mp_friends')->where("mp_id=$mp_id")->delete();
if(empty($mp)){
$this->ajaxReturn(array('error'=>true,'msg'=>'无法使用此公众号','url'=>U('mp/index')));
exit;
}
include APP_PATH . 'LaneWeChat/lanewechat.php';
$ret2=UserManage::getFansList(); // 获取用户信息列表
$openids =$ret2['data']['openid'];
$arr = array();
foreach ($openids as $value) {
$row['openid']= $value;
$row['lang']= 'zh-CN';
$arr[]= $row;
}
$ret1=UserManage::getUsersInfo($arr);// 获取用户详细信息
if (isset($ret1['user_info_list'])) {
$data =$ret1['user_info_list'];
foreach ($data as &$value) {
$value['mp_id']= $mp_id;
$value['tagid_list']=json_encode($value['tagid_list']);
}
$result=M('mp_friends')->addAll($data); // 将获取用户详细信息添加到本地数据库中
}
$this->display('index1');
}
function index1(){
$friends = M('mp_friends');
$result=$friends->select();
$this->assign('data',$result);
$this->display('index1');
}
}