send();
}
private function generateRequest()
{
$switch_array = [];
$start = $this->option('start',0);
$end = $this->option('end');
$temp = $start;
$continueReadUrlFormat = 'https://site%s.%s.com/sign';
$info = DB::connection('api_mysql')->table('custom_msg_switchs')->where('custom_category','remind_sign')->first();
if(!$info) return ;
$default_status = $info->default_switch_status;
while (true){
if($end == -1){
$user = DB::connection('api_mysql')->table('temp_force_subscribe_users')
->select('id','uid','distribution_channel_id','openid','appid')
->where('id','>',$temp)
->where('last_interactive_time','>',date('Y-m-d H:i:s',time()-86400*2))
->orderBy('id')
->limit(5000)
->get();
}else{
$user = DB::connection('api_mysql')->table('temp_force_subscribe_users')
->select('id','uid','distribution_channel_id','openid','appid')
->where('id','>',$temp)
->where('id','<=',$end)
->where('last_interactive_time','>',date('Y-m-d H:i:s',time()-86400*2))
->orderBy('id')
->limit(5000)
->get();
}
if(!$user) break;
foreach ($user as $item){
//if(!in_array($item->distribution_channel_id,[70])) continue;
//\Log::info( '---------------------------start--start-------------------------------------------' );
//\Log::info('$item->distribution_channel_id is :'.$item->distribution_channel_id );
//\Log::info( 'remindSign $item->id is :'.$item->id );
if(!isset($switch_array[$item->distribution_channel_id])){
$switch = DB::connection('api_mysql')->table('custom_msg_switchs_msgs')
->where('distribution_channel_id',$item->distribution_channel_id)
->where('custom_category','remind_sign')
->select('status')
->first();
if($switch){
$switch_array[$item->distribution_channel_id] = $switch->status;
}else{
$switch_array[$item->distribution_channel_id] = $default_status;
}
}
$switch_status = $switch_array[$item->distribution_channel_id];
if($switch_status != 1) continue;
//\Log::info( 'remindSign $item->distribution_channel_id in is :'.$item->distribution_channel_id );
$is_sign = $this->isSign($item->uid);
if(!$item->uid)$item->uid = 0;
//\Log::info( $read_info );
//\Log::info( 'uid is :'.$item->uid );
if($is_sign) continue;
$user_info = DB::connection('api_mysql')->table('users')->where('id',$item->uid)->select('nickname','openid','created_at')->first();
$nickname = '读者';
if($user_info && $user_info->nickname)$nickname = $user_info->nickname;
$openid = $item->openid;
$appid = $item->appid;
//$url = sprintf($continueReadUrlFormat,encodeDistributionChannelId($item->distribution_channel_id),env('CUSTOM_HOST'));
$url = 'weixin://bizmsgmenu?msgmenucontent=签到&msgmenuid=1';
$guide_status = false;
if($user_info){
$guide_status = UserSignService::guideFans($item->uid,$item->distribution_channel_id,$user_info->openid,$user_info->created_at);
}
if($guide_status){
$guide_link = 'https://site'.encodeDistributionChannelId($item->distribution_channel_id).'.leyuee.com/guidestrem?uid='.$item->uid.'&fee=500';
$content_format = "亲爱的%s,您今日还未签到,本次签到最高可领取150书币哦\r\n\r\n❤点击此处签到领书币\r\n\r\n免费领取500书币奖励>> \r\n\r\n为了方便下次阅读,请置顶公众号";
$content = sprintf($content_format,$nickname,$url,$guide_link,
'https://help.zhuishuyun.com/top.html'
);
}else{
$content_format = "亲爱的%s,您今日还未签到,本次签到最高可领取150书币哦\r\n\r\n❤点击此处签到领书币\r\n\r\n\r\n为了方便下次阅读,请置顶公众号";
$content = sprintf($content_format,
$nickname,$url,
'https://help.zhuishuyun.com/top.html'
);
}
$accecc_token = $this->getAccessToken($appid);
if(!$accecc_token)continue;
$url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$accecc_token;
$request = new GuzzleRequest('post',$url,[],\GuzzleHttp\json_encode([
'touser'=>$openid,
'msgtype'=>'text',
'text'=>['content'=>$content]
],JSON_UNESCAPED_UNICODE));
//\Log::info( '----------------------------end-end-end-------------------------------------------' );
yield $request;
}
$temp = $item->id;
}
}
private function getAccessToken($appid){
try{
$WechatController = new WechatController($appid);
$accessToken = $WechatController->app->access_token; // EasyWeChat\Core\AccessToken 实例
$token = $accessToken->getToken(); // token 字符串
return $token;
}catch(\Exception $e){
\Log::error($e->getMessage());
}
return '';
}
private function send(){
$client = new Client();
$requests = $this->generateRequest();
$pool = new Pool($client, $requests, [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
},
'rejected' => function ($reason, $index) {
},
]);
$promise = $pool->promise();
$promise->wait();
}
private function isSign($uid){
$sign_day = Redis::hget('book_read:' . $uid,'sign_day');
if ($sign_day && $sign_day == date('Y-m-d')) {
return true;
}
return false;
}
}