海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

76 lines
1.9 KiB

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Agent;
use App\Models\User;
use EasyWeChat\Factory;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use Illuminate\Support\Facades\Cache;
/**
* 小程序登录
* Class Login
* @package App\Http\Controllers\Api
*/
class LoginController extends Controller
{
public function login()
{
$appid = request()->header('appid');
if (!$appid) {
return $this->error('appid参数缺失');
}
$agent = Agent::query()->firstWhere('appid', $appid); //代理商数据
if (!$agent) {
return $this->error('找不到该appid相关记录');
}
$code = request()->input('code');
if (!$code) {
return $this->error('code参数缺失');
}
$config = config('wechat.mini_program.default');
$config = array_merge($config, [
'app_id' => $agent['appid'],
'secret' => $agent['appsecret'],
]);
$app = Factory::miniProgram($config);
try {
$res = $app->auth->session($code);
if (!empty($res['errcode']) || empty($res['openid']) && empty($res['unionid'])) {
$msg = $res['errmsg'] ?? '登录失败';
return $this->error($msg);
}
if (empty($res['session_key'])) {
$this->error('获取session_key失败');
}
} catch (InvalidConfigException $e) {
return $this->error($e->getMessage());
}
// TODO 登录部分待优化
$userModel = User::firstOrCreate([
'openid' => $res['openid'] ?? '',
'unionid' => $res['unionid'] ?? '',
'agent_id' => $agent->id,
], [
//'nickname' => uniqid(), 根据前端判断,不设置默认值
//'avatar' => '/static/images/avatar.png'
]);
//保存session_key
Cache::put('session_key_' . $userModel->id, $res['session_key']);
//TODO 存入初始化数据 user_channel
$token_key = md5($userModel->id . env('APP_KEY'));
Cache::put($token_key, $userModel->id);
// 测试代码结束
$userModel->token = $token_key;
return $this->success($userModel);
}
}