497 lines
17 KiB
PHP
Executable File
497 lines
17 KiB
PHP
Executable File
<?php
|
||
|
||
namespace app\usmobile\controller;
|
||
|
||
use think\Cookie;
|
||
use think\Lang;
|
||
use think\Loader;
|
||
use think\Config;
|
||
use think\Session;
|
||
use think\Cache;
|
||
|
||
class Customer extends BaseController {
|
||
|
||
public function index() {
|
||
/*if ($this->customer_id > 0)
|
||
{
|
||
$this->redirect(url('usmobile/customer/personal'));
|
||
}
|
||
*/ $this->redirect(url('usmobile/customer/personal'));
|
||
$url = $this->request->get('url');
|
||
$url = $url != '' ? $url : '';
|
||
$this->assign('url', $url);
|
||
|
||
return $this->fetch();
|
||
}
|
||
|
||
# 用旧密码改新密码
|
||
public function update_pwd()
|
||
{
|
||
$data = $this->request->post();
|
||
// tiaoshi($data);die;
|
||
if (empty($data) || $this->customer_id <= 0)
|
||
{
|
||
return $this->json(-1, 'Data error');
|
||
}
|
||
|
||
if ($this->customer_info['have_pwd'])
|
||
{
|
||
$customer_info = model('customer')->where(['id' => $this->customer_id])->find();
|
||
if (md5($data['old_password']) != $customer_info['password'])
|
||
{
|
||
return $this->json(-2, 'Old password incorrect');
|
||
}
|
||
}
|
||
|
||
$update_data = [
|
||
'password' => md5($data['password']),
|
||
'salt' => $data['password']
|
||
];
|
||
|
||
$result = model('customer')->where(['id' => $this->customer_id])->update($update_data);
|
||
if (!$result)
|
||
{
|
||
return $this->json(-4, 'New passwords do not match.');
|
||
}
|
||
|
||
$customer_info = model('customer')->getBasicInfo($this->customer_id);
|
||
|
||
$this->set_login_token($customer_info);
|
||
return $this->json(200, 'Your password has been updated.');
|
||
}
|
||
|
||
# 用邮箱改密码
|
||
public function update_forget_pwd()
|
||
{
|
||
$data = $this->request->post();
|
||
// tiaoshi($data);die;
|
||
if (empty($data))
|
||
{
|
||
return $this->json(-1, 'Data error');
|
||
}
|
||
|
||
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $data['email']))
|
||
{
|
||
return $this->json(-2, 'Error Mail Form');
|
||
}
|
||
|
||
$customer_info = model('customer')->getBasicInfoByEmail($data['email']);
|
||
if (empty($customer_info))
|
||
{
|
||
return $this->json(-3, 'The email is not registered');
|
||
}
|
||
|
||
$token = md5($data['email'] . 'forgetpwd');
|
||
$this->cacheSet($token, $data['email'], 3600);
|
||
|
||
$result = $this->send_forgetpwd_email($data['email'], $token);
|
||
if ($result['code'] < 0)
|
||
{
|
||
return $this->json(-4, $result['msg']);
|
||
}
|
||
|
||
$this->_logout();
|
||
return $this->json(200, 'The email sending successful');
|
||
}
|
||
|
||
public function retrieve_password()
|
||
{
|
||
return view();
|
||
}
|
||
|
||
public function change_password()
|
||
{
|
||
$token = $this->request->post('token');
|
||
$password = $this->request->post('password');
|
||
$email = $this->cacheGet($token, '');
|
||
|
||
if ($email == '')
|
||
{
|
||
return $this->json(-1, 'Link Invalid');
|
||
}
|
||
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $email))
|
||
{
|
||
return $this->json(-2, 'Error Mail Form');
|
||
}
|
||
if (!preg_match("/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*-.]+$)[a-zA-Z\d!@#$%^&*-.]{8,20}$/", $password))
|
||
{
|
||
return $this->json(-3, 'The password must contain 8-20 characters and at least two types of characters.');
|
||
}
|
||
|
||
model('customer')->where(['stat' => 0, 'email' => $email])->update(['password' => md5($password)]);
|
||
$this->cacheDelete($token);
|
||
return $this->json(200, 'Your password has been updated.');
|
||
}
|
||
|
||
public function check_forgetpwd_email()
|
||
{
|
||
$token = $this->request->param('token');
|
||
$email = $this->cacheGet($token, '');
|
||
if ($email == '' || !preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $email))
|
||
{
|
||
return $this->json(-1, 'Error Mail Form');
|
||
}
|
||
|
||
$password = $this->request->post('password');
|
||
if (!preg_match("/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*-.]+$)[a-zA-Z\d!@#$%^&*-.]{8,20}$/", $data['password']))
|
||
{
|
||
return $this->json(-2, 'The password must contain 8-20 characters and at least two types of characters.');
|
||
}
|
||
|
||
$customer = model('customer')->where(['stat' => 0, 'email' => $email])->find();
|
||
if (empty($customer))
|
||
{
|
||
return $this->json(-3, 'The email is not registered');
|
||
}
|
||
|
||
model('customer')->where(['stat' => 0, 'email' => $email])->update(['password' => md5($password)]);
|
||
|
||
$this->cacheDelete($token);
|
||
return $this->json(200, 'Your password has been updated.');
|
||
}
|
||
|
||
private function send_forgetpwd_email($email, $token)
|
||
{
|
||
//邮件标题
|
||
$subject = $this->request->host() . '-retrieve_password';
|
||
//邮件内容
|
||
$body = "<p>Dear $email,</p>
|
||
<p>We recently received a request to reset your password.</p>
|
||
<p>You may change your password to something secure and memorable here:</p>
|
||
<p>http://www.orico.cc/usmobile/customer/forgetpwd.html?token=$token</p>
|
||
<p>If you did not request to reset your password, please ignore this email and log in with your existing password.</p>
|
||
<p>Feel free to get in touch if you have any questions.</p>
|
||
<p>The Orico Team</p>
|
||
<p>supports@orico.com.cn</p>";
|
||
|
||
$res = $this->sendemail($email, $email, $subject, $body, 'oricogroup@orico.com.cn');
|
||
if ($res['code'] == 200) {
|
||
return ['code' => 200, 'msg' => "We’ll send you a link so you can please confirm."];
|
||
} else {
|
||
return ['code' => -3, 'msg' => $res['msg']];
|
||
}
|
||
}
|
||
|
||
public function activation()
|
||
{
|
||
$email = $this->request->param('email');
|
||
$email = isset($email) ? $email : '';
|
||
|
||
$this->assign('email', $email);
|
||
return $this->view->fetch();
|
||
}
|
||
public function forgetpwd_email()
|
||
{
|
||
return $this->view->fetch();
|
||
}
|
||
public function new_register()
|
||
{
|
||
$data = $this->request->post();
|
||
// tiaoshi($data);die;
|
||
if (empty($data) || $this->customer_id > 0)
|
||
{
|
||
return $this->json(-1, 'data error');
|
||
}
|
||
|
||
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $data['email']))
|
||
{
|
||
return $this->json(-2, 'Error Mail Form');
|
||
}
|
||
|
||
if (!isset($data['re_send']) && !preg_match("/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*-.]+$)[a-zA-Z\d!@#$%^&*-.]{8,20}$/", $data['password']))
|
||
{
|
||
return $this->json(-3, 'The password must contain 8-20 characters and at least two types of characters.');
|
||
}
|
||
|
||
if (!isset($data['re_send']) && !$this->verify_check($data['captcha'], 'authcode'))
|
||
{
|
||
return $this->json(-4, 'Verification code error');
|
||
}
|
||
|
||
$customer = model('customer')->where(['email' => $data['email'], 'stat' => 0])->find();
|
||
if (!empty($customer))
|
||
{
|
||
return $this->json(-5, 'This email has previously been used.');
|
||
}
|
||
|
||
$token = md5($data['email'] . 'register');
|
||
$result = $this->send_register_email($data['email'], $token);
|
||
if ($result['code'] < 0)
|
||
{
|
||
return $this->json(-6, $result['msg']);
|
||
}
|
||
|
||
if (!isset($data['re_send']))
|
||
{
|
||
$delimiter = '$*$%&';
|
||
$this->cacheSet($token, $data['email'] . $delimiter . md5($data['password']), 3600);
|
||
}
|
||
else
|
||
{
|
||
if ($this->cacheHas($token))
|
||
{
|
||
$this->cacheSet($token, $this->cacheGet($token), 3600);
|
||
}
|
||
else
|
||
{
|
||
return $this->json(-100, 'The link has expired');
|
||
}
|
||
}
|
||
|
||
return $this->json(200, 'Send Success');
|
||
}
|
||
|
||
public function check_register_email()
|
||
{
|
||
$token = $this->request->param('token');
|
||
|
||
$data = $this->cacheGet($token, '');
|
||
if ($data == '')
|
||
{
|
||
echo '<script>alert("Captcha Invalid")</script>';
|
||
exit;
|
||
}
|
||
|
||
$delimiter = '$*$%&';
|
||
$arr = explode($delimiter, $data);
|
||
if (!is_array($arr) || !isset($arr[0]) || !isset($arr[1]))
|
||
{
|
||
echo '<script>alert("Data Invalid")</script>';
|
||
exit;
|
||
}
|
||
|
||
$email = $arr[0];
|
||
$password = $arr[1];
|
||
|
||
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $email))
|
||
{
|
||
echo '<script>alert("Error Mail Form")</script>';
|
||
exit;
|
||
}
|
||
|
||
$customer = model('customer')->where(['stat' => 0, 'email' => $email])->find();
|
||
if (!empty($customer))
|
||
{
|
||
echo '<script>alert("This email has previously been used.")</script>';
|
||
exit;
|
||
}
|
||
|
||
$firstname = 'Orico' . rand(10000000, 99999999);
|
||
$insert_data = [
|
||
'firstname' => $firstname,
|
||
'email' => $email,
|
||
'password' => $password,
|
||
'country_code' => $this->country_code
|
||
];
|
||
|
||
$customer_id = model('customer')->insertGetId($insert_data);
|
||
if (!$customer_id)
|
||
{
|
||
echo '<script>alert("Registry Faild")</script>';
|
||
}
|
||
|
||
$customer_info = model('customer')->getBasicInfo($customer_id);
|
||
|
||
$this->set_login_token($customer_info);
|
||
$this->cacheDelete($token);
|
||
|
||
echo '<script>
|
||
alert("Registry Success");
|
||
location.href="http://www.orico.cc/usmobile";
|
||
</script>';
|
||
exit;
|
||
}
|
||
|
||
private function send_register_email($email, $token)
|
||
{
|
||
//邮件标题
|
||
$subject = $this->request->host() . '-registry';
|
||
//邮件内容
|
||
$body = "<p>Dear $email</p><p>Thank you for registering at orico, we’re excited to have you with us!</p><p>Click the link below to activate your account:</p><p>http://www.orico.cc/usmobile/customer/check_register_email.html?token=$token</p><p>The Orico Team</p><p>support@orico.com.cn</p>";
|
||
|
||
$res = $this->sendemail($email, $email, $subject, $body, 'oricogroup@orico.com.cn');
|
||
if ($res['code'] == 200) {
|
||
return ['code' => 200, 'msg' => "We’ll send you a link so you can please confirm."];
|
||
} else {
|
||
return ['code' => -3, 'msg' => $res['msg']];
|
||
}
|
||
}
|
||
|
||
public function login()
|
||
{
|
||
if ($this->customer_id > 0)
|
||
{
|
||
$this->redirect(url('usmobile/customer/personal'));
|
||
}
|
||
return view();
|
||
}
|
||
|
||
public function new_login()
|
||
{
|
||
$data = $this->request->post();
|
||
if (empty($data) || $this->customer_id > 0)
|
||
{
|
||
return $this->json(-1, 'Data error');
|
||
}
|
||
|
||
$where = [
|
||
'stat' => 0,
|
||
'email' => $data['email']
|
||
];
|
||
|
||
$customer_info = model('customer')->where($where)->field('id, firstname, picture, sex, email, telephone, qq, birthday, password')->find();
|
||
if (empty($customer_info))
|
||
{
|
||
return $this->json(-2, 'The email is not registered');
|
||
}
|
||
|
||
if ($customer_info['password'] != md5($data['password']) || empty($data['password']))
|
||
{
|
||
return $this->json(-3, 'Email address or password incorrect');
|
||
}
|
||
|
||
$this->set_login_token($customer_info);
|
||
return $this->json(200, 'Login Successful');
|
||
}
|
||
|
||
public function register() {
|
||
if ($this->customer_id > 0) {
|
||
return $this->redirect(url('usmobile/customer/personal'));
|
||
}
|
||
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function personal()
|
||
{
|
||
if ($this->customer_id <= 0)
|
||
{
|
||
$this->redirect(url('usmobile/customer/login'));
|
||
}
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function my_collection()
|
||
{
|
||
if ($this->customer_id <= 0)
|
||
{
|
||
$this->redirect(url('usmobile/customer/login'));
|
||
}
|
||
|
||
$param = $this->request->param();
|
||
// tiaoshi($param);die;
|
||
$where = ['a.stat' => 0, 'b.stat' => 0, 'a.customer_id' => $this->customer_id, 'b.country_code' => $this->country_code];
|
||
if (isset($param['cid']))
|
||
{
|
||
$cid_arr = model('product_category')->getChildIDArray($param['cid']);
|
||
$where['b.cid'] = ['in', $cid_arr];
|
||
$cid = $param['cid'];
|
||
}
|
||
else
|
||
{
|
||
$cid = 0;
|
||
}
|
||
|
||
$field = ['b.id', 'b.cid', 'b.name', 'b.shortname', 'b.isnew', 'b.ishot', 'b.recommend', 'b.viewcount', 'b.brand_id'];
|
||
$order = ['a.id' => 'desc'];
|
||
$list = model('collection')->getList($where, $order, $field, 10);
|
||
|
||
foreach ($list as $key => $value) {
|
||
$product_two_img = model('product_two_img')->where(['product_id' => $value['id']])->find();
|
||
$list[$key]['product_two_img'] = $product_two_img['image_url'];
|
||
}
|
||
|
||
$data = [
|
||
'list' => $list->isEmpty() ? null : $list->items(),
|
||
'page' => $list->render(),
|
||
'cid' => $cid
|
||
];
|
||
|
||
$this->assign($data);
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function new_logout()
|
||
{
|
||
$this->_logout();
|
||
return $this->redirect('usmobile/customer/login');
|
||
}
|
||
|
||
public function forgetpwd() {
|
||
$token = $this->request->param('token') ? $this->request->param('token') : '';
|
||
|
||
$this->assign('token', $token);
|
||
return $this->fetch();
|
||
}
|
||
|
||
public function sendemail($to, $to_name, $subject, $body, $from_email = '', $from_name = 'ORICO') {
|
||
$email_host = (string) Config::get('email_host');
|
||
$email_tls = (string) Config::get('email_tls');
|
||
$email_port = (string) Config::get('email_port');
|
||
$email_user = (string) Config::get('email_user');
|
||
$email_pass = (string) Config::get('email_pass');
|
||
$email_code = (string) Config::get('email_code');
|
||
$email_replyaddr = (string) Config::get('email_replyaddr');
|
||
$website_email = (string) Config::get('website_email');
|
||
|
||
// Passing `true` enables exceptions
|
||
$mail = new \mail\PHPMailer\PHPMailer(true);
|
||
try {
|
||
//Tell PHPMailer to use SMTP
|
||
$mail->isSMTP();
|
||
//$mail->setLanguage('en');
|
||
//Enable SMTP debugging
|
||
// 0 = off (for production use)
|
||
// 1 = client messages
|
||
// 2 = client and server messages
|
||
$mail->SMTPDebug = 0;
|
||
$mail->Host = $email_host;
|
||
// if your network does not support SMTP over IPv6
|
||
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
|
||
$mail->Port = $email_port;
|
||
$mail->CharSet = strtolower($email_code);
|
||
$mail->Encoding = 'base64';
|
||
$mail->SMTPKeepAlive = true;
|
||
//Set the encryption system to use - ssl (deprecated) or tls
|
||
$mail->SMTPSecure = strtolower($email_tls);
|
||
//Whether to use SMTP authentication
|
||
$mail->SMTPAuth = true;
|
||
//Username to use for SMTP authentication - use full email address for gmail
|
||
$mail->Username = $email_user;
|
||
//Password to use for SMTP authentication
|
||
$mail->Password = $email_pass;
|
||
//Set who the message is to be sent from
|
||
if ($from_email) {
|
||
$mail->setFrom($from_email, $from_name);
|
||
} else {
|
||
$mail->setFrom($email_replyaddr, 'Sender');
|
||
}
|
||
//Set an alternative reply-to address
|
||
if ($website_email) {
|
||
$mail->addReplyTo($website_email, 'Reply');
|
||
}
|
||
//Set who the message is to be sent to
|
||
$mail->addAddress($to, $to_name);
|
||
//$mail->addAddress($website_email, 'Recipient');
|
||
//Set the subject line
|
||
$mail->Subject = $subject;
|
||
//Read an HTML message body from an external file, convert referenced images to embedded,
|
||
//convert HTML into a basic plain-text alternative body
|
||
$mail->msgHTML($body);
|
||
//$mail->Body = 'This is the HTML message body <b>in bold!</b>';
|
||
//Replace the plain text body with one created manually
|
||
$mail->AltBody = 'This is a plain-text message body';
|
||
$mail->WordWrap = 60;
|
||
//send the message, check for errors
|
||
if (!$mail->send()) {
|
||
$result = ['code' => -1, 'msg' => 'The email sending failed, try again later. '];
|
||
} else {
|
||
$result = ['code' => 200, 'msg' => 'The email sending successful'];
|
||
}
|
||
} catch (\mail\PHPMailer\Exception $e) {
|
||
$result = ['code' => -2, 'msg' => 'The email sending failed, try again later. '];
|
||
}
|
||
return $result;
|
||
}
|
||
}
|