baji/app/api/controller/Login.php
2025-03-03 14:47:45 +08:00

507 lines
18 KiB
PHP
Executable File

<?php
declare(strict_types=1);
namespace app\api\controller;
use app\api\controller\Base;
use app\common\model\User;
use app\common\model\UserAccount;
use \think\Request;
use think\facade\Db;
use app\common\model\ProfitDraw;
use app\common\model\UserLoginIp;
use think\facade\Log;
class Login extends Base
{
/**
* 微信授权
*/
public function login()
{
try {
$code = request()->param("code", '');
if (empty($code)) {
return $this->renderError('请求参数错误');
}
$click_id = request()->header('clickid');
$wxServer = new \app\common\server\Wx($this->app);
$user_base = $wxServer->getOpenid($code);
$openid = $user_base['openid'];
$user = null;
$wx_unionid = null;
if ($user_base['unionid'] != null && $user_base['unionid'] != '') {
$wx_unionid = $user_base['unionid'];
$user = User::getInfo(['unionid' => $wx_unionid]);
}
if ($user == null) {
$user = User::getInfo(['openid' => $openid]);
}
// return $this->renderSuccess("登录成功", $user);
if ($user) {
if ($user['click_id'] != $click_id) {
$res[] = User::where(['id' => $user['id']])->update(['click_id' => $click_id]);
}
//设置unionId
if ($wx_unionid && !empty($wx_unionid)) {
$unionid = $user['unionid'];
if ($unionid == null || empty($unionid)) {
$user['unionid'] = $wx_unionid;
// User::update($user);
$user->save();
}
}
#token时间戳
$time = time();
#token字符串
$token_num = getRandStr(10);
#加密token
$account_token = user_md5($user['id'] . $token_num . $time);
#更新账号信息
$last_login_ip1 = request()->ip();
$result = $this->ip_location($last_login_ip1);
$ip_province = '';
$ip_city = '';
$ip_adcode = '';
if ($result) {
$ip_province = $result['province'];
$ip_city = $result['city'];
$ip_adcode = $result['adcode'];
} else {
}
$res[] = UserAccount::where(['user_id' => $user['id']])->update([
'account_token' => $account_token,
'token_num' => $token_num,
'token_time' => $time,
'last_login_time' => $time,
'last_login_ip' => ip2long(request()->ip()),
'last_login_ip1' => $last_login_ip1,
'ip_adcode' => $ip_adcode,
'ip_province' => $ip_province,
'ip_city' => $ip_city,
]);
return $this->renderSuccess("登录成功", $account_token);
} else {
$nickname = request()->param('nickname', '');
$headimg = request()->param('headimg', '');
if (!$nickname || !$headimg) {
return $this->renderError('请求参数错误!');
}
$pid = 0;
$pid_pid = request()->param('pid', 0);
if ($pid_pid > 0) {
$pid_pid = $pid_pid - 1260;
log::info("获取推荐人id" . $pid_pid);
}
if ($pid_pid) {
$pid_info = User::where('id', '=', $pid_pid)->value("id");
if ($pid_info) {
log::info("获取推荐人id" . $pid_info);
$pid = $pid_info;
}
}
Db::startTrans();
$res[] = $user_id = User::insertGetId([
'openid' => $openid,
'nickname' => $nickname,
'headimg' => $headimg,
'pid' => $pid,
'addtime' => time(),
'click_id' => $click_id,
'unionid' => $wx_unionid,
]);
$time = time();
#token字符串
$token_num = getRandStr(10);
#加密token
$account_token = user_md5($user_id . $token_num . $time);
#更新账号信息
$last_login_ip1 = request()->ip();
$result = $this->ip_location($last_login_ip1);
$ip_province = '';
$ip_city = '';
$ip_adcode = '';
if ($result) {
$ip_province = $result['province'];
$ip_city = $result['city'];
$ip_adcode = $result['adcode'];
} else {
}
$res[] = UserAccount::insert([
'user_id' => $user_id,
'account_token' => $account_token,
'token_num' => $token_num,
'token_time' => $time,
'last_login_time' => $time,
'last_login_ip' => ip2long(request()->ip()),
'last_login_ip1' => $last_login_ip1,
'ip_adcode' => $ip_adcode,
'ip_province' => $ip_province,
'ip_city' => $ip_city,
]);
#记录登录日志
#推荐成功之后获取一张抽奖券
#配置
$rule = getConfig('base');
$draw_people_num = $rule['draw_people_num'];
if (!empty($pid)) {
$num = 0;
$num = ProfitDraw::where(['type' => 5, 'user_id' => $pid, 'share_uid' => $user_id])->count();
if (bccomp("$num", "$draw_people_num") < 0) {
#可以获得一张抽奖券
$res[] = User::changeDraw($pid, 1, 5, '获得一张抽奖券', $user_id);
}
}
if (resCheck($res)) {
Db::commit();
return $this->renderSuccess("登录成功", $account_token);
} else {
Db::rollback();
return $this->renderError("登录失败");
}
}
} catch (\Exception $e) {
Log::error('错误信息' . $e->getMessage());
Log::error('错误行数' . $e->getLine());
}
}
/**
* 微信授权
*/
public function h5login()
{
try {
$code = request()->param("code", '');
if (empty($code)) {
return $this->renderError('请求参数错误');
}
$click_id = request()->header('clickid');
$wxServer = new \app\common\server\WechatOfficialAccount($this->app);
$user_base = $wxServer->getAccessToken($code);
// $user_base_info = $wxServer->getUserInfo($user_base);
$retrieved_openid = $user_base['openid'];
$openid = $retrieved_openid;
$user = null;
if ($user_base['unionid'] != null && $user_base['unionid'] != '') {
$unionid = $user_base['unionid'];
$user = User::getInfo(['unionid' => $unionid]);
if ($user != null) {
// $user
if ($user['gzh_openid'] == null || $user['gzh_openid'] != $retrieved_openid) {
$user['gzh_openid'] = $retrieved_openid;
$user->save();
}
}
}
if ($user == null) {
$user = User::getInfo(['openid' => $openid]);
}
// return $this->renderSuccess("登录成功", $user);
if ($user) {
if ($user['click_id'] != $click_id) {
$res[] = User::where(['id' => $user['id']])->update(['click_id' => $click_id]);
}
#token时间戳
$time = time();
#token字符串
$token_num = getRandStr(10);
#加密token
$account_token = user_md5($user['id'] . $token_num . $time);
#更新账号信息
$last_login_ip1 = request()->ip();
$result = $this->ip_location($last_login_ip1);
$ip_province = '';
$ip_city = '';
$ip_adcode = '';
if ($result) {
$ip_province = $result['province'];
$ip_city = $result['city'];
$ip_adcode = $result['adcode'];
} else {
}
$res[] = UserAccount::where(['user_id' => $user['id']])->update([
'account_token' => $account_token,
'token_num' => $token_num,
'token_time' => $time,
'last_login_time' => $time,
'last_login_ip' => ip2long(request()->ip()),
'last_login_ip1' => $last_login_ip1,
'ip_adcode' => $ip_adcode,
'ip_province' => $ip_province,
'ip_city' => $ip_city,
]);
return $this->renderSuccess("登录成功", $account_token);
} else {
$userinfo = $wxServer->getUserInfo($user_base);
$nickname = $userinfo['nickname'];
$headimg = $userinfo['headimgurl'];
if (!$nickname || !$headimg) {
return $this->renderError('请求参数错误!');
}
$pid = 0;
$pid_pid = request()->param('pid', 0);
if ($pid_pid > 0) {
$pid_pid = $pid_pid - 1260;
log::info("获取推荐人id" . $pid_pid);
}
if ($pid_pid) {
$pid_info = User::where('id', '=', $pid_pid)->value("id");
if ($pid_info) {
log::info("获取推荐人id" . $pid_info);
$pid = $pid_info;
}
}
Db::startTrans();
$res[] = $user_id = User::insertGetId([
'openid' => $openid,
'nickname' => $nickname,
'headimg' => $headimg,
'pid' => $pid,
'addtime' => time(),
'click_id' => $click_id
]);
$time = time();
#token字符串
$token_num = getRandStr(10);
#加密token
$account_token = user_md5($user_id . $token_num . $time);
#更新账号信息
$last_login_ip1 = request()->ip();
$result = $this->ip_location($last_login_ip1);
$ip_province = '';
$ip_city = '';
$ip_adcode = '';
if ($result) {
$ip_province = $result['province'];
$ip_city = $result['city'];
$ip_adcode = $result['adcode'];
} else {
}
$res[] = UserAccount::insert([
'user_id' => $user_id,
'account_token' => $account_token,
'token_num' => $token_num,
'token_time' => $time,
'last_login_time' => $time,
'last_login_ip' => ip2long(request()->ip()),
'last_login_ip1' => $last_login_ip1,
'ip_adcode' => $ip_adcode,
'ip_province' => $ip_province,
'ip_city' => $ip_city,
]);
#记录登录日志
#推荐成功之后获取一张抽奖券
#配置
$rule = getConfig('base');
$draw_people_num = $rule['draw_people_num'];
if (!empty($pid)) {
$num = 0;
$num = ProfitDraw::where(['type' => 5, 'user_id' => $pid, 'share_uid' => $user_id])->count();
if (bccomp("$num", "$draw_people_num") < 0) {
#可以获得一张抽奖券
$res[] = User::changeDraw($pid, 1, 5, '获得一张抽奖券', $user_id);
}
}
if (resCheck($res)) {
Db::commit();
return $this->renderSuccess("登录成功", $account_token);
} else {
Db::rollback();
return $this->renderError("登录失败");
}
}
} catch (\Exception $e) {
Log::error('错误信息' . $e->getMessage());
Log::error('错误行数' . $e->getLine());
return $this->renderError('非法请求');
}
}
public function ip_location($last_login_ip)
{
if ($last_login_ip) {
$url = "https://restapi.amap.com/v3/ip?key=6a46ad822120e393956e89d498e8c40b&ip=" . "$last_login_ip" . "";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
if ($result['status'] == '1') {
return $result;
} else {
return false;
}
} else {
return false;
}
}
/**
* 绑定手机号
*/
public function login_bind_mobile()
{
$user = $this->getUser();
$user_id = $user['id'];
$code = request()->param("code", '');
$wxServer = new \app\common\server\Wx($this->app);
$mobile = $wxServer->getMobile($code);
Db::startTrans();
$res = [];
// $res[] = User::where(['id' => $user['id']])->update([
// 'mobile' => $mobile,
// 'update_time' => time(),
// ]);
$user_mobile = User::where(['mobile' => $mobile])->find();
if ($user_mobile) {
$old_user_account = UserAccount::where(['user_id' => $user_id])->find();
#修改openid
$res[] = User::where(['id' => $user_mobile['id']])
->update([
'openid' => $user['openid'],
// 'nickname' => $user['nickname'],
// 'headimg' => $user['headimg'],
]);
#修改token
$res[] = UserAccount::where(['user_id' => $user_mobile['id']])->update([
'account_token' => $old_user_account['account_token'],
'token_num' => $old_user_account['token_num'],
'token_time' => $old_user_account['token_time'],
'last_login_time' => $old_user_account['last_login_time'],
'last_login_ip' => $old_user_account['last_login_ip'],
]);
#修改
$res[] = User::where(['id' => $user['id']])->delete();
$res[] = UserAccount::where(['user_id' => $user_id])->delete();
// $res[] = UserAccount::where(['user_id' => $user['id']])->update([
// 'token_time' => time(),
// ]);
} else {
$res[] = User::where(['id' => $user['id']])->update([
'mobile' => $mobile,
'update_time' => time(),
]);
}
if (resCheck($res)) {
Db::commit();
return $this->renderSuccess("绑定成功2");
} else {
Db::rollback();
return $this->renderSuccess("绑定成功3");
}
}
/**
* 绑定手机号
*/
public function login_bind_mobile_h5()
{
$user = $this->getUser();
$user_id = $user['id'];
$mobile = request()->param("mobile", '');
Db::startTrans();
$res = [];
$res[] = User::where(['id' => $user_id])->update([
'mobile' => $mobile,
'update_time' => time(),
]);
if (resCheck($res)) {
Db::commit();
return $this->renderSuccess("绑定成功2");
} else {
Db::rollback();
return $this->renderSuccess("绑定成功3");
}
}
/**
*
*
* @return mixed
*/
public function getAccessTokenOffiaccountSign()
{
$wxServer = new \app\common\server\WechatOfficialAccount($this->app);
$url = request()->param("url", '');
$data = $wxServer->getAccessTokenOffiaccountSign($url);
return $this->renderSuccess('', $data);
}
public function test()
{
$account_token['token'] = "77f6358084be8d5545747911e7f9d5ad5644a114";
$account_token['logintype'] = "2";
return $this->renderSuccess("登录成功", $account_token);
}
public function test1()
{
$share_image = getConfig("base")['share_image'];
$public_path = dirname($_SERVER['SCRIPT_FILENAME']);
$poster_bg = $public_path . $share_image;
// var_dump($poster_bg);
// $rule = getConfig('base');
// $draw_people_num = $rule['draw_people_num'];
// $user_id = 31;
// $pid = 24;
// if(!empty($pid)){
// $num = 0;
// $num = ProfitDraw::where(['type'=>5,'user_id'=>$pid])->count();
// if(bccomp("$num","$draw_people_num") < 0){
// #可以获得一张抽奖券
// $res= User::changeDraw($pid, 1,5 , '获得一张抽奖券',$user_id);
// var_dump($res);
// }
// }
// log::info($res);
}
}