|
@@ -9,8 +9,10 @@
|
|
namespace App\Http\Controllers\Api\V1;
|
|
namespace App\Http\Controllers\Api\V1;
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Controller;
|
|
|
|
+use App\Models\Area;
|
|
use App\Models\User;
|
|
use App\Models\User;
|
|
use EasyWeChat\Factory;
|
|
use EasyWeChat\Factory;
|
|
|
|
+use Cache;
|
|
|
|
|
|
class CommonController extends Controller
|
|
class CommonController extends Controller
|
|
{
|
|
{
|
|
@@ -19,12 +21,27 @@ class CommonController extends Controller
|
|
$req = request()->post();
|
|
$req = request()->post();
|
|
$this->validate(request(), [
|
|
$this->validate(request(), [
|
|
'wechat_code' => 'required',
|
|
'wechat_code' => 'required',
|
|
|
|
+ 'phone|手机号' => 'max:20',
|
|
|
|
+ 'verify_code|验证码' => 'integer',
|
|
'nickname|昵称' => 'max:50',
|
|
'nickname|昵称' => 'max:50',
|
|
'avatar|头像' => 'url',
|
|
'avatar|头像' => 'url',
|
|
'latitude|纬度' => 'numeric',
|
|
'latitude|纬度' => 'numeric',
|
|
'longitude|纬度' => 'numeric',
|
|
'longitude|纬度' => 'numeric',
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
+ if (!empty($req['phone'])) {
|
|
|
|
+ if (empty($req['verify_code'])) {
|
|
|
|
+ return out(null, 10003, '验证码不能为空');
|
|
|
|
+ }
|
|
|
|
+ $verify_code = Cache::get($req['phone'].'-1');
|
|
|
|
+ if($verify_code != $req['verify_code']){
|
|
|
|
+ if (env('APP_ENV') == 'online' || $req['verify_code'] != '111111') {
|
|
|
|
+ return out(null, 10004, '验证码错误');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ Cache::delete($req['phone'].'-1');
|
|
|
|
+ }
|
|
|
|
+
|
|
$app = Factory::miniProgram(config('config.wechat_small_program'));
|
|
$app = Factory::miniProgram(config('config.wechat_small_program'));
|
|
$data = $app->auth->session($req['wechat_code']);
|
|
$data = $app->auth->session($req['wechat_code']);
|
|
if (empty($data['openid'])){
|
|
if (empty($data['openid'])){
|
|
@@ -40,6 +57,7 @@ class CommonController extends Controller
|
|
'avatar' => $req['avatar'] ?? '',
|
|
'avatar' => $req['avatar'] ?? '',
|
|
'latitude' => $req['latitude'] ?? 0,
|
|
'latitude' => $req['latitude'] ?? 0,
|
|
'longitude' => $req['longitude'] ?? 0,
|
|
'longitude' => $req['longitude'] ?? 0,
|
|
|
|
+ 'phone' => $req['phone'] ?? '',
|
|
'session_key' => $session_key
|
|
'session_key' => $session_key
|
|
]);
|
|
]);
|
|
}
|
|
}
|
|
@@ -48,13 +66,16 @@ class CommonController extends Controller
|
|
return out(null, 10002, '该账号已被冻结');
|
|
return out(null, 10002, '该账号已被冻结');
|
|
}
|
|
}
|
|
|
|
|
|
- User::where('id', $user['id'])->update([
|
|
|
|
|
|
+ $update = [
|
|
'nickname' => $req['nickname'] ?? '',
|
|
'nickname' => $req['nickname'] ?? '',
|
|
'avatar' => $req['avatar'] ?? '',
|
|
'avatar' => $req['avatar'] ?? '',
|
|
'latitude' => $req['latitude'] ?? 0,
|
|
'latitude' => $req['latitude'] ?? 0,
|
|
'longitude' => $req['longitude'] ?? 0,
|
|
'longitude' => $req['longitude'] ?? 0,
|
|
|
|
+ 'phone' => $req['phone'] ?? '',
|
|
'session_key' => $session_key
|
|
'session_key' => $session_key
|
|
- ]);
|
|
|
|
|
|
+ ];
|
|
|
|
+ $update = array_filter($update);
|
|
|
|
+ User::where('id', $user['id'])->update($update);
|
|
}
|
|
}
|
|
|
|
|
|
$token = aes_encrypt(['id' => $user['id'], 'time' => time()]);
|
|
$token = aes_encrypt(['id' => $user['id'], 'time' => time()]);
|
|
@@ -62,6 +83,63 @@ class CommonController extends Controller
|
|
return out(['token' => $token]);
|
|
return out(['token' => $token]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public function getPhoneNumber()
|
|
|
|
+ {
|
|
|
|
+ $req = request()->post();
|
|
|
|
+ $this->validate(request(), [
|
|
|
|
+ 'wechat_code' => 'required',
|
|
|
|
+ 'iv' => 'required',
|
|
|
|
+ 'encryptData' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ $app = Factory::miniProgram(config('config.wechat_small_program'));
|
|
|
|
+ $data = $app->auth->session($req['wechat_code']);
|
|
|
|
+ if (empty($data['openid']) || empty($data['session_key'])){
|
|
|
|
+ return out(null, 10001, '微信code错误');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $decryptedData = $app->encryptor->decryptData($data['session_key'], $req['iv'], $req['encryptData']);
|
|
|
|
+ if (empty($decryptedData['phoneNumber'])) {
|
|
|
|
+ return out(null, 10002, '授权手机号错误');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!User::where('openid', $data['openid'])->exists()){
|
|
|
|
+ User::create([
|
|
|
|
+ 'openid' => $data['openid'],
|
|
|
|
+ 'phone' => $decryptedData['phoneNumber'],
|
|
|
|
+ 'session_key' => $data['session_key']
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ return out(null, 10003, '获取手机号失败', $e->getMessage());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return out($decryptedData);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function getUserByCode()
|
|
|
|
+ {
|
|
|
|
+ $req = request()->post();
|
|
|
|
+ $this->validate(request(), [
|
|
|
|
+ 'wechat_code' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ $app = Factory::miniProgram(config('config.wechat_small_program'));
|
|
|
|
+ $data = $app->auth->session($req['wechat_code']);
|
|
|
|
+ if (empty($data['openid'])){
|
|
|
|
+ return out(null, 10001, '微信code错误');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $user = User::select(['id', 'status', 'phone', 'nickname', 'avatar'])->where('openid', $data['openid'])->first();
|
|
|
|
+ if (!empty($user) && $user['status'] == 0) {
|
|
|
|
+ return out(null, 10002, '该账号已被冻结');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return out($user);
|
|
|
|
+ }
|
|
|
|
+
|
|
public function uploadFile()
|
|
public function uploadFile()
|
|
{
|
|
{
|
|
$file = request()->file('file');
|
|
$file = request()->file('file');
|
|
@@ -77,7 +155,73 @@ class CommonController extends Controller
|
|
|
|
|
|
public function areaList()
|
|
public function areaList()
|
|
{
|
|
{
|
|
|
|
+ $areas = Area::get();
|
|
|
|
+ $data1 = $data2 = $data3 = [];
|
|
|
|
+ foreach ($areas as $k => $v) {
|
|
|
|
+ if ($v['level'] == 1) {
|
|
|
|
+ $data1[$k]['id'] = $v['id'];
|
|
|
|
+ $data1[$k]['name'] = $v['name'];
|
|
|
|
+ $data1[$k]['sub'] = [];
|
|
|
|
+ }
|
|
|
|
+ if ($v['level'] == 2) {
|
|
|
|
+ $arr = [];
|
|
|
|
+ $arr['id'] = $v['id'];
|
|
|
|
+ $arr['name'] = $v['name'];
|
|
|
|
+ //$arr['sub'] = [];
|
|
|
|
+ $data2[$v['parent_id']][] = $arr;
|
|
|
|
+ }
|
|
|
|
+ /*if ($v['level'] == 3) {
|
|
|
|
+ $arr = [];
|
|
|
|
+ $arr['id'] = $v['id'];
|
|
|
|
+ $arr['name'] = $v['name'];
|
|
|
|
+ $data3[$v['parent_id']][] = $arr;
|
|
|
|
+ }*/
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*foreach ($data2 as $k => $v) {
|
|
|
|
+ foreach ($v as $k1 => $v1) {
|
|
|
|
+ $data2[$k][$k1]['sub'] = $data3[$v1['id']]??[];
|
|
|
|
+ }
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+ foreach ($data1 as $k => $v) {
|
|
|
|
+ $data1[$k]['sub'] = $data2[$v['id']]??[];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return out($data1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public function sendVerifyCode()
|
|
|
|
+ {
|
|
|
|
+ //防止恶意刷验证码接口,一分钟最多10次
|
|
|
|
+ check_repeat_request(60, 10);
|
|
$req = request()->post();
|
|
$req = request()->post();
|
|
|
|
+ $this->validate(request(), [
|
|
|
|
+ 'type' => 'required|integer',
|
|
|
|
+ 'phone|手机号' => 'required',
|
|
|
|
+ ]);
|
|
|
|
+
|
|
|
|
+ if($req['type'] == 3 || $req['type'] == 4){
|
|
|
|
+ $user = User::getUserByToken();
|
|
|
|
+ if ($user['phone'] != $req['phone']){
|
|
|
|
+ return out(null, 30007, '该手机号不是注册时的手机号');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if ($req['type'] == 5) {
|
|
|
|
+ if (User::where('phone', $req['phone'])->exists()) {
|
|
|
|
+ return out(null, 30008, '此手机号已经被占用');
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $verify_code = generate_code();
|
|
|
|
+ $result = send_sms($req['phone'], 'verify_template_code', ['code' => $verify_code]);
|
|
|
|
+ if (!$result){
|
|
|
|
+ return out(null, 30010, '验证码发送失败,请稍后重试');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Cache::set($req['phone'].'-'.$req['type'], $verify_code, config('config.aly_sms.sms_verify_code_expire'));
|
|
|
|
+
|
|
|
|
+ return out();
|
|
}
|
|
}
|
|
|
|
|
|
public function doc()
|
|
public function doc()
|