model = model('SubscriptionRelation'); } public function index(){ if($this->request->isAjax()){ list($where, $sort, $order, $offset, $limit) = $this->buildparams(); //检测VIP OR 渠道 if($this->group == Auth::GROUP_ID_VIP_OPERATION){ $admin_id = $this->auth->vip_id; }else{ $admin_id = $this->auth->id; } $total = $this->model ->join('Subscription sub','sub.id = subscription_relation.subscription_id','left') ->join('Subscription_token token','token.subscription_id = sub.id','left') ->field('subscription_relation.admin_id,sub.id,sub.name,sub.json,token.updatetime,sub.status') ->where('admin_id',$admin_id) ->where($where) ->count(); $list = $this->model ->join('Subscription sub','sub.id = subscription_relation.subscription_id','left') ->join('Subscription_token token','token.subscription_id = sub.id','left') ->field('subscription_relation.admin_id,sub.id,sub.name,sub.json,token.updatetime,sub.status') ->where('admin_id',$admin_id) ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); return json(array("total" => $total, "rows" => $list)); }else{ //检测VIP OR 渠道 if($this->group == Auth::GROUP_ID_VIP_OPERATION){ $admin_id = $this->auth->vip_id; }else{ $admin_id = $this->auth->id; } //获取对应用户默认平台信息 $adminConfig = model('AdminConfig')->where('admin_id',$admin_id)->find(); if(!$platform = model('platform')->whereIn('id',$adminConfig['platform_id'])->where(['status'=>'1'])->find()){ $this->error("没有平台信息"); } if(!$adminConfig['is_subscription']){ $this->error('没有开通订阅号权限,如需开通请联系商务'); } //获取微信授权地址 $wechat = config('wechat'); $wechat['app_id'] = $platform['appid']; $wechat['secret'] = $platform['secret']; $wechat['token'] = $platform['token']; $wechat['aes_key'] = $platform['aes_key']; if ($proxy = OpenPlatformService::instance()->getProxy($platform['id'])) { $wechat['http'] = array_merge(Config::get('wechat.http'), ['proxy' => $proxy]); } $openPlatform = Factory::openPlatform($wechat); $openPlatform['cache'] = new RedisCache(Redis::instanceCache()); $params = [ //跳转参数 'platform_id' => $platform['id'], 'admin_id' => $admin_id, 'backurl' => $this->request->scheme() . '://' . get_host_no_port() . '/admin/subscription/index' ]; $url = $openPlatform->getPreAuthorizationUrl(\think\Config::get('site.scheme').'://'.$platform['authhost'].'/admin/subscription/wxcallback?'.http_build_query($params)); $platform['url'] = \think\Config::get('site.scheme').'://'.$platform['authhost'].'/admin/subscription/wxre?url='.base64_encode($url); //获取授权订阅号资格 $sys_is_auth = model('AdminConfig')->where('admin_id',$admin_id)->value('is_subscription'); $sys_auth_num = model('AdminConfig')->where('admin_id',$admin_id)->value('subscription_num'); $sub_num = model('SubscriptionRelation')->where(['admin_id'=>$admin_id])->count(); if($sys_is_auth && $sub_num < $sys_auth_num){ $is_auth = true; }else{ $is_auth = false; } //检查VIP if($this->group == Auth::GROUP_ID_VIP || $this->group == Auth::GROUP_ID_VIP_OPERATION){ $is_vip = true; }else{ $is_vip = false; } $this->assign('is_vip',$is_vip); $this->assign('platform',$platform); $this->assign('sub_is_auth',$is_auth); $this->assign('sys_auth_num',$sys_auth_num); $this->assignconfig('sub_is_auth',$is_auth); $this->assignconfig('auth_url',$platform['url']); return $this->view->fetch(); } } public function manager(){ if($this->request->isAjax()){ $this->searchFields = 'id'; list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = model('Subscription') ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->count(); $list = model('Subscription') ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); return json(array("total" => $total, "rows" => $list)); }else{ return $this->view->fetch(); } } public function fans(){ if($this->request->has('ids')){ $id = $this->request->param('ids'); $appid = model('Subscription')->where('id',$id)->value('appid'); $mq = new Rabbitmq(); $mq->send(['subscription_id'=>$id,'appid'=>$appid],self::MQ_QUEUE_SUBSCRIPTION_TASK,self::MQ_EXCHANGE_SYNC); Log::info('syncSubscription->Queue: subscription_id:'.$id.'Appid:'.$appid.' 添加订阅号粉丝同步任务'); $this->success('同步任务添加成功'); }else{ $this->error('参数错误'); } } public function detail(){ if($this->request->has('ids')){ $id = $this->request->param('ids'); $this->assign('sync',model('SubscriptionSync')->where('subscription_id',$id)->find()); return $this->view->fetch(); }else{ $this->error('参数错误'); } } public function del($ids = null){ if(is_numeric($ids) && $ids){ //检测VIP OR 渠道 if($this->group == Auth::GROUP_ID_VIP_OPERATION){ $admin_id = $this->auth->vip_id; }else{ $admin_id = $this->auth->id; } $this->model->where(['subscription_id'=>$ids,'admin_id'=>$admin_id])->delete(); $this->success('操作成功'); }else{ $this->error('参数错误'); } } /** * 同步渠道订阅号 */ public function sync(){ //检测VIP OR 渠道 if($this->group == Auth::GROUP_ID_VIP_OPERATION){ $admin_id = $this->auth->vip_id; }else{ $admin_id = $this->auth->id; } //获取用户订阅号相关信息 $sub_num = model('SubscriptionRelation')->where(['admin_id'=>$admin_id])->count(); $sys_is_auth = model('AdminConfig')->where('admin_id',$admin_id)->value('is_subscription'); $sys_auth_num = model('AdminConfig')->where('admin_id',$admin_id)->value('subscription_num'); if($this->request->isAjax()){ $err_ids = []; if(!$sub_ids = $this->request->param('ids/a')){ $this->error('请选择要同步的订阅号'); } if(count($sub_ids) > Config::get('site.sync_sub_max')){ $this->error('单次同步超过指定数量'.Config::get('site.sync_sub_max')); } if((count($sub_ids) + $sub_num) > $sys_auth_num){ $this->error('订阅号数量超过系统限定数量'); } $sub_list = model('Subscription')->where('status','normal')->column('id'); foreach($sub_ids as $sub_id){ if(in_array($sub_id,$sub_list)){ if(!model('Subscription_relation')->insert(['admin_id'=>$admin_id,'subscription_id'=>$sub_id,'createtime'=>time(),'updatetime'=>time()])){ array_push($err_ids,$sub_id); } }else{ array_push($err_ids,$sub_id); } } if(count($err_ids) == 0){ $this->success('绑定成功'); }else{ $list = model('Subscription')->whereIn('id',implode(',',$err_ids))->column('name'); $this->error(implode(',',$list).'绑定失败'); } }else{ if($sys_is_auth && $sub_num < $sys_auth_num){ $is_auth = true; }else{ $is_auth = false; } //获取订阅号列表 $channel_ids = model('VipAdminBind')->where(['admin_id_master'=>$admin_id])->column('admin_id_slave'); $subscription_ids = model('SubscriptionRelation')->whereIn('admin_id',implode(',',$channel_ids))->column('subscription_id'); $subscription_ids = array_unique($subscription_ids); $vip_sub_ids = model('SubscriptionRelation')->where('admin_id',$admin_id)->column('subscription_id'); $sub_list = model('Subscription')->where('status','normal')->whereIn('id',implode(',',array_diff($subscription_ids,$vip_sub_ids)))->select(); $this->assign('sub_list',$sub_list); $this->assign('sub_is_auth',$is_auth); $this->assign('sub_auth_num',$sub_num); $this->assign('sys_auth_num',$sys_auth_num); $this->assignconfig('sub_is_auth',$is_auth); return $this->view->fetch(); } } public function wxcallback(){ $url = rawurldecode($this->request->get('backurl')); $sub_id = $this->request->param('sub_id') ?? null; try{ $wechatAuth = new SubscriptionAuth($this->request->get('platform_id'),$this->request->get('admin_id')); $wechatAuth->authorization($this->group,$sub_id); }catch (\Exception $e){ Log::error('Wechat Authorization Platform_id:'.$this->request->get('platform_id').' Admin_id:'.$this->request->get('admin_id').' Error:'.$e->getMessage()); $this->error($e->getMessage(),$url); } $this->success('授权成功',$url,'',1); } public function wxre(){ $url = base64_decode($this->request->get('url')); $sub_id = $this->request->param('ids') ?? null; if($sub_id){ $urlArray = explode('wxcallback%3F',$url); $url = $urlArray[0].'wxcallback%3Fsub_id%3D'.$sub_id.'%26'.$urlArray[1]; } $this->assign('url',$url); return $this->view->fetch(); } }