You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							108 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							108 lines
						
					
					
						
							3.0 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								namespace App\Http\Controllers\Api;
							 | 
						|
								use App\Http\Controllers\Controller;
							 | 
						|
								use App\Models\AdminSetting;
							 | 
						|
								use App\Models\Agent;
							 | 
						|
								use App\Models\User;
							 | 
						|
								use EasyWeChat\Factory;
							 | 
						|
								use EasyWeChat\Kernel\Exceptions\DecryptException;
							 | 
						|
								use Illuminate\Http\Request;
							 | 
						|
								use Illuminate\Support\Facades\Auth;
							 | 
						|
								use Illuminate\Support\Facades\Cache;
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * 用户
							 | 
						|
								 * Class UserController
							 | 
						|
								 * @package App\Http\Controllers\Api
							 | 
						|
								 */
							 | 
						|
								class UserController extends Controller
							 | 
						|
								{
							 | 
						|
									//获取用户信息
							 | 
						|
									public function info()
							 | 
						|
									{
							 | 
						|
										$user = User::find($this->user_id);
							 | 
						|
										return $this->success($user);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									//解密用户信息
							 | 
						|
									public function profile(Request $request)
							 | 
						|
									{
							 | 
						|
										$formData = $request->only(['iv', 'encryptedData']);
							 | 
						|
										$request->validate([
							 | 
						|
											'iv' => 'required',
							 | 
						|
											'encryptedData' => 'required',
							 | 
						|
										], [
							 | 
						|
											'*.required' => '参数缺失'
							 | 
						|
										]);
							 | 
						|
								
							 | 
						|
										$agent = Agent::query()->find($this->agent_id); //代理商数据
							 | 
						|
								
							 | 
						|
										$session = Cache::get('session_key_' . $this->user_id);
							 | 
						|
										if (!$session) {
							 | 
						|
											return $this->error('无效的session,请重新登录');
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										// 如果有appsecret,使用原来的逻辑,否则使用第三方平台逻辑
							 | 
						|
										if ($agent['appsecret']) {
							 | 
						|
											$config = config('wechat.mini_program.default');
							 | 
						|
											$config = array_merge($config, [
							 | 
						|
												'app_id' => $agent->appid,
							 | 
						|
												'secret' => $agent->appsecret,
							 | 
						|
											]);
							 | 
						|
											$app = Factory::miniProgram($config);
							 | 
						|
										} else {
							 | 
						|
											$setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
							 | 
						|
											$config = [
							 | 
						|
												'app_id'   => $setting['service_appid'],
							 | 
						|
												'secret'   => $setting['service_appsecret'],
							 | 
						|
												'token'    => $setting['service_token'],
							 | 
						|
												'aes_key'  => $setting['service_aeskey'],
							 | 
						|
											];
							 | 
						|
											$app = Factory::miniProgram($config);
							 | 
						|
										}
							 | 
						|
										try {
							 | 
						|
											$decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']);
							 | 
						|
											$user = User::find($this->user_id);
							 | 
						|
											if (!empty($decryptedData['nickName'])) {
							 | 
						|
												$user->nickname = $decryptedData['nickName'];
							 | 
						|
											}
							 | 
						|
											if (!empty($decryptedData['avatarUrl'])) {
							 | 
						|
												$user->avatar = $decryptedData['avatarUrl'];
							 | 
						|
											}
							 | 
						|
											if (!empty($decryptedData['purePhoneNumber'])) {
							 | 
						|
												$user->mobile = $decryptedData['purePhoneNumber'];
							 | 
						|
											}
							 | 
						|
											$user->unionid = $decryptedData['unionId'] ?? '';
							 | 
						|
											$user->country = $decryptedData['country'] ?? '';
							 | 
						|
											$user->province = $decryptedData['province'] ?? '';
							 | 
						|
											$user->city = $decryptedData['city'] ?? '';
							 | 
						|
											$user->gender = $decryptedData['gender'] ?? 0;
							 | 
						|
											$user->language = $decryptedData['language'] ?? '';
							 | 
						|
											$user->save();
							 | 
						|
										} catch (\Exception | DecryptException $e) {
							 | 
						|
											return $this->error($e->getMessage());
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										$user->token = request()->header('Authentication');
							 | 
						|
										return $this->success($user);
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									public function bindingMobile(Request $request)
							 | 
						|
									{
							 | 
						|
										$request->validate([
							 | 
						|
											'mobile' => 'required|int|between:10000000000,19999999999',
							 | 
						|
										], [
							 | 
						|
											'*.required' => '参数异常'
							 | 
						|
										]);
							 | 
						|
								
							 | 
						|
										$userId = $this->user_id;
							 | 
						|
										$user = User::find($userId);
							 | 
						|
										$user->mobile = Request('mobile',0);
							 | 
						|
										if ($user->save()) {
							 | 
						|
											return $this->success($user);
							 | 
						|
										} else {
							 | 
						|
											return $this->error('绑定失败',407);
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								}
							 |