123 lines
3.8 KiB
PHP
123 lines
3.8 KiB
PHP
<?php
|
||
namespace app\api\controller;
|
||
|
||
use think\Db;
|
||
use \think\Loader;
|
||
use think\helper\Hash;
|
||
use EasyWeChat\Factory;
|
||
use EasyWeChat\MiniProgram;
|
||
use think\facade\Config;
|
||
use app\member\model\Member as MemberModel;
|
||
|
||
|
||
/**
|
||
* 登录注册接口
|
||
* @package app\api\controller
|
||
*/
|
||
class Login extends Api
|
||
{
|
||
|
||
//初始化
|
||
public function initialize(){
|
||
parent::initialize();
|
||
|
||
$config = [
|
||
'app_id' => config('smallprogram_appid'),
|
||
'secret' => config('smallprogram_appsecret'),
|
||
];
|
||
$this->app = Factory::miniProgram($config);
|
||
}
|
||
|
||
/**
|
||
* 登录凭证校验
|
||
* @param string $js_code 登录时获取的 code
|
||
*/
|
||
public function loginCodeCheck()
|
||
{
|
||
//传参数据
|
||
$data_list = $this->params;
|
||
|
||
if (!isset($data_list['js_code']) || empty($data_list['js_code'])) {
|
||
apiReturn(500,'js_code不能为空');
|
||
}
|
||
|
||
$config = [
|
||
'app_id' => config('smallprogram_appid'),
|
||
'secret' => config('smallprogram_appsecret'),
|
||
// 下面为可选项
|
||
// 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
|
||
'response_type' => 'array',
|
||
|
||
'log' => [
|
||
'level' => 'debug',
|
||
'file' => __DIR__ . '/wechat.log',
|
||
],
|
||
];
|
||
$app = Factory::miniProgram($config);
|
||
$wx_user_info = $app->auth->session($data_list['js_code']);
|
||
|
||
$member_info = MemberModel::where(['openid' => $wx_user_info['openid']])->find();
|
||
|
||
//新用户
|
||
if (empty($member_info)) {
|
||
|
||
//生成会员编号
|
||
$numRes = true;
|
||
do{
|
||
$finallymember = MemberModel::order('create_time desc')->find();
|
||
if(!empty($finallymember)){
|
||
$member_number = $finallymember['member_number']+1;
|
||
}else{
|
||
$member_number = 100001;
|
||
}
|
||
$count = MemberModel::where(['member_number'=>$member_number])->count();
|
||
if(empty($count)) {
|
||
$numRes=false;
|
||
}
|
||
}while($numRes);
|
||
|
||
//添加数据并返回主键
|
||
$res = MemberModel::create([
|
||
'member_number'=>$member_number,
|
||
'openid' => $wx_user_info['openid'],
|
||
'lastlogin_time' => time(),
|
||
'lastlogin_ip' => get_client_ip(0),
|
||
'login_num' => 1,
|
||
]);
|
||
|
||
//生成token
|
||
$user_token = $this->getToken($res['id']);
|
||
|
||
$res2 = MemberModel::update(['userToken' => $user_token], ['id' => $res['id']]);
|
||
|
||
if ($res && $res2) {
|
||
apiReturn(200,'绑定成功',['user_token' => $user_token]);
|
||
} else {
|
||
apiReturn(500,'绑定失败');
|
||
}
|
||
} else {
|
||
if ($member_info['is_delete'] != 0) {
|
||
apiReturn(500,'此账号被禁用或删除');
|
||
}
|
||
|
||
//登录是否超时(一周登录时间)
|
||
$time_compa= abs(time() - $member_info['lastlogin_time']);
|
||
if ($time_compa > 604800) {
|
||
|
||
//生成token
|
||
$user_token = $this->getToken($member_info['id']);
|
||
// 更新登录信息及token信息
|
||
$member_info->userToken = $user_token;
|
||
$member_info->lastlogin_time = time();
|
||
$member_info->lastlogin_ip = get_client_ip(1);
|
||
$member_info->login_num = $member_info->login_num + 1;
|
||
$member_info->save();
|
||
}else{
|
||
$user_token = $member_info['userToken'];
|
||
}
|
||
|
||
apiReturn(200,'登录成功',['user_token' => $user_token]);
|
||
}
|
||
}
|
||
}
|