wyyl/beike/Shop/Services/AccountService.php

108 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* CartService.php
*
* @copyright 2022 beikeshop.com - All Rights Reserved
* @link https://beikeshop.com
* @author Edward Yang <yangjin@guangda.work>
* @created 2022-01-05 10:12:57
* @modified 2022-01-05 10:12:57
*/
namespace Beike\Shop\Services;
use Beike\Models\Customer;
use Beike\Repositories\CustomerRepo;
use Beike\Repositories\VerifyCodeRepo;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
class AccountService
{
/**
* 注册用户
*
* @param array $data // ['email', 'password']
* @return mixed
*/
public static function register(array $data)
{
$data['customer_group_id'] = system_setting('base.default_customer_group_id', 0); // default_customer_group_id为默认客户组名称
$data['status'] = ! system_setting('base.approve_customer'); // approve_customer为是否需要审核客户
$data['from'] = $data['from'] ?? 'pc';
$data['locale'] = locale();
if ($data['email'] ?? '') {
$data['name'] = substr($data['email'], 0, strrpos($data['email'], '@'));
}
$data['avatar'] = $data['avatar'] ?? '';
hook_action('service.account.register.before', $data);
$customer = CustomerRepo::create($data);
if ($customer) {
$customer->notifyRegistration();
hook_action('service.account.register.after', $customer);
}
return $customer;
}
/**
* 发送验证码通过$type方式type为email或telephone
* @param $email
* @param $type
* @return void
*/
public static function sendVerifyCodeForForgotten($email, $type)
{
$code = str_pad(mt_rand(10, 999999), 6, '0', STR_PAD_LEFT);
VerifyCodeRepo::deleteByAccount($email);
VerifyCodeRepo::create([
'account' => $email,
'code' => $code,
]);
Log::info("找回密码验证码:{$code}");
Customer::query()->where('email', $email)->firstOrFail()->notifyVerifyCodeForForgotten($code);
}
/**
* 验证验证码是否正确,并修改密码为新密码
* @param $code
* @param $account
* @param $password
* @param string $type $account类型email代表$account为邮箱地址telephone代表$account为手机号码
* @return void
* @throws \Exception
*/
public static function verifyAndChangePassword($code, $account, $password, string $type = 'email')
{
$verifyCode = VerifyCodeRepo::findByAccount($account);
if ($verifyCode->created_at->addMinutes(10) < Carbon::now()) {
$verifyCode->delete();
throw new \Exception(trans('shop/account.verify_code_expired'));
}
if ($verifyCode->code != $code) {
throw new \Exception(trans('shop/account.verify_code_error'));
}
if ($type == 'email') {
$customer = CustomerRepo::findByEmail($account);
if (! $customer) {
throw new \Exception(trans('shop/account.account_not_exist'));
}
} elseif ($type == 'telephone') {
throw new \Exception('暂不支持手机号码找回密码');
} else {
throw new \Exception('找回密码类型错误');
}
CustomerRepo::update($customer, ['password' => $password]);
$verifyCode->delete();
}
}