同步新用户的OpenID之后,需要将该用户的基本信息也同步到数据库中。同步用户基本信息的代码如下。
1 public function updateInfo{
2 $weixin = new \weixin\Wxapi;
3
4 // 获取本地用户列表
5 $updateUser = Db::name('user')->where('subscribe','')->limit(100)->select;
6
7 if (count($updateUser) > 0){
8 $municipalities = array("北京", "上海", "天津", "重庆", "香港", "澳门");
9 $sexes = array("", "男", "女");
10
11 $new = 0;
12 foreach ($updateUser as &$user) {
13 $new ++;
14 $info = $weixin->get_user_info($user['openid']);
15 // var_dump($info);
16 $data = array;
17 $data['nickname'] = str_replace("'", "", $info['nickname']);
18 $data['sex'] = $sexes[$info['sex']];
19 $data['country'] = $info['country'];
20 $data['province'] = $info['province'];
21 $data['city'] = (in_array($info['province'], $municipalities))?$info
['province'] : $info['city'];
22 $data['headimgurl'] = $info['headimgurl'];
23 $data['subscribe'] = $info['subscribe_time'];
24 $data['heartbeat'] = $info['subscribe_time'];
25 $data['remark'] = $info['remark'];
26 $data['tagid'] = $info['tagid_list'];
27
28 Db::name('user')->where('openid', $user['openid'])->update($data);
// 根据条件更新记录
29 }
30
31 $this->success('更新了'.$new.'个用户','updateInfo');
32 }else{
33 $this->success('更新完成','index');
34 }
35 }
在上述代码中,先获取没有subscribe记录的100条微信用户记录,通过循环遍历的方式,将获取每个用户的基本信息,并写入数据库。在这个过程中,对于省份字段为“北京”“上海”“天津”“重庆”“香港”或“澳门”的用户,设置其城市字段和省份字段为同一值。
获取完100条记录之后,再次跳转到当前方法中更新下一组100条用户的信息。依此循环,直到找不到subscribe记录为空的用户就跳转到用户首页。