sms = $sms; } // /** * 处理微信的请求消息 * * @return string */ public function serve(Request $request) { // Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志 $app = app('wechat.mini_program'); $app->server->push(function ($message) { // $message = array ( // 'ToUserName' => 'gh_66ddebb44654', // 'FromUserName' => 'oVEaG5KqLUpuz0CukddVMSq5as_o', // 'CreateTime' => '1611050964', // 'MsgType' => 'miniprogrampage', // 'MsgId' => '23064700922189383', // 'Title' => '获取服务号二维码', // 'AppId' => 'wxc41491431733671e', // 'PagePath' => 'pages/tabBar/home', // 'ThumbUrl' => 'http://mmbiz.qpic.cn/mmbiz_jpg/o4p1tZHtvpAFBQhOjo96xRia72TpcJ7biaZCEiadbSlqjSfLAa65dTUbPYgdaORNfiaoDpbeHbicGseFp9UedT46AsQ/0', // 'ThumbMediaId' => 'zTMcYIe19PQewxzLyNTnBOjgYmei-CMvTQi_4gtW43JmrKzfckh9wuZNt09-kznC', // ); $this->recvMessage($message); return "您好!欢迎使用福恋小程序"; }); // Log::info('response arrived.'); return $app->server->serve(); } public function merchantWorkServer() { $config = config('wechat.work_merchant'); $app = Factory::openWork($config); $server = $app->server; $server->push(function ($message) { switch ($message['InfoType']) { //推送suite_ticket case 'suite_ticket': break; //授权成功通知 case 'create_auth': break; //变更授权通知 case 'cancel_auth': break; //通讯录事件通知 case 'change_contact': switch ($message['ChangeType']) { case 'create_user': return '新增成员事件'; break; case 'update_user': return '更新成员事件'; break; case 'delete_user': return '删除成员事件'; break; case 'create_party': return '新增部门事件'; break; case 'update_party': return '更新部门事件'; break; case 'delete_party': return '删除部门事件'; break; case 'update_tag': return '标签成员变更事件'; break; } break; default: return 'fail'; break; } }); $response = $server->serve(); $response->send(); } public function merchantWorkLoveMPServer() { $config = config('wechat.work_merchant_love_mp'); $app = Factory::openWork($config); $server = $app->server; $server->push(function ($message) { Log::info("企业微信"); Log::info($message); switch ($message['InfoType']) { //推送suite_ticket case 'suite_ticket': break; //授权成功通知 case 'create_auth': break; //变更授权通知 case 'cancel_auth': break; //通讯录事件通知 case 'change_contact': switch ($message['ChangeType']) { case 'create_user': return '新增成员事件'; break; case 'update_user': return '更新成员事件'; break; case 'delete_user': return '删除成员事件'; break; case 'create_party': return '新增部门事件'; break; case 'update_party': return '更新部门事件'; break; case 'delete_party': return '删除部门事件'; break; case 'update_tag': return '标签成员变更事件'; break; } break; default: return 'fail'; break; } }); $response = $server->serve(); $response->send(); } public function merchantWorkLoveSaasServer() { $config = config('wechat.work_merchant_love_saas'); $app = Factory::openWork($config); $server = $app->server; $server->push(function ($message) { Log::info("企业微信-福恋saas"); Log::info($message); switch ($message['InfoType']) { //推送suite_ticket case 'suite_ticket': break; //授权成功通知 case 'create_auth': break; //变更授权通知 case 'cancel_auth': break; //通讯录事件通知 case 'change_contact': switch ($message['ChangeType']) { case 'create_user': return '新增成员事件'; break; case 'update_user': return '更新成员事件'; break; case 'delete_user': return '删除成员事件'; break; case 'create_party': return '新增部门事件'; break; case 'update_party': return '更新部门事件'; break; case 'delete_party': return '删除部门事件'; break; case 'update_tag': return '标签成员变更事件'; break; } break; default: return 'fail'; break; } }); $response = $server->serve(); $response->send(); } private function recvOfficialMessage($message) { switch ($message['MsgType']) { case 'event': return '收到事件消息'; break; case 'text': return '收到文字消息'; break; case 'image': return '收到图片消息'; break; case 'voice': return '收到语音消息'; break; case 'video': return '收到视频消息'; break; case 'location': return '收到坐标消息'; break; case 'link': return '收到链接消息'; break; case 'file': return '收到文件消息'; // ... 其它消息 default: return '收到其它消息'; break; } } private function recvMessage($message) { $fromUsername = $message['FromUserName']; $content = '你好!欢迎来到福恋小程序。'; //接收消息 $msgType = $message['MsgType']; if ($msgType == 'event') {//时间消息 if ($message['Event'] && $message['Event'] == 'user_enter_tempsession') {//进入会话2019年9月5日15:17:事件 $content = $this->getServerQuestion('MP'); $data = ['content' => $content]; $this->sendMessage($fromUsername, 'text', $data); } } elseif ($msgType == 'text' || $msgType == 'miniprogrampage') {//文本消息 //根据文本返回对应内容 $result = $this->getResponse($message); if ($result && $result['type'] == 'TEXT') { $data = ['content' => $result['content']]; } elseif ($result && $result['type'] == 'IMAGE') { $data = ['media_id' => $result['content']]; } $this->sendMessage($fromUsername, $result['type'], $data); } elseif ($msgType == 'image') {//图片消息 } return; } public function getResponse($message) { try { if ($message['MsgType'] == 'text') { $inpput_content = $message['Content']; } else { $inpput_content = $message['Title']; } $question = ServerQuestion::where("name", 'like', '%' . $inpput_content . '%')->orWhereHas('keywords', function ($sql) use ($inpput_content) { $sql->where("name", 'like', '%' . $inpput_content . '%'); })->first(); if (empty($question)) { $content = $this->getServerQuestion('MP'); return ['type' => 'TEXT', 'content' => $content]; } $answer = $question->answer; $content = ""; if ($answer && $answer->type == 'TEXT') { $content = $this->getResponseText($answer); } elseif ($answer && $answer->type == 'IMAGE') { $content = $this->getResponseImage($answer); } if ($content) return ['type' => $answer->type, 'content' => $content]; } catch (\Exception $e) { $this->getError($e); return false; } } public function getResponseImage($answer) { try { Image::configure(['driver' => 'gd']); $pic = $answer->content; $image = Image::make($pic); $path = storage_path('qrcode/' . time() . 'server.png'); $image->save($path); $content = $answer->content; $app = \EasyWeChat::miniProgram(); // $path = app()->basePath('public/server_qrcode.jpg'); $result = $app->media->uploadImage($path); $content = $result['media_id']; if (file_exists($path)) { unlink($path); } return $content; } catch (\Exception $e) { $this->getError($e); return false; } } public function getResponseText($answer) { try { switch ($answer->path_type) { case 'MP': $content = '' . $answer->content . ''; break; case 'OFFICIAL': $content = '' . $answer->content . ''; break; default: $content = $answer->content; break; } return $content; } catch (\Exception $e) { $this->getError($e); return false; } } public function getServerQuestion($type) { try { $content = "你好,小恋暂时不在,请用手点击下方问题,可以获得答案,请用手点击问题!请用手点击问题!"; //换行 $n = "\r\n"; $questions = ServerQuestion::where('type', $type)->pluck('name')->toArray(); $i = 1; foreach ($questions as $question) { // $question = $i.' '."".$question.""; $question = $i . ' ' . $question . ''; $content = $content . $n . $question; $i++; } return $content; } catch (\Exception $e) { $this->getError($e); return false; } } private function sendMessage($touser, $msgtype, $data) { // $app = \EasyWeChat::miniProgram(); // $token = $app->access_token->getToken(); // $access_token = $token['access_token']; // $access_token = $this->get_accessToken(); $access_token = ""; $resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love"); if ($resp) { if ($resp) { $res = json_decode($resp, true); $access_token = $res["data"]['access_token']; } } if (empty($access_token)) { return $this->failure("缺少access_token"); } $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token; $data['touser'] = $touser; $data['msgtype'] = $msgtype; if (strtoupper($msgtype) == 'TEXT') { $data['text'] = $data; } elseif (strtoupper($msgtype) == 'IMAGE') { $data['image'] = $data; } $result = Http::post($url, json_encode($data, JSON_UNESCAPED_UNICODE)); } private function uploadMedia($img) { // $app = \EasyWeChat::miniProgram(); $path = app()->basePath($img); // $image = exif_imagetype($path); // $type = image_type_to_mime_type($image); // 获取文件类型 // $type = 'image/png'; // $token = $app->access_token->getToken(); // $access_token = $token['access_token']; $access_token = ""; $resp = Http::get("https://love.ufutx.com/go/api/mp/access_token?token=go_love"); if ($resp) { if ($resp) { $res = json_decode($resp, true); $access_token = $res["data"]['access_token']; } } if (empty($access_token)) { return $this->failure("缺少access_token"); } $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" . $access_token . "&type=image"; // 启用 curl $curl = curl_init(); if (class_exists('\CURLFile')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); $data = array('media' => new \CURLFile(realpath($path)));//>=5.5 } else { if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false); } $data = array('media' => '@' . realpath($path));//<=5.5 } // 请求 URl curl_setopt($curl, CURLOPT_URL, $url); // 是否 post 提交 0否 1是 curl_setopt($curl, CURLOPT_POST, 1); // 提交的数据 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // 返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 设置请求头 curl_setopt($curl, CURLOPT_USERAGENT, "TEST"); // 检查是否有错误 $error = curl_error($curl); if ($error) { // json 格式 转成数组 return json_decode($error, true); } else { // json 格式 转成数组 $result = curl_exec($curl); // 取出接口返回数据 return json_decode($result, true); } } private function checkSignature($request) { $signature = $request->input('signature'); $timestamp = $request->input('timestamp'); $nonce = $request->input("nonce"); $token = "love"; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if ($tmpStr == $signature) { return true; } else { return false; } } public function otherWechatAuth(Request $request, $account) { // dd(request()->ip()); $account = strtolower($account); $paas_wechat_user = session('wechat.oauth_user')[$account]; $paas_official_openid = $paas_wechat_user['id']; Cache::put('paas_name', strtoupper($account), 10); session(['paas_official_openid' => $paas_official_openid]); $user_id = $request->input('user_id', 7776); if (config('app.env') == 'local') { return redirect('http://localhost:8080/#/information/' . $user_id . '?paas=' . strtoupper($account)); } return redirect(env('APP_URL') . '/mobile/#/information/' . $user_id . '?paas=' . strtoupper($account)); } public function wechatAuth(Request $request) { $wechat_user = session('wechat.oauth_user')['default']; $openid = $wechat_user['id']; //缓存openid session(['official_openid' => $openid]); $mobile = $request->input('mobile'); if ($mobile) { $user = User::where('mobile', $mobile)->first(); if ($user && $user->wechat && empty($user->wechat->official_openid)) { $user->wechat->official_openid = $openid; $user->wechat->save(); } } if (config('app.env') == 'local') { // dd($request->input('type')); $redirect_url = 'http://localhost:8081/#/login'; return redirect($redirect_url); } if (config('app.env') == 'alpha') { $host = 'http://alpha.ufutx.net'; } else { $host = env('APP_URL') . ''; } $redirect_url = $host . '/'; $type = $request->input('type'); $from_user_id = $request->input('from_user_id'); if ($type == 'arena') { $arena_id = $request->input('id'); $redirect_url = $host . '/api/official/arenas/' . $arena_id . '?from_user_id=' . $from_user_id; } elseif ($type == 'login') { $wechat = Wechat::where('official_openid', $openid)->first(); if ($wechat && $wechat->user) { $user = $wechat->user; $token = $user->createToken($user->mobile)->accessToken; } $redirect_url = $host . '/mobile/#/login'; } // return redirect($redirect_url); return redirect($redirect_url); } /** * 新年红包授权页面 */ public function activityWechatAuth(Request $request) { $from_official_openid = $request->input('from_official_openid'); //微信授权用户信息 静默登录只能获取openid $wechat_user = session('wechat.oauth_user')['new']; $source = $request->has('source') ? $request->source : ''; $official_openid = $wechat_user['id']; if ($source) { Redis::setnx($official_openid . 'new_source', $source); } else { $source = Redis::get($official_openid . 'new_source'); } //缓存openid session(['official_openid' => $official_openid]); session(['from_official_openid' => $from_official_openid]); //活动页面url $param = '?official_openid=' . $official_openid . '&from_official_openid=' . $from_official_openid; if (config('app.env') == 'local') { $redirect_url = 'http://localhost:8080/#/nineFruit' . $param . '&source=' . $source; } else { $redirect_url = env('APP_URL') . '/rp/#/nineFruit' . $param . '&source=' . $source; } //todo //记录参与用户信息 $key = Participant::PART_KEY; $key = $key . $official_openid; // if (Cache::has($key)) { // $participant = Cache::get($key); // }else{ $participant = Participant::where('official_openid', $official_openid)->first(); if (empty($participant)) { $participant = Participant::create([ 'official_openid' => $official_openid, 'ip' => Ip::getip(), ]); // } Cache::forever($key, $participant); } //获取用户的最新信息 UpdateWechatUserInfo::dispatch($participant)->onQueue('love'); //重定向到活动页面 return redirect($redirect_url); } // 家的味道授权-静默授权 public function FamilyAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); Log::info($request->url); $url = config('app.env') == 'production' ? env('APP_URL') . '/pu/#/' : 'http://alpha.ufutx.net/pu/#/'; $url = $request->url ? urldecode($request->url) : $url; if ($url == "https://love.ufutx.com/pu/" || $url == "https://love.ufutx.cn/pu/") { $url = config("app.url") . "/pu/#/"; } Log::info($url); $anchor_openid = $request->anchor_openid ?? ''; $from_openid = $request->from_openid ?? ''; $serve_tab = $request->serve_tab ?? ''; // 商户账户id $merchant_id = $request->merchant_id ?? ''; //商户用户id $account_id = $request->account_id ?? ''; // 是否自动支付 $auto_pay = $request->auto_pay ?? 0; // 联盟id $allinace_id = $request->alliance_id ?? ''; $evaluate_type = $request->evaluate_type ?? ''; // 渠道码id $share_channel_id = $request->share_channel_id ?? ''; $auth_state = $request->auth_state ?? 0; $qr_code_id = $request->qr_code_id; $m_id = $request->m_id; $video_id = 0; $spread_merchant_id = $request->spread_merchant_id ?? ''; $vip_level_id = $request->vip_level_id ?? ''; if ((strpos($url, 'videos='))) { $video_id = substr($url, strpos($url, 'videos=') + 7); } $q_type = $request->q_type; $q_type_id = $request->q_type_id; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_user_id=" . $request->from_user_id . "&from_platform=" . $request->from_platform . '&anchor_openid=' . $anchor_openid . '&merchant_id=' . $merchant_id . '&account_id=' . $account_id . '&auto_pay=' . $auto_pay . '&share_channel_id=' . $share_channel_id . '&alliance_id=' . $allinace_id . '&serve_tab=' . $serve_tab . '&auth_state=' . $auth_state . '&qr_code_id=' . $qr_code_id . '&evaluate_type=' . $evaluate_type . '&video_id=' . $video_id . '&actioveLabel=' . $request->actioveLabel . '&m_id=' . $m_id . '&spread_merchant_id=' . $spread_merchant_id . '&vip_level_id=' . $vip_level_id . '&q_type=' . $q_type . '&q_type_id=' . $q_type_id; // Log::info("跳转链接"); // Log::info($url); $user = MerchantUsers::where('openid', $openId)->first(); if (!$user) { $rand_str = $this->randString(8); $user = new MerchantUsers(); $user->openid = $openId; $user->rand_str = $rand_str; $user->nickname = '用户' . $rand_str; $user->save(); } if ($request->merchant_id && $request->merchant_id >= 1) { $record = AccessRecord::where('open_id', $openId)->where('account_id', $request->merchant_id)->first(); if ($record) { $record->last_time = now(); $record->save(); } else { $record = new AccessRecord(); $record->open_id = $openId; $record->account_id = $request->merchant_id; $record->last_time = now(); $record->recommender = $from_openid; $record->save(); } InviteMerchant::dispatch($request->merchant_id)->onQueue('love'); } if (!empty($record)) { Redis::zincrby('access_count' . $record->id, 1, $request->merchant_id); } if (empty($user->uuid)) { //增加基表账号 AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love'); } return redirect($url); } public function inviteMerchantProcessOrderAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $url = config('app.env') == 'production' ? env('APP_URL') . '/pu_m/#/' : 'http://sadmin.ufutx.net/pu_m/#/'; $url = $request->url ? urldecode($request->url) : $url; // 商户账户id $merchant_id = $request->merchant_id ?? ''; $order_id = $request->order_id; $role_id = $request->role_id; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&order_id=' . $order_id . '&role_id=' . $role_id; return redirect($url); } public function groupOrderAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; // 商户账户id $merchant_id = $request->merchant_id ?? ''; $order_id = $request->order_id; $id = $request->id; $from_openid = $request->from_openid; $history_id = $request->history_id; $type = $request->type; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id . '&order_id=' . $order_id . '&history_id=' . $history_id . '&type=' . $type . '&from_openid=' . $from_openid; return redirect($url); } public function activityMeetingAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; // 商户账户id $merchant_id = $request->merchant_id ?? ''; $id = $request->id; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $url = $url . 'openid=' . $openId . '&merchant_id=' . $merchant_id . '&id=' . $id; return redirect($url); } // 非静默授权 public function NonSilenceAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $moreInfo = $wechatUser->getOriginal(); $user = MerchantUsers::where('openid', $openId)->first(); if (!$user) { $user = new MerchantUsers(); $user->openid = $openId; $rand_str = $this->randString(8); $user->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str; $user->pic = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png'; $user->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0; $user->city = !empty($moreInfo['city']) ? $moreInfo['city'] : ''; $user->province = !empty($moreInfo['province']) ? $moreInfo['province'] : ''; $user->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : ''; $user->save(); } else { //如果没有绑定unionID if (!empty($moreInfo['unionid']) && empty($user->unionid)) { $user->unionid = $moreInfo['unionid']; } if (!empty($moreInfo['nickname'])) { $user->nickname = $moreInfo['nickname']; } if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $user->pic) { $user->pic = $moreInfo['headimgurl']; } if (!empty($moreInfo['sex']) && $user->sex == 0) { $user->sex = $moreInfo['sex']; } if (!empty($moreInfo['province']) && $user->province == '') { $user->province = $moreInfo['province']; } if (!empty($moreInfo['city']) && $user->city == '') { $user->city = $moreInfo['city']; } $user->save(); } $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $from_openid = $request->from_openid ?? ''; $merchant_id = $request->merchant_id ?? ''; $url = $url . 'openid=' . $openId . "&from_openid=" . $from_openid . "&from_platform=" . $request->from_platform . '&merchant_id=' . $merchant_id; return redirect($url); } // 直播授权 public function LiveAuth(Request $request) { $live_id = $request->input('live_id', 0); $from_id = $request->input('from_id', 0); $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; $is_new = 0; $wechatUser = session('wechat.oauth_user.new'); $moreInfo = $wechatUser->getOriginal(); $openId = $wechatUser->getId(); if (empty($openId)) { return redirect(env('APP_URL') . '/h5/#/'); } $viewer = Viewer::where('openid', $openId)->first(); if (empty($viewer)) { $viewer = new Viewer(); $viewer->openid = $openId; $rand_str = $this->randString(10); $viewer->nickname = !empty($moreInfo['nickname']) ? $moreInfo['nickname'] : '用户' . $rand_str; $viewer->avatar = !empty($moreInfo['headimgurl']) ? $moreInfo['headimgurl'] : 'https://images.ufutx.com/202007/01/e0de60525143427d4dd19515a5b387ba.png'; // 处理用户扫描带参二维码后,不点击公众号消息,点击菜单或者其他路径的情况 $redis_url = Redis::get($openId . 'url'); //注册页面 if ($redis_url) { $from_id = substr($url, strripos($url, "from_id=") + 8, (strripos($url, "&live_id=") - strripos($url, "from_id=") - 8)); $live_id = substr($url, strripos($url, "live_id=") + 8); $url = $redis_url; } if ($request->has('source') && $request->source) { $viewer->source = $request->source; } else { if (str_contains($url, env('APP_URL') . '/h5/#/fLoveEnvoy')) { $viewer->source = 'messenger'; } if (str_contains($url, env('APP_URL') . '/h5/#/angelData')) { $viewer->source = 'star'; } } $viewer->record_url = $url; $viewer->viewer_id = !empty($from_id) ? $from_id : 0; $viewer->live_id = !empty($live_id) ? $live_id : 0; $viewer->sex = !empty($moreInfo['sex']) ? $moreInfo['sex'] : 0; $viewer->unionid = !empty($moreInfo['unionid']) ? $moreInfo['unionid'] : ''; $viewer->save(); $is_new = 1; //分享次数自增长 Viewer::where('id', $request->from_id)->increment('times'); //分享奖励 $this->newViewerShare($request, $viewer); } else { //如果没有绑定unionID if (!empty($moreInfo['unionid']) && empty($viewer->unionid)) { $viewer->unionid = $moreInfo['unionid']; } if (!empty($moreInfo['nickname']) && mb_substr($viewer->nickname, 0, 2) == '用户') { $viewer->nickname = $moreInfo['nickname']; } if (!empty($moreInfo['headimgurl']) && $moreInfo['headimgurl'] != $viewer->avatar) { $viewer->avatar = $moreInfo['headimgurl']; } if (!empty($moreInfo['sex']) && $viewer->sex == 0) { $viewer->sex = $moreInfo['sex']; } $viewer->save(); if ($request->from_id) { $this->oldViewerShare($request, $viewer); } } if (!$request->from_user_id) { $from_viewer = Viewer::where('id', $request->from_id)->first(); if ($from_viewer) { if ($from_viewer->user_id) { $request->from_user_id = $from_viewer->user_id; } } } if (empty($viewer->uuid)) { AddUnionUser::dispatch($viewer, $password = $viewer->password, 'LO')->onQueue('love'); } $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $redirect_url = $url . 'merchant_id=' . $request->merchant_id . '&openid=' . $openId . "&from_id=" . $from_id . "&from_openid=" . $request->from_openid . "&from_user_id=" . $request->from_user_id . "&from_platform=" . $request->from_platform . '&anchor_openid=' . $request->anchor_openid . '&auth_state=0'; if ($is_new && $request->activity) { $redirect_url .= '&activity=1'; } if ($request->signMarriageID) { $redirect_url .= '&signMarriageID=' . $request->signMarriageID; } if ($request->is_audit) { $redirect_url .= '&is_audit=' . $request->is_audit; } if ($request->merchant_id) {//商户id $redirect_url .= '&merchant_id=' . $request->merchant_id; } if ($request->account_id) {//s端用户id $redirect_url .= '&account_id=' . $request->account_id; } return redirect($redirect_url); } public function earningAuth(Request $request) { $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $redirect_url = $request->url ? urldecode($request->url) : $url; Log::info($redirect_url); return redirect($redirect_url); } // 非静默授权 public function newNonSilenceAuth(Request $request) { $code = $request->code; $jump_url = $request->jump_url ?? 'my'; // $appid = 'wx36c72a00f1b2be64'; // $secret = '77f3fa72e17186ecc94ca3038a3ec467'; $appid = config('wechat.official_account.new.app_id'); $secret = config('wechat.official_account.new.secret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = $this->http_request($url); $merchant_id = urldecode($request->merchant_id); $from_openid = urldecode($request->from_openid); $alliance_id = urldecode($request->alliance_id); $share_channel_id = urldecode($request->share_channel_id); //Log::info("微信信息"); if ($result && isset($result['access_token'])) { $account = MerchantUsers::where('openid', $result['openid'])->first(); if ($account) { $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); // session(['test1993'=>$result]); $account->nickname = $result['nickname'] ?? $account->nickname; $account->sex = $result['sex'] ?? $account->sex; $account->city = $result['city'] ?? $account->city; $account->province = $result['province'] ?? $account->province; $account->pic = $result['headimgurl'] ?? $account->pic; $unionid = $result['unionid'] ?? $account->unionid; if ($unionid) { $merchant_union_id = MerchantUser::where('unionid', $unionid)->value('unionid'); if (!$merchant_union_id) { $account->unionid = $unionid; } } $account->authorize_at = date('Y-m-d H:i:s'); $account->save(); } } $redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&from_openid=' . $from_openid . '&alliance_id=' . $alliance_id . '&share_channel_id=' . $share_channel_id; return redirect($redirect_url); } //分享给新用户 public function newViewerShare($request, $viewer) { $from_id = $request->input('from_id', 0); $live_id = $request->input('live_id', 0); if ($request->from_id) { $viewer_share = new ViewerShare(); $viewer_share->viewer_id = $viewer->id; $viewer_share->sharer_id = $from_id; $viewer_share->live_id = $live_id; $viewer_share->type = 1; $viewer_share->is_show = 1; $viewer_share->save(); if ($request->has('task_id') && $request->task_id && $request->live_id) { // //生成审批内容 // $viewer_share_audit = New ViewerShareAudit(); // $viewer_share_audit->viewer_id = $request->from_id; // $viewer_share_audit->other_viewer_id = $viewer->id; // $viewer_share_audit->task_id = $request->task_id ? : 0; // $viewer_share_audit->save(); //完成任务 $task = Task::find($request->task_id); if ($task && $task->the_rest > 0 && $task->num && $task->type == '直播推广') { $list_data['from_id'] = $request->from_id; $list_data['task_id'] = $request->task_id; $list_data['source_id'] = $request->task_id; $list_data['other_viewer_id'] = $viewer->id; $list_data['type'] = 'share'; DoTask::dispatch($list_data)->onQueue('love'); $viewer->task_id = $request->task_id; $viewer->save(); } } else { $param = [ 'sharer_id' => $from_id, 'viewer_id' => $viewer->id, ]; MakeShareCash::dispatch($param)->onQueue('love'); } //模板消息通知分享人 // $data['touser'] = Viewer::where('id', $request->from_id)->value('openid'); // $data['template_id'] = '_s-xlwx8Bj75Cf1UnSJE8HSBCZWFhGoQRdVDf84h3Rw'; // $data['url'] = env('APP_URL').'/ls/#/shareList'; // // $data['data'] = [ // 'first' => '您好,有用户通过您的推荐进入平台!', // 'keyword1' => $viewer->nickname, // 'keyword2' => date('Y-m-d H:i:s'), // 'reamrk' => '感谢您的使用', // ]; // SendTemplateMsg::dispatch($data)->onQueue('love'); } return true; } //分享给老用户 public function oldViewerShare($request, $viewer) { $live_id = $request->input('live_id', 0); if ($viewer->id != $request->from_id) { $is_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->where('live_id', $live_id)->count(); $is_first_shared = ViewerShare::where('viewer_id', $viewer->id)->where('sharer_id', $request->from_id)->count(); //老用户奖励 $this->makeOldShareCash($request->from_id, $viewer->id); if ($request->from_id && empty($is_shared)) { $viewer_share = new ViewerShare(); $viewer_share->viewer_id = $viewer->id; $viewer_share->sharer_id = $request->from_id; $viewer_share->type = 2; $viewer_share->live_id = $request->live_id ?: 0; //首次分享? if ($is_first_shared == 0) { $viewer_share->is_show = 1; } $viewer_share->save(); //绑定用户与分享人关系 // if($request->has('live_id') && $request->live_id && $request->from_id != $viewer->id){ // $live_id = $request->live_id; // Redis::zincrby($live_id.'_share_rank', 1 ,$request->from_id); // } //分享次数自增长 Viewer::where('id', $request->from_id)->increment('times'); if ($request->has('live_id') && $request->live_id) { $live_id = $request->live_id; Redis::zincrby($live_id . '_share_rank', 1, $request->from_id); } } // //分享奖励 // if($request->from_id){ // $old_reward = Viewer::where('id', $request->from_id)->value('old_reward'); // Asset::where('viewer_id', $request->from_id)->increment('cash', $old_reward); // } } return true; } public function checkBlockCash($share_id) { try { //判断分享者是否是福恋使者 $messenger = Messenger::where('viewer_id', $share_id)->where('is_audit', 1)->first(); if (empty($messenger) || empty($messenger->share_viewer_id)) { return; } //成为福恋使者时间 $check_date = $messenger->check_date; //成为福恋使者后邀请人数 $count = ViewerShare::where('sharer_id', $share_id)->where('created_at', '>', $check_date)->where('type', 1)->count(); if ($count >= 10) {//十个用户解冻福恋使者分享者金额 //福恋使者分享者 $share_viewer_id = $messenger->share_viewer_id; //解冻记录 $asset_log = AssetLog::where('viewer_id', $share_viewer_id)->where('type', 4)->where('log_id', $share_id)->where('is_hooked', 0)->first(); if (empty($asset_log)) { return; } \DB::beginTransaction(); //解冻金额 $num = $asset_log->num; $asset = Asset::where('viewer_id', $share_viewer_id)->first(); $asset->increment('share_cash', $num); $asset->decrement('blocked_cash', $num); if ($asset->blocked_cash < 0) { throw new \Exception("解冻金额溢出", 1); } //更新解冻记录 $asset_log->update([ 'real_num' => $asset_log->num, 'is_hooked' => 1, 'score' => bcadd($asset->share_cash, $asset->cash, 2), ]); \DB::commit(); return; } } catch (\Exception $e) { \DB::rollback(); \Log::error($e->getMessage()); return; } } /** * 收益规则 * 第一次分享给老用户收益0.01 */ public function makeOldShareCash($from_id, $viewer_id) { if (empty($from_id)) { return; } $param = [ 'sharer_id' => $from_id, 'viewer_id' => $viewer_id ]; //是否已经有分享记录 $h = ViewerShare::where($param)->exists(); if ($h) { return; } //产生收益 MakeOldShareCash::dispatch($param)->onQueue('love'); } public function getUrlqrcode($url, $size = 100) { $name = substr($url, stripos($url, '=')); $path = "../storage/qrcode/$name.png"; QrCode::format('png')->margin(1)->size($size)->generate($url, $path); $pic = $this->uploadFile($path); unlink($path); return $pic; } //创建token public function api_token($account) { $token = MerchantUsers::where('id', $account->id)->value('api_token'); if ($token) { $result = decrypt($token); $time = explode('-', $result)[2]; if (time() - $time > 604800) { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email); MerchantUsers::where('id', $account->id)->update(['api_token' => $token]); } } else { $token = encrypt($account->id . '-' . $account->mobile . '-' . time() . '-' . $account->email); MerchantUsers::where('id', $account->id)->update(['api_token' => $token]); } return $token; } //HTTP请求(支持HTTP/HTTPS,支持GET/POST) private function http_request($url, $data = null) { try { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)) { curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return json_decode($output, true); } catch (\Exception $e) { // HandleLogs::error('HTTP请求 异常','微信内容安全',$e); return ''; } } //登录静默授权 public function loginAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); //dd(env('APP_URL')); $merchat_account = MerchantAccount::where('openid', $openId)->first(); if ($merchat_account) { //增加基表账号 if (empty($merchat_account->uuid)) { AddUnionUser::dispatch($merchat_account, $password = null, 'SOA')->onQueue('love'); } $url = env('APP_URL') . '/pu_m/#/loginByWeixin?openid=' . $openId; return redirect($url); } else { $url = env('APP_URL') . '/pu_m/#/login?openid=' . $openId; //$url = 'http://192.168.31.230:8080'.'/#/login'; return redirect($url); } } //微信静默授权 public function blessingUserSilenceAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); //$url = 'https://love.ufutx.com/h5/#/discover/blessingHome?'; $url = $url . 'openid=' . $openId; $bless_user = BlessingUsers::where('openid', $openId)->first(); if ($bless_user) { return redirect($url); } $bless_user = new BlessingUsers(); $bless_user->openid = $openId; $bless_user->save(); return redirect($url); } public function blessingUserNonSilenceAuth(Request $request) { $code = $request->code; $jump_url = $request->jump_url ?: 'my'; $appid = 'wx36c72a00f1b2be64'; $secret = '77f3fa72e17186ecc94ca3038a3ec467'; $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = $this->http_request($url); $alliance_id = urldecode($request->alliance_id); $openId = ''; if ($result && isset($result['access_token'])) { $openId = $result['openid']; $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); $merchant_user = MerchantUsers::where('openid', $openId)->first(); if ($merchant_user) { $merchant_user->unionid = $result['unionid'] ?? null; $merchant_user->nickname = $result['nickname'] ?? null; $merchant_user->pic = $result['headimgurl'] ?? null; $merchant_user->authorize_at = date('Y-m-d H:i:s'); $merchant_user->save(); } else { $rand_str = $this->randString(8); $merchant_user = new MerchantUsers(); $merchant_user->openid = $openId; $merchant_user->unionid = $result['unionid'] ?? null; $merchant_user->nickname = $result['nickname'] ?? null; $merchant_user->pic = $result['headimgurl'] ?? null; $merchant_user->rand_str = $rand_str; $merchant_user->authorize_at = date('Y-m-d H:i:s'); $merchant_user->save(); } } $redirect_url = env('APP_URL') . '/al_m/#/' . $jump_url . '?alliance_id=' . $alliance_id . '&openid=' . $openId . '&authorize_at=' . $merchant_user->authorize_at; return redirect($redirect_url); } //静默授权 public function silenceAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $openId = $wechatUser->getId(); $url = config('app.env') == 'production' ? env('APP_URL') . '/h5/#/' : 'http://alpha.ufutx.net/h5/#/'; $url = $request->url ? urldecode($request->url) : $url; $alliance_id = $request->alliance_id ?? ''; $from_openid = $request->from_openid ?? ''; $url = !strstr($url, '?') ? $url . '?' : substr($url, 0, strrpos($url, '?') + 1); $url = $url . 'openid=' . $openId . "&alliance_id=" . $alliance_id . "&from_openid=" . $request->from_openid; $user = MerchantUsers::where('openid', $openId)->first(); if (!$user) { $rand_str = $this->randString(8); $user = new MerchantUsers(); $user->openid = $openId; $user->rand_str = $rand_str; $user->nickname = '用户' . $rand_str; $user->save(); } if (empty($user->uuid)) { //增加基表账号 AddUnionUser::dispatch($user, $password = null, 'SO')->onQueue('love'); } return redirect($url); } /** * 绑定商户分享渠道(微信授权) */ public function bindMerchantShareChannel($share_channel_id) { try { $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=该绑定渠道已关闭绑定'; return redirect($url); $wechatUser = session('wechat.oauth_user.new'); if (empty($wechatUser)) { // throw new \Exception('微信授权失败'); $url = request()->getUri(); return redirect($url); } $openid = $wechatUser->getId(); //渠道信息 $channel = MerchantShareChannel::find($share_channel_id); if (empty($channel)) { $err_msg = '渠道信息已被删除'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg; return redirect($url); } //跳转前端url $url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id; if ($channel->bind_m_id) return redirect($url); //根据openid获取商户信息 $merchant = \App\Models\Server\MerchantAccount::where('openid', $openid)->first(); $owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first(); if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) { $err_msg = '渠道拥有者信息不存在'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id; return redirect($url); } if ($merchant && $merchant->mobile) {//存在商户信息并且手机号 //绑定商户 $channel->bind_m_id = $merchant->id; $channel->save(); //短信通知 todo $url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid; $short_url = \CommonUtilsService::shortUrl($url); $message = '恭喜你成为商家' . $owner_merchant->anchorV2->name . '的渠道分享人,赶紧点击' . $short_url['url'] . ' 查看你的渠道分享码吧!'; SendEasySms::dispatch(['mobile' => $merchant->mobile, 'message' => $message])->onQueue('love'); } else { //跳转前端url $url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid; } return redirect($url); } catch (\Exception $e) { $this->getError($e); $err_msg = '服务器休息,请稍后再试'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id; return redirect($url); } } /** * 绑定商户分享渠道(用户微信授权) */ public function bindMerchantShareChannelV2($share_channel_id) { try { //微信授权信息 $wechatUser = session('wechat.oauth_user.new'); if (empty($wechatUser)) { $url = request()->getUri(); return redirect($url); } $openid = $wechatUser->getId(); //渠道信息 $channel = MerchantShareChannel::find($share_channel_id); if (empty($channel)) { $err_msg = '渠道信息已被删除'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=5'; return redirect($url); } //跳转前端url $url = env('APP_URL') . '/pu/#/channelsShare?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id; //渠道已被绑定 if ($channel->bind_m_user_id) { $user = MerchantUser::where('openid', $openid)->first(); if ($user && $user->id == $channel->bind_m_user_id) return redirect($url); $err_msg = '该渠道已被其他用户绑定'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id; return redirect($url); } //根据openid获取用户信息 $user = MerchantUser::firstOrCreate(['openid' => $openid]); if (empty($user->nickname)) { $rand_str = $this->randString(8); $user->rand_str = $rand_str; $user->pic = User::DefaultAvatar; $user->nickname = '用户' . $rand_str; $user->save(); } //判断渠道拥有者是否存在 $owner_merchant = \App\Models\Server\MerchantAccount::with('anchor')->where('id', $channel->m_id)->first(); if (empty($owner_merchant) || empty($owner_merchant->anchorV2)) { $err_msg = '渠道拥有者信息不存在'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id; return redirect($url); } //跳转前端绑定url $url = env('APP_URL') . '/pu/#/bindingChannels?share_channel_id=' . $share_channel_id . '&merchant_id=' . $channel->m_id . '&openid=' . $openid; return redirect($url); } catch (\Exception $e) { $this->getError($e); $err_msg = '服务器休息,请稍后再试'; $url = env('APP_URL') . '/pu/#/channelFailure?err_msg=' . $err_msg . '&merchant_id=' . $channel->m_id; return redirect($url); } } //微信授权 商家绑定微信提现账号 public function NonSilenceAuthBindWechatTransfer(Request $request) { $code = $request->code; $jump_url = 'bindWeChatPage'; $appid = config('wechat.official_account.new.app_id'); $secret = config('wechat.official_account.new.secret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = $this->http_request($url); \Log::info('商家id:' . $request->merchant_id . ' result:' . json_encode($result)); $merchant_id = $request->merchant_id; $m_user_id = $request->merchant_user_id ?? 0; $redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1'; if ($result && isset($result['access_token'])) { $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); $transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', 0) ->where('way', 'weixin') ->where('account', $result['openid']) ->first(); if ($transfer) { $transfer->nick_name = $result['nickname']; $transfer->name = $result['nickname']; $transfer->pic = $result['headimgurl']; $transfer->save(); return redirect($redirect_url); } $transfer = new MEarningTransfers(); $transfer->m_id = $merchant_id; $transfer->m_user_id = 0; $transfer->way = 'weixin'; $transfer->account = $result['openid']; $transfer->name = $result['nickname']; $transfer->nick_name = $result['nickname']; $transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar; $transfer->save(); } return redirect($redirect_url); } //微信授权 saas用户绑定微信提现账号 public function NonSilenceAuthBindWechatTransferSaasUser(Request $request) { $code = $request->code; $jump_url = 'IncomeWithdrawal'; $appid = config('wechat.official_account.new.app_id'); $secret = config('wechat.official_account.new.secret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = $this->http_request($url); $merchant_id = $request->merchant_id;//商户id $m_user_id = $request->account_id;//用户id $redirect_url = env('APP_URL') . '/pu/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1'; if ($result && isset($result['access_token'])) { $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); $transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id) ->where('way', 'weixin') ->where('account', $result['openid']) ->first(); if ($transfer) { $transfer->nick_name = $result['nickname']; $transfer->name = $result['nickname']; $transfer->pic = $result['headimgurl']; $transfer->updated_at = date('Y-m-d H:i:s'); $transfer->save(); return redirect($redirect_url); } $transfer = new MEarningTransfers(); $transfer->m_id = $merchant_id; $transfer->m_user_id = $m_user_id; $transfer->way = 'weixin'; $transfer->account = $result['openid']; $transfer->name = $result['nickname']; $transfer->nick_name = $result['nickname']; $transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar; $transfer->save(); } return redirect($redirect_url); } //微信授权 h5用户绑定微信提现账号 public function NonSilenceAuthBindWechatTransferH5User(Request $request) { $code = $request->code; $jump_url = 'accountPage'; $appid = config('wechat.official_account.new.app_id'); $secret = config('wechat.official_account.new.secret'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code"; $result = $this->http_request($url); $merchant_id = $request->merchant_id ?? 1;//商户id $m_user_id = $request->account_id;//用户id $redirect_url = env('APP_URL') . '/h5/#/' . $jump_url . '?merchant_id=' . $merchant_id . '&auth_state=1'; if ($result && isset($result['access_token'])) { $url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $result['access_token'] . '&openid=' . $result['openid']; $result = $this->http_request($url); $transfer = MEarningTransfers::where('m_id', $merchant_id)->where('m_user_id', $m_user_id) ->where('way', 'weixin') ->where('account', $result['openid']) ->first(); if ($transfer) { $transfer->nick_name = $result['nickname']; $transfer->name = $result['nickname']; $transfer->pic = $result['headimgurl']; $transfer->updated_at = date('Y-m-d H:i:s'); $transfer->save(); return redirect($redirect_url); } $transfer = new MEarningTransfers(); $transfer->m_id = $merchant_id; $transfer->m_user_id = $m_user_id; $transfer->way = 'weixin'; $transfer->account = $result['openid']; $transfer->name = $result['nickname']; $transfer->nick_name = $result['nickname']; $transfer->pic = $result['headimgurl'] ?? User::DefaultAvatar; $transfer->save(); } return redirect($redirect_url); } public function bindNoticeOpenid(Request $request, $merchant_id, $admin_id) { try { $wechatUser = session('wechat.oauth_user.new'); if (empty($wechatUser)) throw new \Exception('获取微信信息失败'); $openid = $wechatUser->getId(); if ($admin_id) { MerchantMembers::where('mch_id', $merchant_id)->where('admin_id', $admin_id)->update(['notice_openid' => $openid]); } else { MerchantAccount::where('id', $merchant_id)->update(['notice_openid' => $openid]); } } catch (\Exception $e) { $this->getError($e); } $url = config('app.url') . '/pu/#/adminBinding?merchant_id=' . $merchant_id; return redirect($url); } public function surveyAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $url = $request->input('url'); return redirect($url); } public function tempAuth(Request $request) { $wechatUser = session('wechat.oauth_user.new'); $url = "https://health.ufutx.com/api/temp/oa/second/code?first_openid=" . $wechatUser->getId(); return redirect($url); } public function workServe(Request $request) { $config = config("wechat.work_program_merchant"); $app = Factory::work($config); $app->server->push(function ($message) use ($app) { Log::info($message); if ($message["MsgType"] == "text") { SendWorkProgramMessage::dispatch($message)->onQueue("love_gpt"); return ""; } return "暂时只支持文本内容"; }); $response = $app->server->serve(); $res = $response->send(); } }