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

70 lines
1.8 KiB

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