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.

238 lines
6.7 KiB

<?php
namespace app\api\controller\v1;
use app\api\ApiController;
use think\facade\Db;
// use app\api\validate\User as UserValidate;
// use think\exception\ValidateException;
use app\common\lib\Token;
class User extends ApiController
{
public function getInfo()
{
try {
$user = Db::name('user')
->field('user_id,avatar,line_id,line_name,line_picture,phone,real_name,email, code,parent_id')
->where('user_id', input('user_id'))
// ->whereNotNull('delete_time')
->find();
if(!$user){
return $this->error('SSO用戶不存在');
}
$user['user_app']=Db::name('user_app')
->where('user_id', input('user_id'))
->select();
return $this->success($user);
} catch (\Exception $e) {
return $this->error('操作失敗');
}
}
public function getUsers()
{
try {
$users = Db::name('user')
->field('user_id,avatar,line_id,line_name,line_picture,phone,real_name,code')
->whereNotNull('delete_time')
->select();
return $this->success($users);
} catch (\Exception $e) {
return $this->error('操作失敗');
}
}
public function add()
{
$data = input();
unset($data['version']);
unset($data['action']);
unset($data['controller']);
$user_id = genUniqid($data['appid']);
$data['user_id'] = $user_id;
$avatar = isset($data['line_picture']) ? $this->saveLineImage($data['line_picture'], $data['user_id']) : '';
if (!empty($avatar)) {
$data['line_picture'] = getUrl() . '/storage/' . $data['user_id'] . '/' . $avatar;
} else {
$data['line_picture'] = '';
}
if (!isset($data['avatar'])) {
$data['avatar'] = $data['line_picture'];
} else {
$file_path = $_SERVER['DOCUMENT_ROOT'] . '/storage/' . $data['user_id'] . '/' . date('Ymd') . '/';
if (!is_dir($file_path)) {
mkdir($file_path, 0777, true);
}
$temp_file = str_replace(getUrl(), "", $data['avatar']);
$avatar_file = $file_path . basename($temp_file);
if (!rename($_SERVER['DOCUMENT_ROOT'] . $temp_file, $avatar_file)) {
return $this->error('搬移檔案失敗');
}
$data['avatar'] = getUrl() . '/storage/' . $data['user_id'] . '/' . date('Ymd') . '/' . basename($temp_file);
}
$phone_exist = Db::name('user')
->where('phone', input('phone'))
->find();
// 檢查會員電話是否存在
if (!$phone_exist) {
// 檢查推薦碼是否存在,存在的話取得推薦人的id
if (input('refer_code')) {
$refer_id = Db::name('user')
->where('code', input('refer_code'))
->value('user_id');
if ($refer_id) {
$data['parent_id'] = $refer_id;
}
}
}
unset($data['appid']);
unset($data['timestamp']);
unset($data['sign']);
unset($data['refer_code']);
try {
if ($phone_exist) {
Db::name('user')
->where('phone', input('phone'))
->update($data);
} else {
$id = Db::name('user')
->insertGetId($data);
$refer_code = encodeRefer($id);
Db::name('user')
->where('id', $id)
->update(['code' => $refer_code]);
}
//使用id取得user資料庫的資料
$result = Db::name('user')
->where('phone', input('phone'))
->find();
$payload = [
'user_id' => $data['user_id'],
];
$token = Token::genToken($payload);
return $this->success(['uid' => $data['user_id'], 'info' => $result, 'token' => 'Bearer ' . $token]);
} catch (\Exception $e) {
return $this->error($e->getMessage());
}
}
public function delete()
{
try {
Db::name('user')
->where('user_id', input('user_id'))
->update([
'delete_time' => time()
]);
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失敗');
}
}
public function update()
{
$data = input('post.');
unset($data['appid']);
unset($data['timestamp']);
unset($data['sign']);
try {
Db::name('user')
->where('user_id', $data['user_id'])
->update($data);
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失敗');
}
}
public function updateUserApp(){
$data = input('post.');
unset($data['appid']);
unset($data['timestamp']);
unset($data['sign']);
try {
$is_exist = Db::name('user_app')
->where('user_id', $data['user_id'])
->where('app', $data['app'])
->count();
if(!$is_exist){
Db::name('user_app')
->insert([
'user_id'=>$data['user_id'],
'app'=>$data['app'],
'status'=>$data['status'],
]);
}else{
Db::name('user_app')
->where('user_id', $data['user_id'])
->where('app', $data['app'])
->update([
'status'=>$data['status'],
]);
}
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失敗');
}
}
private function saveLineImage($pictureUrl, $uid)
{
if ($pictureUrl) {
$curl = curl_init($pictureUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$imageData = curl_exec($curl);
curl_close($curl);
$filename = $uid . "_line.jpg";
$filedir = $_SERVER['DOCUMENT_ROOT'] . '/storage/' . $uid;
if (!file_exists($filedir)) {
mkdir($filedir, 0777, true);
}
$fp = fopen($filedir . '/' . $filename, 'a');
fwrite($fp, $imageData);
fclose($fp);
return $filename;
} else {
return false;
}
}
}