在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)。公众号可通过本接口来根据OpenID获取用户基本信息。
一,获取用户基本信息:开发者可通过OpenID来获取
http请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
二,批量获取用户基本信息
http请求方式: POST
https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN
在同步粉丝之前,需查看正在使用的公众号。代码如下:
private $mp;
public function _initialize(){
$mp=getCurrentMp();
if(empty($mp)){
$this->error('无使用的公众号',U('mp/index'));
exit;
}else{
$this->mp=$mp;
}
}
同步粉丝时,需获取粉丝的所有信息,包括昵称,头像等,代码如下:
public function sycFans(){
$mp=$this->mp;
include APP_PATH.'LaneWeChat/lanewechat.php';
$ret=UserManage::getFansList();//取出所有信息
// print_r($ret);
// exit;
$openids=$ret['data']['openid'];//取得openid
// print_r($openids);
$arr=array();
foreach ($openids as $value) {
$row=array();
$row['openid']=$value;
// print_r($row['openid']);
// exit;
$row['lang']="zh_CN";
$arr[]=$row;
}
// print_r($arr);
$ret=UserManage::getManyUserInfo($arr);
// print_r($ret);
// $data=$ret['user_info_list'];
// print_r($data);
if(isset($ret['user_info_list'])){
$data=$ret['user_info_list'];
// print_r($data);
$fans=M('mp_friends');
$fans->where("mp_id={$mp['id']}")->delete();
foreach ($data as &$value) {
$value['mp_id']=$mp['id'];
// $value['mp_id']=$mp['id'];
$value['tagid_list']=implode(',',$value['tagid_list']);
}
$fans->addAll($data);
}
$this->success('同步完成',U('index'));
}
首先使用UserManage来取出所有信息,然后再取得openid,因为时二维数组,所以需要遍历数组,并获取标签,最后同步完成。
当获取的所有信息中头像不显示时,可编写如下代码:
//显示图片
public function showMpImg($url){
header('content-type:image/jpeg');
echo file_get_contents($url);
}
显示之后,可根据标签分组并显示,代码如下:
public function index($tagid=''){
$mp=$this->mp;
$where['mp_id']=$mp['id'];
if(!empty($tagid)){
$where['tagid_list']=array('like',"%{$tagid}%");
}
$data=M('mp_friends')->where($where)->field('id,headimgurl,nickname,subscribe_time,openid,tagid_list')->order()->select();
$tag=M('tags')->where($where)->select();
$this->assign('tag',$tag);
$this->assign('friendList',$data);
$this->display();
}
同步完成,显示出来,根据标签也可完成显示。