名著阅读 > 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 > 25.5.2 同步用户基本信息 >

25.5.2 同步用户基本信息

同步新用户的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记录为空的用户就跳转到用户首页。