BalancePasswordController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /****************************************************************
  3. * Author: libaojia
  4. * Date: 2017/9/20 上午10:10
  5. * Email: livsyitian@163.com
  6. * QQ: 995265288
  7. * User: 芸众商城 www.yunzshop.com
  8. ****************************************************************/
  9. namespace app\frontend\modules\member\controllers;
  10. use app\common\components\ApiController;
  11. use app\common\exceptions\ShopException;
  12. use app\common\facades\Setting;
  13. use app\common\services\password\PasswordService;
  14. use app\frontend\models\Member;
  15. use app\frontend\models\MemberShopInfo;
  16. use app\frontend\modules\member\services\MemberService;
  17. use app\common\services\Session;
  18. class BalancePasswordController extends ApiController
  19. {
  20. private $memberModel;
  21. /**
  22. * 支付密码是否启用,todo 应该整合到 password 中,需要前端配合,暂未整理
  23. */
  24. public function isUse()
  25. {
  26. if (!$this->getMemberModel()) return $this->errorJson('未获取到会员信息');
  27. if ($this->payPasswordState()) return $this->successJson('ok', ['is_use' => true]);
  28. return $this->successJson('ok', ['is_use' => false]);
  29. }
  30. /**
  31. * 支付密码总开关是否开启,可以考虑是否增加操作项总是否有开启,没有可以返回关闭状态
  32. *
  33. * @return bool
  34. */
  35. private function payPasswordState()
  36. {
  37. return (new PasswordService())->masterSwitch();
  38. }
  39. /**
  40. * 会员是否设置密码
  41. */
  42. public function isHasPassword()
  43. {
  44. if (!$this->getMemberModel()) return $this->errorJson('未获取到会员信息');
  45. $mobile = $this->memberModel->mobile ? $this->memberModel->mobile : '';
  46. if ($this->memberModel->yzMember->pay_password && $this->memberModel->yzMember->salt) {
  47. return $this->successJson('ok', ['is_has' => true, 'mobile' => $mobile]);
  48. }
  49. return $this->successJson('ok', ['is_has' => false, 'mobile' => $mobile]);
  50. }
  51. /**
  52. * 设置支付密码
  53. * code 1 成功, 2失败, 3未绑定手机号
  54. * @return \Illuminate\Http\JsonResponse
  55. */
  56. public function setPassword()
  57. {
  58. $result = $this->checkData();
  59. if ($result !== true) {
  60. return $this->successJson($result, ['code' => 2]);
  61. }
  62. if (!$this->memberModel->mobile) {
  63. return $this->successJson('请先绑定手机号', ['code' => 3]);
  64. }
  65. $data = (new PasswordService())->create(trim(\YunShop::request()->password));
  66. $result = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->update(['pay_password' => $data['password'], 'salt' => $data['salt']]);
  67. if (!$result) {
  68. return $this->errorJson('设置密码失败,请重试', ['code' => 2]);
  69. }
  70. return $this->successJson('设置密码成功', ['code' => 1]);
  71. }
  72. /**
  73. * 发送短信验证码
  74. * @return \Illuminate\Http\JsonResponse
  75. */
  76. public function sendCode()
  77. {
  78. $mobile = \YunShop::request()->mobile;
  79. $state = \YunShop::request()->state ?: '86';
  80. $sms_type = \YunShop::request()->sms_type;
  81. if (empty($mobile)) {
  82. return $this->errorJson('请填入手机号');
  83. }
  84. try {
  85. MemberService::mobileValidate([
  86. 'mobile' => $mobile,
  87. 'state' => $state,
  88. ]);
  89. } catch (ShopException $exception) {
  90. return $this->errorJson($exception->getMessage());
  91. }
  92. $sms = app('sms')->sendCode($mobile, $state);
  93. if (0 == $sms['status']) {
  94. return $this->errorJson($sms['json']);
  95. }
  96. return $this->successJson();
  97. }
  98. //修改密码
  99. public function updatePassword()
  100. {
  101. $result = $this->checkData();
  102. if ($result !== true) {
  103. return $this->errorJson($result);
  104. }
  105. $password = trim(\YunShop::request()->password);
  106. /*$old_password = trim(\YunShop::request()->old_password);*/
  107. $passwordService = new PasswordService();
  108. /*$result = $passwordService->check($old_password,$this->memberModel->yzMember->pay_password,$this->memberModel->yzMember->salt);
  109. if (!$result) {
  110. return $this->errorJson('原密码错误,请重试!');
  111. }*/
  112. //验证码验证
  113. $check_code = MemberService::checkCode();
  114. if ($check_code['status'] != 1) {
  115. return $this->errorJson($check_code['json']);
  116. }
  117. $password = $passwordService->make($password, $this->memberModel->yzMember->salt);
  118. $result = MemberShopInfo::where('member_id', \YunShop::app()->getMemberId())->update(['pay_password' => $password]);
  119. if (!$result) {
  120. return $this->errorJson('密码修改失败,请重试');
  121. }
  122. return $this->successJson('密码修改成功');
  123. }
  124. public function index()
  125. {
  126. if (!$this->getMemberModel()) {
  127. return $this->errorJson('未获取到会员信息');
  128. }
  129. if (!$this->memberModel->mobile) {
  130. return $this->errorJson('请先绑定手机号');
  131. }
  132. if (!$this->memberModel->yzMember->pay_password || $this->memberModel->yzMember->salt) {
  133. return $this->errorJson('请先设置密码', ['mobile' => $this->memberModel->mobile]);
  134. }
  135. return $this->successJson('ok');
  136. }
  137. private function checkData()
  138. {
  139. if (!$this->getMemberModel()) {
  140. return '未获取到会员信息';
  141. }
  142. $validator = \Validator::make(request()->all(), $this->rules(), $this->rulesMessage(), $this->attributes());
  143. if ($validator->fails()) {
  144. return $validator->messages()->first();
  145. }
  146. //验证码验证
  147. /*$check_code = MemberService::checkCode();
  148. if ($check_code['status'] != 1) {
  149. return $check_code['json'];
  150. }*/
  151. return true;
  152. }
  153. private function rules()
  154. {
  155. if ((new PasswordService())->multipleSwitch()) {
  156. return [
  157. 'password' => 'required|min:8|max:16',
  158. 'confirmed' => 'required|same:password'
  159. ];
  160. }
  161. return [
  162. 'password' => 'required|min:6|max:6|regex:/^[0-9]*$/',
  163. 'confirmed' => 'required|same:password'
  164. ];
  165. }
  166. private function rulesMessage()
  167. {
  168. if ((new PasswordService())->multipleSwitch()) {
  169. return [
  170. 'required' => ':attribute 不能为空',
  171. 'max' => ':attribute 最多16位',
  172. 'same' => ':attribute 不匹配'
  173. ];
  174. }
  175. return [
  176. 'regex' => ':attribute 必须是纯数字',
  177. 'required' => ':attribute 不能为空',
  178. 'min' => ':attribute 最少6位',
  179. 'max' => ':attribute 最多6位',
  180. 'same' => ':attribute 不匹配'
  181. ];
  182. }
  183. private function attributes()
  184. {
  185. return [
  186. 'password' => '密码',
  187. 'confirmed' => '确认密码',
  188. ];
  189. }
  190. private function getMemberModel()
  191. {
  192. return $this->memberModel = Member::select('uid', 'mobile')->with(['yzMember' => function ($query) {
  193. $query->select('member_id', 'pay_password', 'salt');
  194. }])->where('uid', \YunShop::app()->getMemberId())->first();
  195. }
  196. }