对于新关注的用户,在其关注时直接将其用户信息插入数据库表,方法与同步信息时类似。对于取消关注的用户,使用db助手函数将其从表中删除。其相应代码如下。
1 // 接收事件消息 2 private function receiveEvent($object) 3 { 4 $weixin = new \weixin\Wxapi; 5 $openid = strval($object->FromUserName); 6 $content = ""; 7 switch ($object->Event) 8 { 9 case "subscribe": 10 $info = $weixin->get_user_info($openid); 11 $municipalities = array("北京", "上海", "天津", "重庆", "香港", "澳门"); 12 $sexes = array("", "男", "女"); 13 $data = array; 14 $data['openid'] = $openid; 15 $data['nickname'] = str_replace("'", "", $info['nickname']); 16 $data['sex'] = $sexes[$info['sex']]; 17 $data['country'] = $info['country']; 18 $data['province'] = $info['province']; 19 $data['city'] = (in_array($info['province'], $municipalities))?$info ['province'] : $info['city']; 20 $data['scene'] = (isset($object->EventKey) && (stripos(strval($object-> EventKey),"qrscene_")))?str_replace("qrscene_","",$object->EventKey):"0"; 21 $data['headimgurl'] = $info['headimgurl']; 22 $data['subscribe'] = $info['subscribe_time']; 23 $data['heartbeat'] = time; 24 $data['remark'] = $info['remark']; 25 $data['score'] = 1; 26 $data['tagid'] = $info['tagid_list']; 27 Db::name('user')->insert($data); 28 $content = "欢迎关注,".$info['nickname']; 29 break; 30 case "unsubscribe": 31 db('user')->where('openid',$openid)->delete; 32 break; 33 default: 34 $content = ""; 35 break; 36 } 37 if(is_array($content)){ 38 $result = $this->transmitNews($object, $content); 39 }else{ 40 $result = $this->transmitText($object, $content); 41 } 42 return $result; 43 }