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