SmsCodeService.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace app\frontend\modules\member\services;
  3. use app\common\events\member\RegisterByMobile;
  4. use app\common\models\MemberShopInfo;
  5. use app\frontend\models\Member;
  6. use app\frontend\modules\member\models\MemberModel;
  7. use app\backend\modules\charts\modules\phone\models\PhoneAttribution;
  8. use app\backend\modules\charts\modules\phone\services\PhoneAttributionService;
  9. use app\common\helpers\Url;
  10. use app\common\models\MemberGroup;
  11. use app\common\services\Session;
  12. use app\frontend\modules\member\models\MemberWechatModel;
  13. use app\frontend\modules\member\models\SubMemberModel;
  14. use Illuminate\Contracts\Encryption\DecryptException;
  15. use Illuminate\Support\Facades\Cookie;
  16. use Illuminate\Support\Str;
  17. class SmsCodeService extends MemberService
  18. {
  19. private $uniacid = 0;
  20. /**
  21. * @return array
  22. */
  23. public function login()
  24. {
  25. $this->uniacid = \YunShop::app()->uniacid;
  26. $data = request()->input();
  27. $redirect_url = request()->yz_redirect;
  28. if (\Request::isMethod('post')) {
  29. $this->validate($data);
  30. //检测验证码
  31. $checkCode = self::checkCode();
  32. if ($checkCode['status'] != 1) {
  33. return show_json(6, $checkCode['json']);
  34. }
  35. $memberInfo = MemberModel::checkMobile($this->uniacid, $data['mobile']);
  36. if (empty($memberInfo)) {
  37. $memberInfo = $this->register($data);
  38. }
  39. if (!empty($memberInfo)) {
  40. $password = $memberInfo['password'];
  41. $memberInfo = $memberInfo->toArray();
  42. $this->save(array_add($memberInfo,'password',$password), $this->uniacid);
  43. $yz_member = MemberShopInfo::getMemberShopInfo($memberInfo['uid']);
  44. if (!empty($yz_member)) {
  45. $yz_member = $yz_member->toArray();
  46. $data = MemberModel::userData($memberInfo, $yz_member);
  47. } else {
  48. $data = $memberInfo;
  49. }
  50. $data['redirect_url'] = base64_decode($redirect_url);
  51. return show_json(1, $data);
  52. } else {
  53. return show_json(6, "手机号或验证码错误");
  54. }
  55. } else {
  56. return show_json(6,"手机号或验证码错误");
  57. }
  58. }
  59. public static function validate($data)
  60. {
  61. $data = array(
  62. 'mobile' => $data['mobile'],
  63. 'password' => $data['code'],
  64. );
  65. $rules = array(
  66. 'mobile' => 'regex:/^1\d{10}$/',
  67. 'code' => 'required|min:4|regex:/^[A-Za-z0-9@!#\$%\^&\*]+$/',
  68. );
  69. $message = array(
  70. 'regex' => ':attribute 格式错误',
  71. 'required' => ':attribute 不能为空',
  72. 'min' => ':attribute 最少4位'
  73. );
  74. $attributes = array(
  75. "mobile" => '手机号',
  76. 'code' => '短信验证码',
  77. );
  78. $validate = \Validator::make($data,$rules,$message,$attributes);
  79. if ($validate->fails()) {
  80. $warnings = $validate->messages();
  81. $show_warning = $warnings->first();
  82. return show_json('0', $show_warning);
  83. } else {
  84. return show_json('1');
  85. }
  86. }
  87. //注册
  88. public function register($data)
  89. {
  90. //获取分组
  91. $default_group = MemberGroup::getDefaultGroupId()->first();
  92. $member_set = \Setting::get('shop.member');
  93. if (isset($member_set) && $member_set['headimg']) {
  94. $head_img = replace_yunshop(tomedia($member_set['headimg']));
  95. } else {
  96. $head_img = Url::shopUrl('static/images/photo-mr.jpg');
  97. }
  98. $salt = Str::random(8);
  99. $password = md5(str_random(8) . $salt);
  100. $mc_member_data = [
  101. 'uniacid' => $this->uniacid,
  102. 'mobile' => $data['mobile'],
  103. 'groupid' => $default_group->id ?: 0,
  104. 'createtime' => $_SERVER['REQUEST_TIME'],
  105. 'nickname' => $data['mobile'],
  106. 'avatar' => $head_img,
  107. 'gender' => 0,
  108. 'residecity' => '',
  109. 'salt' => $salt,
  110. 'password' => $password,
  111. ];
  112. $mc_res = MemberModel::create($mc_member_data);
  113. $member_id = $mc_res->uid;
  114. $yz_member_data = [
  115. 'member_id' => $member_id,
  116. 'uniacid' => $this->uniacid,
  117. 'group_id' => $default_group->id ?: 0,
  118. 'level_id' => 0,
  119. 'invite_code' => \app\frontend\modules\member\models\MemberModel::getUniqueInviteCode(),
  120. ];
  121. SubMemberModel::insertData($yz_member_data);
  122. //生成分销关系链
  123. Member::createRealtion($member_id);
  124. $member = MemberModel::checkMobile($this->uniacid, $data['mobile']);
  125. if ($member && $member->mobile) {
  126. event(new RegisterByMobile($member));
  127. }
  128. return $member;
  129. }
  130. /**
  131. * 验证登录状态
  132. *
  133. * @return bool
  134. */
  135. public function checkLogged()
  136. {
  137. return MemberService::isLogged();
  138. }
  139. }