connectSbuIdOpenId != $subscription_openid) { $this->connect(get_db_connect($this->table, hash_code($subscription_openid))); $this->connectSbuIdOpenId = $subscription_openid; $this->subscription_id = $subscription_id; $this->open_id = $openid; } return $this; } /** * 粉丝取消关注 * @param null $time * @return SubscriptionFans|bool */ public function unsubscribe($time = null){ try{ $time = $time ?? time(); $update_data = ['subscribe_time' => $time, 'is_subscribe' => UserConstants::USER_IS_SUBSCRIBE_NO, 'subscription_extend' => UserConstants::USER_SUBSCRIPTION_EXTEND_NO, 'operate_time' => $time, 'updatetime' => $time]; $map = ['subscription_id' => $this->subscription_id,'openid' => $this->open_id]; Log::info('Subscription->wechat:订阅号取消关注维护,SubscriptionID:'.$this->subscription_id.' OpenID:'.$this->open_id); return $this->where($map)->update($update_data); }catch (\Exception $e){ Log::info('Subscription->wechat:订阅号取消关注维护,SubscriptionID:'.$this->subscription_id.' OpenID:'.$this->open_id.' Error:'.$e->getMessage()); } return false; } /** * 更新粉丝的交互时间 */ public function updateOperateTime(){ $map = ['subscription_id' => $this->subscription_id,'openid' => $this->open_id]; if($this->where($map)->find()){ $this->where($map)->update(['operate_time'=>time()]); } } /** * 获取粉丝用户ID * @return mixed */ public function getFansId(){ $map = ['subscription_id' => $this->subscription_id,'openid' => $this->open_id]; return $this->where($map)->value('id'); } /** * 创建粉丝 * @param $officialAccount * @param null $time * @return bool */ public function createFans($officialAccount,$time = null){ try{ $time = $time ?? time(); $map = ['subscription_id' => $this->subscription_id,'openid' => $this->open_id]; //Redis 加锁 $redis = Redis::instanceCache(); $nxKey = 'S:'.$this->subscription_id.':'.$this->open_id; //检测Fans是否存在 if(!$fans = $this->where($map)->find()){ //获取Fans信息 $weChatUserInfo = $officialAccount->user->get($this->open_id); // 获取redis自增id $redisAuto = Redis::instanceAuto(); $userId = $redisAuto->incr('FID'); //redis自增返回新的user_id $data = [ 'id' => $userId, 'subscription_id' => $this->subscription_id, 'openid' => $this->open_id, 'nickname' => $weChatUserInfo['nickname'] ?? '书友', 'avatar' => $weChatUserInfo['headimgurl'] ?? cdnurl('/assets/img/frontend/icon/nav_icon_4.png'), 'sex' => $weChatUserInfo['sex'] ?? 0, 'is_subscribe' => 1, 'subscribe_time'=> $time, 'operate_time'=>$time, 'createtime'=>time(), 'updatetime'=>time() ]; //获取锁 if(!$nxRes = $redis->setnx($nxKey,0)){ //已经存在 return false; } $redis->expire($nxKey,20); //20秒过期 //同步Fans数据 if(!$is_insert = $this->insertGetId($data)){ Log::error("Subscription Create Fans Fail SubscriptionID:{$this->subscription_id} OpenID:{$this->open_id}"); $redis->del($nxKey); return false; } Log::info("Subscription Create Fans Success SubscriptionID:{$this->subscription_id} OpenID:{$this->open_id}"); $redis->del($nxKey); } return true; }catch (\Exception $e){ Log::error("Subscription Create Fans Error:".$e->getMessage()); } return false; } }