### 关注事件 用户B扫描A的参数二维码时,存在以下可能: 1. B从未关注过此公众号 1. B关注过,出于某种不可告人的原因,取关了 1. B已经关注,忍不住掏出手机又扫了A的二维码 B关注公众号,可在之前的receiveEvent($object)方法中的switch语句增加一个case:subscribe ~~~ case "subscribe": $info = $weixin->get_user_info($openid); $result = Db::name('userfollow')->where('openid',$openid)->find(); if($result){ //更新用户信息 $municipalities = array("北京", "上海", "天津", "重庆", "香港", "澳门"); $sexes = array("", "男", "女"); $data = array(); $data['nickname'] = str_replace("'", "", $info['nickname']); $data['sex'] = $sexes[$info['sex']]; $data['country'] = $info['country']; $data['province'] = $info['province']; $data['city'] = (in_array($info['province'], $municipalities)) ? $info['province'] : $info['city']; $data['headimgurl'] = $info['headimgurl']; $data['resubscribe'] = $info['subscribe_time']; Db::name('userfollow')->where('openid',$openid)->update($data); $content = $info['nickname'].",欢迎回来!" ; $this->logger("aa "); }else { //增加一条用户信息 $municipalities = array("北京", "上海", "天津", "重庆", "香港", "澳门"); $sexes = array("", "男", "女"); $data = array(); $data['openid'] = $openid; $data['nickname'] = str_replace("'", "", $info['nickname']); $data['sex'] = $sexes[$info['sex']]; $data['country'] = $info['country']; $data['province'] = $info['province']; $data['city'] = (in_array($info['province'], $municipalities)) ? $info['province'] : $info['city']; $data['scene'] = (isset($object->EventKey))?str_replace("qrscene_","",$object->EventKey):"999"; $data['headimgurl'] = $info['headimgurl']; $data['subscribe'] = $info['subscribe_time']; $data['create_time'] = time(); Db::name('userfollow')->insert($data); $content = "欢迎关注," . $info['nickname']; } break; ~~~ 曾关注过(user表有记录)取关后再关注的,不再更新scene、openid、create_time、subscribe(改为resubscribe,这样既知道第一次关注时间,也知道最后一次关注时间,有的场景下需要这样的数据) * * * * * 取关时: ~~~ case "unsubscribe": $data['unsubscribe'] = strval($object->CreateTime); $data['status'] = 0; Db::name('userfollow')->where('openid',$openid)->update($data); break; ~~~ 什么时间取关的也做了记录,同时把状态更新为0。