📖 File Reader
<?php
namespace app\api\controller;
use app\BaseController;
use app\api\common\Common_config;
use app\api\common\Common_user;
use app\common\Common_dingtalk;
use app\common\Common_note;
use app\common\Common_weixinpay;
use app\common\Common_wechat;
use think\facade\Db;
use think\facade\View;
class Login extends BaseController
{
/**
* 注册
*/
public function register()
{
$user_name = input("param.user_name")!=''?input("param.user_name"):'';
$password = input("param.password");
$password2 = input("param.password2");
$invite_code = input("param.invite_code");
$mobile = input("param.mobile");
$code = input("param.code");
if (empty($mobile)){
return $this->error_json("请输入手机号");
}
if (empty($code)){
return $this->error_json("请输入验证码");
}
// if (empty($user_name)){
// return $this->error_json("请输入账号");
// }
if (empty($password)){
return $this->error_json("请输入密码");
}
if ($password != $password2){
return $this->error_json("两次密码不一致");
}
$yanzhen = Common_note::verify($mobile,$code);
if ($yanzhen["code"] == 400){
return $this->error_json($yanzhen["msg"]);
}
if (!empty($user_name)){
$user_info = db::name("user")->where("user_name = '$user_name'")->find();
if (!empty($user_info)){
return $this->error_json("账号已存在");
}
}
if (!empty($mobile)){
$mobile = db::name("user")->where("mobile = '$mobile'")->find();
if (!empty($mobile)){
return $this->error_json("手机号已存在");
}
}
$superior_id = 0;
if (!empty($invite_code)){
$superior_id = db::name("user")->where("invitation_code = '$invite_code'")->value("user_id");
if (empty($superior_id)){
return $this->error_json("邀请人不存在");
}
}
//创建随机数
$user_miyao = Common_user::user_miyao_add("30");
$invitation_code = Common_user::user_invitation_code_add("7");
$info = [
'nickname'=>$user_name,
'mobile'=>input("param.mobile"),
'user_name'=>$user_name,
'superior_id'=>$superior_id,
'password'=>md5($password),
'user_miyao'=>$user_miyao,
'invitation_code'=>$invitation_code,
'add_time'=>time(),
];
db::name("user")->insertGetId($info);
return $this->succeed_json("注册成功,请前往登录!");
}
/*注册页面h5*/
public function register_h5()
{
$config = Common_config::config("'register_url','logo'");
$invite_code = input("param.invite_code");
/*浏览器检测*/
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$browser = '';
if (strpos($user_agent, 'MicroMessenger') === false){//普通浏览器
$browser = 'ordinary';
} else {//微信浏览器
$browser = 'weixin';
}
View::assign([
'browser'=>$browser,
'invite_code'=>$invite_code,
'register_url'=>$config["register_url"],
'logo'=>$config["logo"],
]);
return View::fetch();
}
/**
* 登录
*/
public function login()
{
$user_name = input("param.user_name");
$password = input("param.password");
if (empty($user_name)){
return $this->error_json("请输入账号");
}
if (empty($password)){
return $this->error_json("password");
}
$user_info = db::name("user")->where("(user_name = '$user_name' or mobile = '$user_name')")->find();
if (empty($user_info)){
return $this->error_json("账号不存在");
}
if ($user_info["password"] != md5($password)){
return $this->error_json("密码错误");
}
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$info_login = [
'user_id'=>$user_info["user_id"],
'ip'=>$ip,
'time_add'=>$time,
];
db::name("user_login_log")->insertGetId($info_login);
db::name("user")->where("user_id = $user_info[user_id]")->update(["login_time"=>$time]);
$data["user_miyao"] = base64_encode($user_info["user_miyao"].'&'.$time);
return $this->succeed_json("登录成功",$data);
}
/*找回密码*/
public function retrieve()
{
$mobile = input("param.mobile");
$password = input("param.password");
$code = input("param.code");
if (empty($mobile)){
return $this->error_json("请输入手机号");
}
if (empty(input("param.password"))){
return $this->error_json("请输入密码");
}
if (input("param.password") != input("param.password2")){
return $this->error_json("两次密码不一致");
}
$user = db::name("user")->where("mobile = '$mobile'")->find();
if (empty($user)){
return $this->error_json("账号不存在");
}
$yanzhen = Common_note::verify($mobile,$code);
if ($yanzhen["code"] == 400){
return $this->error_json($yanzhen["msg"]);
}
$info["password"] = md5($password);
db::name("user")->where("user_id = $user[user_id]")->data($info)->update();
return $this->succeed_json("操作成功");
}
/*获取小程序openid*/
public function setCodeuid()
{
$code = input("param.code");
$config = Common_config::config("'app_id','app_secret'");
$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config["app_id"].'&secret='.$config["app_secret"].'&js_code='.$code.'&grant_type=authorization_code';
$data = file_get_contents($url);
$data = json_decode($data,true);
return $this->succeed_json("ok",$data);
}
/*小程序解密*/
public function decryptData(Common_wechat $common_wechat)
{
$config = Common_config::config("'app_id'");
$this->app_id = $config["app_id"];
$encryptedData = input("param.encryptedData");
$iv = input("param.iv");
$sessionKey = input("param.sessionKey");//获取openid时候,获取的sessionKey
$aesKey=base64_decode($sessionKey);
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj=json_decode( $result );
if($dataObj == NULL )
{
return $this->error_json("请求失败");
}
if( $dataObj->watermark->appid != $this->app_id)
{
return $this->error_json("请求失败");
}
$data = $result;
$data_arr = json_decode($data,true);
return $this->succeed_json("ok",$data_arr);
}
/*微信openid登录*/
public function wx_login()
{
$open_id = input("param.openid");
$access_token = input("param.access_token");
$superior_id = input("param.superior_id")!=''?input("param.superior_id"):0;
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
if (empty($open_id)){
return $this->error_json("授权失败");
}
$result = [];
if (!empty($access_token)){ //有参代表是公众号登录获取获取用户信息,无参代表小程序登录
$data = [
"access_token" => $access_token,
"openid" => $open_id,
"lang" => "zh_CN"
];
$method="POST";
$url = "https://api.weixin.qq.com/sns/userinfo?";
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
$result = json_decode(curl_exec($curl));//返回值
$jsonString = json_encode($result);
$result = json_decode($jsonString, true);
}
//会员信息
$userinfo = db::name("user")->where("open_id = '$open_id'")->find();
if (empty($userinfo)){
$user_miyao = Common_user::user_miyao_add("30");
$invitation_code = Common_user::user_invitation_code_add("7");
$info = [
'open_id'=>$open_id,
'user_miyao'=>$user_miyao,
'superior_id'=>$superior_id,
'invitation_code'=>$invitation_code,
'login_time'=>time(),
'add_time'=>time(),
];
if (!empty($result)){
$info["head"] = $result["headimgurl"];
$info["nickname"] = $result["nickname"];
}
db::name("user")->insertGetId($info);
$userinfo = db::name("user")->where("open_id = '$open_id'")->find();
$info_login = [
'user_id'=>$userinfo["user_id"],
'ip'=>$ip,
'time_add'=>$time,
];
db::name("user_login_log")->insertGetId($info_login);
$user_miyao = base64_encode($userinfo["user_miyao"].'&'.$time);
$data = [
'userinfo'=>$userinfo,
'user_miyao'=>$user_miyao,
'open_id'=>$open_id,
];
return $this->succeed_json("ok",$data);
}else{
$info_login = [
'user_id'=>$userinfo["user_id"],
'ip'=>$ip,
'time_add'=>$time,
];
db::name("user_login_log")->insertGetId($info_login);
$user_miyao = base64_encode($userinfo["user_miyao"].'&'.$time);
$data = [
'userinfo'=>$userinfo,
'user_miyao'=>$user_miyao,
'open_id'=>$open_id,
];
$info["login_time"] = time();
if (!empty($result)){
$info["head"] = $result["headimgurl"];
$info["nickname"] = $result["nickname"];
}
db::name("user")->where("user_id = $userinfo[user_id]")->update($info);
return $this->succeed_json("ok",$data);
}
}
/*uniapp获取公众号openid*/
public function GetOpenid_uniapp(Common_weixinpay $common_weixinpay)
{
$code = input("param.code");
$openid = $common_weixinpay->GetOpenid_uniapp($code);
return $this->succeed_json("ok",$openid);
}
/*钉钉登录处理*/
public function login_dd(Common_dingtalk $common_dingtalk)
{
$authCode = input("param.authCode");
$data = $common_dingtalk->getuserinfo($authCode);
if ($data["errcode"] != 0){
return $this->error_json($data["errmsg"]);
}
$result = $data["result"];
$userid = $data["result"]["userid"];//钉钉会员id
$user_info = db::name("user")->where("userid = $userid")->field("user_id,userid,user_miyao,name,mobile,title")->find();
if (empty($user_info)){
return $this->error_json("请联系管理员同步钉钉会员!");
}
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$info_login = [
'user_id'=>$user_info["user_id"],
'ip'=>$ip,
'time_add'=>$time,
];
db::name("user_login_log")->insertGetId($info_login);
db::name("user")->where("user_id = '$user_info[user_id]'")->update(["login_time"=>$time]);
$user_miyao = base64_encode($user_info["user_miyao"].'&'.$time);
$data = [
'userinfo'=>$result,
'user_miyao'=>$user_miyao,
];
return $this->succeed_json("ok",$data);
}
}