UserCenterController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * Created on 2020/8/17 14:25
  4. * Create by Wpeishi
  5. */
  6. namespace App\Http\Controllers\Api\V1;
  7. use App\Exceptions\ApiException;
  8. use App\Helpers\NumberHelper;
  9. use App\Http\Controllers\Api\Controller;
  10. use App\Models\OrderRecord;
  11. use App\Models\SmsLog;
  12. use App\Models\User;
  13. use App\Services\User\UserCenterService;
  14. use Dingo\Api\Http\Request;
  15. use Illuminate\Support\Facades\Cache;
  16. use Overtrue\EasySms\EasySms;
  17. /**
  18. * 用户个人中心
  19. * Created on 2020/8/27 15:05
  20. * Create by Wpeishi
  21. */
  22. class UserCenterController extends Controller
  23. {
  24. private $request;
  25. private $centerService;
  26. public function __construct(Request $request, UserCenterService $centerService)
  27. {
  28. $this->request = $request;
  29. $this->centerService = $centerService;
  30. }
  31. /**
  32. * 修改用户信息
  33. * 修改真实姓名 修改微信名称 修改学校
  34. * @return array
  35. */
  36. public function setUserInfo()
  37. {
  38. $update_data = array();
  39. if (isset($this->request->real_name))
  40. $update_data['real_name'] = $real_name = $this->request->real_name;
  41. if (isset($this->request->nick_name))
  42. $update_data['nick_name'] = $nick_name = $this->request->nick_name;
  43. if (isset($this->request->school))
  44. $update_data['school'] = $school = $this->request->school;
  45. if (isset($this->request->avatar_url))
  46. $update_data['avatar_url'] = $avatar_url = $this->request->avatar_url;
  47. if (isset($this->request->gender))
  48. $update_data['gender'] = $gender = $this->request->gender;
  49. if (isset($this->request->birthday))
  50. $update_data['birthday'] = $birthday = $this->request->birthday;
  51. if (isset($this->request->country))
  52. $update_data['country'] = $country = $this->request->country;
  53. if (isset($this->request->province))
  54. $update_data['province'] = $province = $this->request->province;
  55. if (isset($this->request->city))
  56. $update_data['birthday'] = $school = $this->request->city;
  57. try {
  58. $user = $this->auth->user();
  59. if (isset($this->request->phone)) {
  60. $verifyData = self::verificationCode($this->request);
  61. $update_data['phone'] = $this->request->phone;
  62. Cache::forget($this->request->verification_key);
  63. $user_data = User::query()->where('phone', $this->request->phone)->first();
  64. if ($user_data) {
  65. return apiJsonError('手机号已经存在');
  66. }
  67. $order_data = OrderRecord::query()->where('phone', $this->request->phone)->first();
  68. if ($order_data and $order_data->status == 1) {
  69. $update_data['user_type'] = 1;
  70. $update_data['become_member_time'] = $order_data->created_at;
  71. }
  72. }
  73. if (count($update_data)) {
  74. $this->centerService->setUserInfo($user, $update_data);
  75. }
  76. return apiJsonMsg('用户信息更新成功');
  77. } catch (ApiException $apiException) {
  78. return apiJsonMsg($apiException->getMessage());
  79. }
  80. }
  81. /**
  82. * 接口解密、手机号-wechat
  83. * @param Request $request
  84. * @return array
  85. */
  86. public function decrypt(Request $request)
  87. {
  88. $user = $this->auth->user();
  89. $app = \EasyWeChat::miniProgram();
  90. $decryptedData = $app->encryptor->decryptData($user->session_key, $request->iv, $request->encryptedData);
  91. if ($decryptedData['purePhoneNumber']) {
  92. $update_data['phone'] = $decryptedData['purePhoneNumber'];
  93. $this->centerService->setUserInfo($user, $update_data);
  94. }
  95. return apiJson($decryptedData);
  96. }
  97. /**
  98. * 修改手机号,校验验证码
  99. * @param Request $request
  100. * @return array
  101. */
  102. public function setPhone(Request $request)
  103. {
  104. $user = $this->auth->user();
  105. try {
  106. self::verificationCode($request);
  107. $update_data['phone'] = $school = $request->phone;
  108. $this->centerService->setUserInfo($user, $update_data);
  109. // 清除验证码缓存
  110. Cache::forget($request->verification_key);
  111. return apiJsonMsg('用户信息更新成功');
  112. } catch (ApiException $apiException) {
  113. return apiJsonError($apiException->getMessage());
  114. }
  115. }
  116. /**
  117. * 校验验证码是否正确
  118. * @param $request
  119. * @return mixed
  120. */
  121. public static function verificationCode($request)
  122. {
  123. $verifyData = Cache::get($request->verification_key);
  124. if (!$verifyData) {
  125. throw new ApiException('验证码已失效');
  126. }
  127. if ($verifyData['code'] != $request->verification_code) {
  128. throw new ApiException('验证码错误');
  129. }
  130. return $verifyData;
  131. }
  132. }