507 lines
18 KiB
PHP
Executable File
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);
|
|
}
|
|
|
|
} |