海南旅游SAAS
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.

62 lines
1.7 KiB

  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Agent;
  5. use App\Models\User;
  6. use EasyWeChat\Factory;
  7. use EasyWeChat\Kernel\Exceptions\DecryptException;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Cache;
  10. /**
  11. * 用户
  12. * Class UserController
  13. * @package App\Http\Controllers\Api
  14. */
  15. class UserController extends Controller
  16. {
  17. public function profile(Request $request)
  18. {
  19. $formData = $request->only(['iv', 'encryptedData']);
  20. $request->validate([
  21. 'iv' => 'required',
  22. 'encryptedData' => 'required',
  23. ], [
  24. '*.required' => '参数缺失'
  25. ]);
  26. $agent = Agent::query()->find($this->agent_id); //代理商数据
  27. $config = config('wechat.mini_program.default');
  28. $config = array_merge($config, [
  29. 'app_id' => $agent->appid,
  30. 'secret' => $agent->appsecret,
  31. ]);
  32. $session = Cache::get('session_key_' . $this->user_id);
  33. if (!$session) {
  34. return $this->error('无效的session,请重新登录');
  35. }
  36. $app = Factory::miniProgram($config);
  37. try {
  38. $decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']);
  39. $user = User::find($this->user_id);
  40. if (!empty($decryptedData['nickName'])) {
  41. $user->nickname = $decryptedData['nickName'];
  42. }
  43. if (!empty($decryptedData['avatarUrl'])) {
  44. $user->avatar = $decryptedData['avatarUrl'];
  45. }
  46. if (!empty($decryptedData['purePhoneNumber'])) {
  47. $user->mobile = $decryptedData['purePhoneNumber'];
  48. }
  49. $user->save();
  50. } catch (\Exception | DecryptException $e) {
  51. return $this->error($e->getMessage());
  52. }
  53. $user->token = request()->header('Authentication');
  54. return $this->success($user);
  55. }
  56. }