同步新用戶的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記錄為空的用戶就跳轉到用戶首頁。