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

69 lines
1.8 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. //获取用户信息
  18. public function info()
  19. {
  20. return User::find($this->user_id);
  21. }
  22. //解密用户信息
  23. public function profile(Request $request)
  24. {
  25. $formData = $request->only(['iv', 'encryptedData']);
  26. $request->validate([
  27. 'iv' => 'required',
  28. 'encryptedData' => 'required',
  29. ], [
  30. '*.required' => '参数缺失'
  31. ]);
  32. $agent = Agent::query()->find($this->agent_id); //代理商数据
  33. $config = config('wechat.mini_program.default');
  34. $config = array_merge($config, [
  35. 'app_id' => $agent->appid,
  36. 'secret' => $agent->appsecret,
  37. ]);
  38. $session = Cache::get('session_key_' . $this->user_id);
  39. if (!$session) {
  40. return $this->error('无效的session,请重新登录');
  41. }
  42. $app = Factory::miniProgram($config);
  43. try {
  44. $decryptedData = $app->encryptor->decryptData($session, $formData['iv'], $formData['encryptedData']);
  45. $user = User::find($this->user_id);
  46. if (!empty($decryptedData['nickName'])) {
  47. $user->nickname = $decryptedData['nickName'];
  48. }
  49. if (!empty($decryptedData['avatarUrl'])) {
  50. $user->avatar = $decryptedData['avatarUrl'];
  51. }
  52. if (!empty($decryptedData['purePhoneNumber'])) {
  53. $user->mobile = $decryptedData['purePhoneNumber'];
  54. }
  55. $user->save();
  56. } catch (\Exception | DecryptException $e) {
  57. return $this->error($e->getMessage());
  58. }
  59. $user->token = request()->header('Authentication');
  60. return $this->success($user);
  61. }
  62. }