input("code",""); if(!$code) { return [ 'errno'=> 10001, "errmsg" => '参数错误', ]; } // 调用接口可获取用户公开信息,例如头像,昵称,openid等 $ret = $this->thirdAuth($code); if(!$ret) { return [ 'errno'=> 10002, "errmsg" => '参数错误', ]; } // 通过openid判断是否存在 $user = \App\Models\Account::where("openid", $ret['openid'])->first(); $isCreate = false; if(!$user) { $isCreate = true; $user = new \App\Models\Account(); $user->coupon = 0; $user->paster = 0; $user->uid = 0; $user->code = ''; } // $user->token = json_encode($token); $user->username = $ret['name']; $user->avatar = $ret['face']; $user->openid = $ret['openid']; // $user->session = md5($user->id."_".time()); $user->session_expire = date("Y-m-d H:i:s", strtotime("+30 day")); $user->save(); // if($isCreate) { // 把默认皮肤加入到试衣间 $defaultAttireId = \App\Models\Attire::where("is_default", 1)->value("id"); $objFittingRoom = new \App\Models\FittingRoom(); $objFittingRoom->account_id = $user->id; $objFittingRoom->attire_id = $defaultAttireId; $objFittingRoom->curr_save = 1; $objFittingRoom->curr_upload = 1; $objFittingRoom->save(); } // 判断用户时候关联Uid $status = 2; // 1:未验证 2:已登录 $code = ''; if(!$user->uid) { $status = 1; $code = Redis::get("auth_aid:{$user->id}"); if(!$code) { while(true) { $code = mt_rand(100001,999999); $tmp = Redis::get("auth_code:{$code}"); if(!$tmp) { break; } } // Redis::set("auth_aid:{$user->id}", $code); Redis::expire("auth_aid:{$user->id}", 12 * 60); Redis::set("auth_code:{$code}", $user->id); Redis::expire("auth_code:{$code}", 12 * 60); } } // 获取用户当前保存的皮肤 $attire = \App\Models\FittingRoom::where("account_id",$user->id)->where("curr_save", 1)->whereHas('attire', function($q){ $q->whereIn('cate', ['皮肤','套装']); })->with(['attire'])->first(); // $currImg1 = \Storage::disk('cosv5')->url($attire->attire->img_1); $currImg2 = \Storage::disk('cosv5')->url($attire->attire->img_2); // 获取新手教程的图片 $newTeach = \App\Models\Resource::where("name","new_teach")->value("src"); // 获取二维码的图片 $rqcode = \App\Models\Resource::where("name", "qr_code")->value("src"); // $datas = \App\Models\Config::whereNotIn("key", ['box_level_percent','box_level_paster','coupon_configs'])->get(['key','val','val1','type'])->toArray(); foreach($datas as &$v) { if($v['type'] == 1) { $v['val'] = $v['val1']; } unset($v['val1']); } // return [ 'errno'=> 10000, "errmsg" => 'ok', 'data' => [ 'username' => $user->username, 'avatar' => config("filesystems.disks.cosv5.url") . '/'.$user->avatar, 'coupon' => $user->coupon, 'paster' => $user->paster, 'session' => $user->session, 'curr_attire_img1' => $currImg1, 'curr_attire_img2' => $currImg2, 'code' => $code, 'status' => $status, "assets" => [ 'new_teach' => \Storage::disk('cosv5')->url($newTeach), 'qr_code' => \Storage::disk('cosv5')->url($rqcode), ], 'configs' => array_column($datas, 'val','key'), ], ]; } // 第三方授权获取用户基本信息 // https://passport.bilibili.com/register/pc_oauth2.html#/?client_id=e17f50dbe6c84974&return_url=https%3A%2F%2Fnebulabeat.com&response_type=code&state=vvvv public function thirdAuth($code='') { // if(!$code) { return false; } // $resp = Http::timeout(3)->retry(3, 100)->post("https://api.bilibili.com/x/account-oauth2/v1/token", [ 'client_id' => env('BCLIENTID'), 'client_secret' => env('BSECRET'), 'grant_type' => 'authorization_code', 'code' => $code, ])->json(); if($resp['code'] == 0 && isset($resp['data']['access_token']) && $resp['data']['access_token']) { // 获取用户信息 $user = Http::timeout(3)->retry(3, 100)->get("http://member.bilibili.com/arcopen/fn/user/account/info",[ "client_id"=>env('BCLIENTID'), "access_token"=>$resp['data']['access_token'], ])->json(); // if($user['code'] == 0 && $user['data']) { // 把头像下载下来 $var = pathinfo($user['data']['face']); $md5 = time(); // $tmp = $this->GrabImage($user['data']['face'], public_path("uploads/avatar/{$md5}_{$var['basename']}")); $tmp = $this->GrabImage($user['data']['face'], "avatar/{$md5}_{$var['basename']}"); if($tmp) { $user['data']['face'] = "avatar/{$md5}_{$var['basename']}"; } // return $user['data']; } } return false; } // function GrabImage($url, $filename="") { if($url=="") { return false; } // ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); \Storage::disk("cosv5")->put($filename, $img); // $fp2 = fopen($filename, "a"); // fwrite($fp2,$img); // fclose($fp2); return true; } }